DB2 9.7 自动存储与内存管理

DB2 9.7 自动存储与内存管理

自动存储 – DB2 9.7新增哪些功能?

现有数据库允许通过更改命令来使用自动存储功能
#1 - ALTER DATABASE 启用 AUTOMATIC STORAGE

ALTER DATABASE <dbName> MANAGED ADD STORAGE ON 'storagePath1','storagePath2',...

在 ALTER DATABASE之后转换单独的表空间
#2 – 使用 ALTER TABLESPACE命令来启用自动存储功能管理单独的表空间, 并且保持现有容器.
ALTER TABLESPACE <tbSpcName> MANAGED BY AUTOMATIC STORAGE


#3 (额外) – 使用REBALANCE选项来删除所有之前的用户定义的DMS容器并且将数据转移到新的有自动存储功能的容器
ALTER TABLESPACE <tbSpcName> REBALANCE


DB2 内存管理

所有内存堆都在数据库共享内存集中
通过使用DATABASE_MEMORY 参数来设置
32位系统的内存集大小受限于内存地址问题
64位系统内存集可以视为没有限制

DB2 数据库内存模式 – 堆

堆可以通过调用内存查询指令来查看

> db2mtrk -d
Tracking Memory on: 2008/06/29 at 11:08:29

Memory for database: SAMPLE

utilh pckcacheh catcacheh bph bph bph bph bph
16.0K 144.0K 64.0K 4.1M 592.0K 336.0K 208.0K 144.0K

lockh dbh
576.0K 3.6M

DB2内存优化 - STMM

DB2 9开始引入了一种革命性的内存优化系统,称之为自调优内存管理系统 (STMM)
与DB2实例 (INSTANCE_MEMORY), 和数据库 (DATABASE_MEMORY) 级别内存参数工作
DB2数据库参数:
Buffer pools, sort, locklist, package cache, 和 total database memory
在线内存优化无需插手
不需要数据库管理员的干预
能够感知潜在的工作负载并且根据需要来调节优化内存
能够迅速的根据工作负载来调整重新分配内存

STMM 外部形式

配置
SELF_TUNING_MEM配置参数是STMM功能的主要开关
STMM 设置对每个DPF模式都是独立的
配置参数和缓冲池大小需要设置成 AUTOMATIC 来启动优化
之后的幻灯片会更详细的介绍这些功能
内存参数改变的一致性
所有的配置变化都写入磁盘
即使重新启动或者停止数据库,所有的变化都会被保留
日志
所有的配置变化都写入 db2diag.log 日志文件
内部优化信息写入 STMM.log日志文件


STMM 对DB内存的操作方式

数据库级别的操作有两种方式:
调整DATABASE_MEMORY参数
需要的时候,向操作系统索取或者返还内存空间
某个特定DB2数据库总的内存空间会随着时间而增长

不调整DATABASE_MEMORY参数
STMM功能还是会优化内存,但是数据库使用的内存总量保持不变
一个内存堆空间的增长会导致其它堆空间的下降
能够同时优化多个数据库以及多个实例
可以在分区和非分区环境下工作


STMM是如何工作的?


持续监控系统来索取或者返回空闲的内存空间 (当 DATABASE_MEMORY 设置成 AUTOMATIC时)
以迭代方式运行程序来找出一套对所有内存堆的最优化配置方案
迭代方式能避免系统出现不稳定情况
控制算法决定每次启用的时间间隔并且避免性能出现上下波动
每次工作区间每个内存堆最多增长50%或减少20%


STMM – 配置和语法


新创建的数据库默认启用STMM
新的配置参数 SELF_TUNING_MEM 必须设置成ON的状态
update db cfg for database <db_name> using SELF_TUNING_MEM ON
将那些你需要优化的内存堆的参数设置成 AUTOMATIC
update db cfg for database <db_name> using <param> AUTOMATIC
也可以使用 STMM来优化缓冲池:
alter bufferpool <bp_name> size AUTOMATIC
create bufferpool <bp_name> size AUTOMATIC

STMM – 配置和语法


查询系统是启用优化功能 :
连接数据库
获取数据库配置信息
get db cfg for <db_name> show detail
检查 SELF_TUNING_MEM 参数值
如果设置成 ON (ACTIVE), 那么系统使用了优化功能
如果设置成 OFF, 或者设置成 ON (INACTIVE) 那么系统没有使用优化功能
想要关闭优化功能, 可以 :
将 SELF_TUNING_MEM 主开关设置成 OFF
update db cfg for database <db_name> using SELF_TUNING_MEM OFF
或者将单独的内存堆参数设置成手动 (将保持当前值) 或者设置成一个特定的值 (将改变到设置值) 将会停止优化那个内存堆
update db cfg for database <db_name> using locklist manual
update db cfg for database <db_name> using locklist 1000
alter bufferpool <bp_name> size manual
alter bufferpool <bp_name> size 1000


STMM – 其它值得注意的变化

内存的配置参数很简单
用单独一个参数 INSTANCE_MEMORY 来指定数据库管理器(单独实例)能够从它自己的私有和共享内存堆中支配的所有内存
用一个单独的参数 APPL_MEMORY 控制DB2代理用来响应应用程序请求的内存最大值
以上两种都默认设置成 AUTOMATIC
所有的 STMM 能够调整的内存参数都是动态的
内存参数的变化不需要重启实例


总结 - STMM

STMM – DB2的高级内存自动优化管理工具
数据库在线优化而且不需要管理员的干预
可以用来优化整体数据库内存,应用程序内存和实例内存使用情况
优化数据库内存中四个最大的使用者
通过数据库配置参数来激活 (和更改缓冲池命令)
减少数据库管理员手动优化的负担
能够在一个小时左右找到一套接近最优化的方案
能够在多分区数据库中工作