DB2缓冲池和索引调优的方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DB2缓冲池和索引调优的方法
1 DB2性能问题的表现
应用系统(OA)上的表现:一般是登录、首页、待办列表等数据量比较大的模块,响应时间长,耗时数秒到数十秒都有可能。有时候是用户访问高峰期慢,下班时间又比较正常。
操作系统上的表现:一般是中间件服务器(W AS)系统正常,CPU和IO占用不会持续超过50%,系统运行进程不会有持续的等待。数据库服务器则非常繁忙,CPU占用持续在50%以上,往往会达到持续90%左右,IO占用可能不高。从系统层面判断,性能瓶颈出在数据库上。
2 调优的基本思路
DB2的性能和操作系统、锁、缓冲池、索引等参数,以及SQL的写法都有很大关系,受限于个人认识,这里主要介绍缓冲池和索引的调优方法。
缓冲池的调整比较简单,一般可以先调整缓冲池,若效果不明显,则再调整索引和SQL。
3 缓冲池调优
缓冲池是内存中的一块区域,DB2会将用到数据放到缓冲池中提高性能。缓冲池太小,每次查询仍然要到磁盘中操作,达不到缓冲的效果。缓冲池太大,超出操作系统管理的限制,会导致数据库无法连接的错误。
缓冲池是通过表空间与数据表发生联系的,数据表存放在指定的表空间中,每个表空间又有指定的缓冲池。因为每张数据表存储的数据量都不同,一般根据每条记录存放的最大数据量,我们会为数据表分别指定4k-32k不同的表空间来存放,以达到优化存储和性能的目的,缓冲池也是类似。这个一般在创建数据库时就会分配好了。
在*unix下,可以使用下面的命令查看缓冲池相关信息:
切换到db2inst1账号
su – db2inst1
连接到pzbdw数据库
db2 connect to pzbdw
查看缓冲池定义
db2 "select BPNAME,NPAGES,PAGESIZE from syscat.bufferpools"
查看表空间的定义,包含表空间名称(TableSpaceName)、使用的缓冲池名称(BufferpoolName),表空间的页大小(TBSPageSize),缓冲池的数量(BufferpoolPages),缓冲池的页大小数据(BufferpoolSize)信息。
db2 "select s.TBSPACE TableSpaceName,b.BPNAME BufferpoolName,s.PAGESIZE TBSPageSize,b.NPAGES BufferpoolPages, b.PAGESIZE BufferpoolSize from SYSCA T.BUFFERPOOLS b,SYSCA T.TABLESPACES s where s.BUFFERPOOLID=b.BUFFERPOOLID"|more
查看mv_workitem表所在表空间和缓冲池信息,一般“MV_”开头的表使用的缓冲池是重点关注对象:
db2 "select TABSCHEMA TableSchemaName, TABNAME TableName, t.TBSPACE TableSpaceName,b.BPNAME BufferpoolName, b.NPAGES BufferpoolPages, b.PAGESIZE BufferpoolSize from SYSCA T.TABLES t ,SYSCA T.BUFFERPOOLS b,SYSCA T.TABLESPACES s where tabname='MV_WORKITEM' and s.BUFFERPOOLID=b.BUFFERPOOLID and t.TBSPACE=s.TBSPACE"
开启缓冲池监控器:
db2 update monitor switches using bufferpool on
在应用系统重现问题后,检查缓冲池的快照:
db2 get snapshot for bufferpools on pzbdw|grep -i buffer|more
检查相关缓冲池快照,需要重点关注的data和index的逻辑/物理读写数据,一般来说,在缓冲池足够的情况下,physical reads值趋近于0,而logical reads值则很大。下面是红塔集团OA的32k缓冲池,在正常时的一个快照。
Bufferpool Snapshot
Bufferpool name = BF32
Buffer pool data logical reads = 493907
Buffer pool data physical reads = 78
Buffer pool temporary data logical reads = 129662
Buffer pool temporary data physical reads = 0
Buffer pool data writes = 1
Buffer pool index logical reads = 10302
Buffer pool index physical reads = 122
Buffer pool temporary index logical reads = 0
Buffer pool temporary index physical reads = 0
Total buffer pool read time (milliseconds) = 671
Total buffer pool write time (milliseconds)= 15
Buffer pool index writes = 58
No victim buffers available = 635
Tablespaces using bufferpool = 2
Alter bufferpool information:
如果发现物理和逻辑读的值相差不大,则使用下面的命令调整缓冲池大小,一般可以每次增加2000左右。
db2 ALTER BUFFERPOOL BF32 size 18000
缓冲池的调整是立即生效的,不需要重启数据库。需要注意的是,缓冲池的大小受物理内存和操作系统限制,一般32位操作系统下,总的缓冲池大小不能超过1G。如果在这个限制下,不能满足所有缓冲池都达到物理读趋近于0,则考虑尽可能保证用户体验影响较大的(MV、UM等开头的表使用的)缓冲池大小。理论上64位操作系统可以管理更大的内存空间,因此可以获得更好的性能。如下所示缓冲池,总大小为
1x4+4x4+3x8+2.5x16+2.5x32+1x32=226M