博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
db2缓冲池调优
阅读量:6857 次
发布时间:2019-06-26

本文共 2512 字,大约阅读时间需要 8 分钟。

 

 

缓存池:

冲池是内存中的一块区域,db2会将用到数据放到缓冲池中提高性能。缓冲池太小,每次查询仍然要到磁盘中操作,达不到缓冲的效果。缓冲池太大,超出操作系统管理的限制,会导致数据库无法连接的错误。

缓冲池是通过表空间与数据表发生联系的,数据表存放在指定的表空间中,每个表空间又有指定的缓冲池。因为每张数据表存储的数据量都不同,一般根据每条记录存放的最大数据量,我们会为数据表分别指定4k-32k不同的表空间来存放,以达到优化存储和性能的目的,缓冲池也是类似。这个一般在创建数据库时就会分配好了。

 

 案发预警:

应用系统程序:一般是登录、首页、待办列表等数据量比较大的模块,响应时间长,耗时数秒到数十秒都有可能。有时候是用户访问高峰期慢,下班时间又比较正常。  操作系统上的表现:一般是中间件服务器(WAS)系统正常,CPU和IO占用不会持续超过50%,系统运行进程不会有持续的等待。数据库服务器则非常繁忙,CPU占用持续在50%以上,往往会达到持续90%左右,IO占用可能不高。从系统层面判断,性能瓶颈出在数据库上

 

调优思路:

db2的性能和操作系统、锁、缓冲池、索引等参数,以及SQL的写法都有很大关系,受限于个人认识,这里主要介绍缓冲池和索引的调优方法。 

缓冲池的调整比较简单,一般可以先调整缓冲池,若效果不明显,则再调整索引和sql

切换实例用户id  查看缓存池相关内容su db2inst1db2 connect to db//查看缓存池信息db2 "select BPNAME,NPAGES,PAGESIZE from syscat.bufferpools" 表空间名称(TableSpaceName)使用的缓冲池名称(BufferpoolName),表空间的页大小(TBSPageSize)缓冲池的数量(BufferpoolPages),缓冲池的页大小数据(BufferpoolSize)信息

  

查看mv_workitem表所在表空间和缓冲池信息,一般“MV_”开头的表使用的缓冲池是重点关注对象:

db2 "select TABSCHEMA TableSchemaName, TABNAME TableName, t.TBSPACE TableSpaceName,b.BPNAME BufferpoolName, b.NPAGES BufferpoolPages, b.PAGESIZE BufferpoolSize from SYSCAT.TABLES t ,SYSCAT.BUFFERPOOLS b,SYSCAT.TABLESPACES s where tabname='MV_WORKITEM' and s.BUFFERPOOLID=b.BUFFERPOOLID  and t.TBSPACE=s.TBSPACE"//注意TableSchemaName、BufferpoolName、BufferpoolSize

 

//开启缓冲池监控器:db2 update monitor switches using bufferpool on //在应用系统重现问题后,检查缓冲池的快照:db2 get snapshot for bufferpools on pzbdw|grep -i buffer|more

  

检查db2缓冲池快照,重点关注data和index的逻辑/物理读写数据,一般来说在缓冲池足够的情况下,physiical reads值趋进于0,而logical和reads值则很大,情况反之就是不够用有问题,例如一下案例是xxx系统的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  = 0Buffer pool data writes                    = 1 //Buffer pool index logical reads            = 10302 //Buffer pool index physical reads           = 122 //如果发现物理和逻辑读的值相差不大,则使用下面的命令调整缓冲池大小,一般可以每次增加2000左右

  

db2 ALTER BUFFERPOOL BF32 size 18000 

缓冲池的调整是立即生效的,不需要重启数据库。需要注意的是,缓冲池的大小受物理内存和操作系统限制,一般32位操作系统下,总的缓冲池大小不能超过1G。如果在这个限制下,不能满足所有缓冲池都达到物理读趋近于0,则考虑尽可能保证用户体验影响较大的(MV、UM等开头的表使用的)缓冲池大小。理论上64位操作系统可以管理更大的内存空间,因此可以获得更好的性能。如下所示缓冲池,总大小为:

1x4+4x4+3x8+2.5x16+2.5x32+1x32=226M

 

重复以上步骤再次收集快照信息:

db2 update monitor switches using bufferpool off db2 update monitor switches using bufferpool on  db2 get snapshot for bufferpools on pzbdw|grep -i buffer|more //由于缓冲池的监控器收集的是自启用以后的数据,为获得调整后的准确情况,应关闭后重新打开,再次收集快照信息

  

 

  

转载于:https://www.cnblogs.com/Alexr/p/9385638.html

你可能感兴趣的文章
在rem布局下使用背景图片以及sprite
查看>>
JAVA设计模式之【抽象工厂模式】
查看>>
数字电视的电子节目指南(EPG)及其系统
查看>>
11 复用与多址
查看>>
附录A 编译安装Hadoop
查看>>
android studio building project info 错误
查看>>
【Scala】Scala之Control Structures
查看>>
三星手机拍照,从图库选择照片旋转问题完美解决
查看>>
算法笔记_173:历届试题 斐波那契(Java)
查看>>
菜鸟版JAVA设计模式—外观模式
查看>>
EasyUI----动态拼接EasyUI控件
查看>>
PHP session 跨子域问题总结 ini_set('session.cookie_domain', ".domain.com")
查看>>
Office WPS如何在页眉页脚添加一条横线
查看>>
站在 Android 开发的角度,聊聊 Airbnb 的 Lottie!!!
查看>>
数组去重Demo引出的思考
查看>>
javascript怎么禁用浏览器后退按钮
查看>>
AtomicLong可以被原子地读取和写入的底层long值的操作
查看>>
Android studio 将 Module 打包成 Jar 包
查看>>
coffee script
查看>>
正则表达式大全
查看>>