《DB2性能管理与实战》——2.4 多分区下的内存管理特性

简介:

本节书摘来自异步社区出版社《DB2性能管理与实战》一书中的第2章,第2.4节,作者: IBM中国开发中心(CDL) 信息管理软件开发部,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 多分区下的内存管理特性

DB2性能管理与实战
在分区数据库环境中使用自调整内存功能时,有一些因素决定该功能是否能适当地调整系统。

对分区数据库启用自调整内存功能时,会将一个数据库分区指定为调整分区,所有内存调整决定都根据该数据库分区的内存和工作负载特征作出。在该分区中作出调整决策之后,会将内存调整纷纷到其他数据库分区,以确保所有数据库分区都维护类似的配置。

单调整分区模型假定,仅当所有数据库分区具有类似内存需求时,才会使用该功能。在确定顶是否对分区数据库启用自调整内存功能时,请使用下列准则。
建议对分区数据库使用自调整内存功能的情况

当所有数据库分区都具有类似内存需求并且正在类似硬件上运行时,可以不进行任何修改就启用自调整内存功能。这些类型的环境共享下列特征。

boll 所有数据库分区都在完全相同的硬件上运行,并且多个逻辑数据库分区均匀地分布在多个物理数据库分区中。

boll 数据分布情况最佳或者接近最佳。

boll 工作负载均匀地分布在各个数据库分区中,这意味着各个数据库分区中一个或多个堆的内存需求均相同。

在这种环境中,如果所有数据库分区的配置相同,那么自调整内存功能将正确地配置系统。

建议对分区数据库使用自调整内存功能并进行限定的情况

在环境中的大多数数据库分区具有类似内存需求并且正在类似硬件上运行的情况下,可以使用自调整内存功能,但进行初始配置时要小心。这些系统可能有一组数据库分区用于数据,并且有一组少得多的协调程序分区和目录分区。在这些环境中,将协调程序分区和目录分区配置为与包含数据的数据库分区不同可能会有好处。

应该对所有包含数据的数据库分区启用自调整内存功能,并且应该将其中的一个数据库分区指定为调整分区。由于协调程序分区和目录分区的配置可能不同,因此应对那些分区禁用自调整内存功能,将这些分区的SELF_TUNING_MEM数据库配置参数设置OFF。

建议不要对分区数据库使用自调整内存功能的情况

如果各个数据库分区的内存需求有所不同,或者不同的数据库分区正在极不相同的硬件上运行,那么最好禁用自调整内存功能。

2.4.1 比较不同数据库分区的内存需求

确定不同数据库分区的内存需求是否非常相近的最佳方法是查看快照监视器。如果下列快照元素在所有数据库分区中都相近(差别不超过20%),那么可以认为这些数据库分区的内存需求极为相近。

通过以下命令收集数据:

db2=>get snapshot for database on <dbname>
当前挂起的锁定数           =0
锁定等待数               =0
数据库等待锁定的时间(毫秒)      =0
正在使用的锁定列表内存(以字节计)   =4968
锁定升级次数              =0
互斥锁定升级次数            =0
已分配的共享排序堆总数         =0
共享排序堆高水位标记          =0
超出阈值后的排序次数(共享内存)    =0
排序溢出数               =0
程序包高速缓存查询数          =13
程序包高速缓存插入数          =1
程序包高速缓存溢出数          =0
程序包高速缓存高水位标记(以字节计) =655360
散列连接数                  =0
散列循环数              =0
散列连接溢出数             =0
小散列连接溢出数              =0
后阈值散列连接数(共享内存)      =0
OLAP功能数目             =0
OLAP功能溢出数目           =0
活动OLAP功能数            =0
通过下面命令收集缓冲池的数据:
db2=>get snapshot for bufferpools on <dbname>
缓冲池数据逻辑读取次数        =1801103
缓冲池数据物理读取次数        =59768
缓冲池索引逻辑读取次数        =6908802
缓冲池索引物理读取次数        =7813
缓冲池总计读取时间(毫秒)      =80081
缓冲池总计写入时间(毫秒)      =162749

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
存储 算法 编译器
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
367 0
|
7月前
|
存储 缓存 Java
【高薪程序员必看】万字长文拆解Java并发编程!(5):深入理解JMM:Java内存模型的三大特性与volatile底层原理
JMM,Java Memory Model,Java内存模型,定义了主内存,工作内存,确保Java在不同平台上的正确运行主内存Main Memory:所有线程共享的内存区域,所有的变量都存储在主存中工作内存Working Memory:每个线程拥有自己的工作内存,用于保存变量的副本.线程执行过程中先将主内存中的变量读到工作内存中,对变量进行操作之后再将变量写入主内存,jvm概念说明主内存所有线程共享的内存区域,存储原始变量(堆内存中的对象实例和静态变量)工作内存。
254 0
|
程序员 编译器 C++
【C++核心】C++内存分区模型分析
这篇文章详细解释了C++程序执行时内存的四个区域:代码区、全局区、栈区和堆区,以及如何在这些区域中分配和释放内存。
204 2
|
算法 Java
垃圾回收机制(Garbage Collection,GC)是Java语言的一个重要特性,它自动管理程序运行过程中不再使用的内存空间。
【6月更文挑战第24天】Java的GC自动回收不再使用的内存,关注堆中的对象。通过标记-清除、复制、压缩和分代等算法识别无用对象。GC分为Minor、Major和Full类型,针对年轻代、老年代或整个堆进行回收。性能优化涉及算法选择和参数调整。
255 3
|
Rust 安全 开发者
探索Rust语言的内存安全特性
【6月更文挑战第8天】Rust语言针对内存安全问题提供了创新解决方案,包括所有权系统、借用规则和生命周期参数。所有权系统确保值与其所有者绑定,防止内存泄漏;借用规则保证同一时间只有一个可变引用或多个不可变引用,消除数据竞争和野指针;生命周期参数则强化了引用的有效范围,提升安全性。通过这些特性,Rust帮助开发者编写出更健壮、安全的高性能软件,有望成为系统编程领域的领头羊。
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
179 0
Python成员属性的内存特性与底层内存优化方案
这篇博客主要分享一下python成员属性的内存特性,也就是python底层节约内存的优化方案
|
设计模式 并行计算 安全
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
232 0
|
算法 Java 开发者
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
150 0
|
程序员 编译器 C++
内存分区模型(代码区、全局区、栈区、堆区)
内存分区模型(代码区、全局区、栈区、堆区)
182 2