DB2调优参考文档ver2010231453.docx
《DB2调优参考文档ver2010231453.docx》由会员分享,可在线阅读,更多相关《DB2调优参考文档ver2010231453.docx(9页珍藏版)》请在冰豆网上搜索。
DB2调优参考文档ver2010231453
文档编号:
TS-Q-DB2-002
DB2调优参考文档
北京中软国际信息技术有限公司
目录
目录2
1.文档说明3
1.1、文档内容3
1.2、适用情况3
1.3、STMA和STMADC库说明3
1.4、参数总体说明3
2.锁参数调整4
2.1、锁定升级4
2.2、锁超时5
2.3、调整方法5
3.对表做统计runstat6
3.1、runstat的作用6
3.2、runstat的注意事项6
3.3、runstat的方法7
4.缓冲池调优7
4.1.监控缓冲池命中率8
4.2.缓冲池参数调整9
文档修改记录
序号
版本
修改内容
修改日期
修改人
1
1.0
创建
2012-10-21
宋超
2
2.0
修改完善
2012-10-23
宋超
1.文档说明
1.1、文档内容
1)本文档是数据库性能调优的指导性参考文档。
文档提供了需调整的参数的调整思路、方法和具体步骤。
各现场还需要根据实际平台环境对具体相参数的调试做验证。
2)本文档内容涉及对“锁参数、表统计、缓冲池”调优。
主要针对于DB2v8版本的stmadc库的优化。
(注意stmadc库是昵称,真实库名为dcold,两者指同一个库)。
1.2、适用情况
由于数据库性能所引起的“应用响应缓慢,影响到用户的正常使用”的情况出现,可尝试参照本文档给出的方法对数据库进行优化。
1.3、STMA和STMADC库说明
5300升级后,stma和stmadc库都在使用,在访问决策管理系统时,会同时访问到这两个库,stma库部分功能转移到stmadc,故在调优过程中,当出现资源分配紧张时,可考虑将stma库的参数值适当调小些(如可调小stma的缓冲池),以分出部分资源用于调整stmadc库,但在资源够用情况下,最好不要对stma库做调整,维持原参数。
1.4、参数总体说明
关于文档中涉及到的“参数”做如下说明,详见下表:
此表中的红色参数,要按红色的参数设置。
参数名
对应数据库
参数说明
原值
调整后参数值
适用版本
locklist
Stmadc(dcold)
分给锁的内存
20000
DB2v8、v9
maxlocks
Stmadc(dcold)
分配locklist的百分比
90
DB2v8、v9
locktimout
Stmadc(dcold)
锁超时
-1
300
DB2v8、v9
runstat
Stmadc(dcold)
表做统计
每周做一次
DB2v8
Stmadc库:
STMADC_BUFFP_32K缓冲池
Stmadc(dcold)
STMADC_BUFFP_32K缓冲池页面大小小于6000,调整为6000。
<6000
6000
DB2v8
Stma库:
STMABP缓冲池
Stma(stmaold)
STMABP缓冲池页面大小大于10000的调整为10000。
>10000
10000
DB2v8
bufferpool
Stmadc(dcold)
Stma(stmaold)
缓冲池
其他缓冲池依当地环境调整
DB2v8
1)锁参数,locklist调为20000,maxlocks调为90,locktimeout调为300,这是一个平均值,DB2v8、v9版本均可采用这3个值。
2)对表做统计,仅适用于DB2v8版本。
3)缓冲池调整,仅适用于DB2v8版本。
2.锁参数调整
锁参数调整涉及到锁定升级(locklist,maxlocks)和锁定超时这两项。
与锁相关的参数,可直接按照建议值进行调整。
2.1、锁定升级
锁定升级--如果应用程序访问数据库时修改了表中的许多行,最好对整个表有一个锁,而不是在每一行上有多个锁。
对于每个锁,DB2都需耗费内存,因此,假如一个表锁可以代替大量的行级锁,则节省的存储区域可以被其它应用程序使用。
当多个行级锁转换为表锁时,称为锁定升级。
LOCKLIST:
分配给锁的内存空间大小
MAXLOCKS:
允许分配给单个应用程序的全部锁列表(locklist)的百分比。
为了防止一些单个的锁占用太多的资源,DB2将执行锁定升级,以避免资源浪费。
锁升级有两种不同情况:
1、当某个应用程序超过MAXLOCKS配置参数定义的锁列表的百分比,数据库管理器将试图通过为提出锁请求的应用程序授予表锁并释放行级锁来节省内存空间。
2、与数据库相连接的多个应用程序由于拥有大量的锁而占满了锁列表。
DB2将试图通过获取表锁并释放行级锁来节省内存空间。
2.2、锁超时
Locktimout:
一个被阻塞的查询会无限地等待一个未被满足的锁的请求。
通过使用LOCK_TIMEOUT设置,可以指定一个session锁等待的时间。
当锁超时发生时,session会返回应用程序“已超过了锁请求超时时段”消息,避免了无限止的锁等待。
2.3、调整方法
DB2数据库锁参数调整:
将locklist调为20000;maxlocks调为90;locktimeout调为300(5分钟)(这3个参数适用于db2各版本。
调整完毕后无需重启db2)
方法如下:
#su-db2admin--需登录到db2服务器上执行
$db2connecttodcold--连接到dcold即stmadc库
$db2level--查看DB2版本
$db2getdbcfgfordcold|grep-ilock--查看当前参数值
$db2updatedbcfgusinglocklist20000maxlocks90--修改locklist、maxlocks
$db2"updatedbcfgfordcoldusinglocktimeout300"--修改locktimeout
$db2getdbcfgfordcold|grep-ilock--查看修改后的参数值
3.对表做统计runstat
3.1、runstat的作用
一个SQL在写完并运行之后,其实我们只是告诉了DB2去做什么,而不是如何去做。
而具体的如何去做,就取决于优化器。
优化器为了生成最优的执行计划,就得掌握当前的系统信息,目录中的统计信息等等,如果这时掌握的系统信息还是过去陈旧的,优化器就不能生成最优的执行计划,则势必对性能造成很大影响。
下面举例说明为何需要对表做runstats:
·在给表创建一个index后,我们最好做一次runstat,否则可能index没有生效。
·在对table做了一次reorg后,记得要做一次runstats。
因为对表做reorg,会修改表的很多信息,比如高水位等,所以做一次runstats,可以更新统计信息。
·当表里数据发生了比较大的变化,一般来说,大约表里面的数据量的10%-20%发生了变化,就应该作一次runstats。
这些变化包括删除,修改,插入。
runstats命令就是用来收集数据库对象的状态信息,每做一次的runstat将对数据库对象作一次信息更新。
3.2、runstat的注意事项
Ø不要选择在业务繁忙期,runstat过程中会对访问造成一定影响。
ØDB2v8版本,默认情况下没有自动runstat机制,建议DB2v8版本的环境每周做执行一次runstat。
ØDB2v9以上版本对runstat机制做了改进,无需要人工参与,会每2小时自动做统计,当然现场也可根据实际情况,在v9上手工执行runstat。
Ø对表做统计无需重启db2。
3.3、runstat的方法
以stmadc(dcold)库为例,其它库方法与dcold库相同。
方法为:
1、通过语句生成runstat脚本——找到需要runstat的表;
2、对生成的脚本进行修改,执行修改后的runstat脚本。
#su-db2admin
$db2level--查看DB2版本
$db2connecttoDCOLD--连接到dcold库
$db2"select'RUNSTATSONTABLE'||RTRIM(Ltrim(TABLE_SCHEMA))||'.'||RTRIM(Ltrim(TABLE_NAME))||'ONKEYCOLUMNSWITHDISTRIBUTIONONALLCOLUMNSANDSAMPLEDDETAILEDINDEXESALLALLOWREADACCESS;'fromSYSIBM.TABLESWHERETABLE_SCHEMA='DB2ADMIN'andTABLE_TYPE='BASETABLE'">dcold.sql
注意:
上条语句执行后将生成dcold.sql脚本,删除此脚本的前3行和最后1行。
$db2-tvf/home/db2admin/dcold.sql--执行这个sql脚本dcold.sql
4.缓冲池调优
缓冲池是内存中的一块存储区域,用于临时读入和更改数据库页。
缓冲池调优的目是帮助DB2尽可能好地利用可用于缓冲区的内存。
整个缓冲区大小对DB2性能有巨大影响。
调优注意事项:
缓冲池大小需要调整到一个适当值,并不是越大越好,如果总的缓冲区太大,并且没有足够的存储器可用来分配给它们,那么还会造成性能急剧下降。
建议在调整时,先记录下各个缓冲值当前值大小,在当前值基础上,每次加200,然后,再对命中率观察,是否有提高,多增加几次,来得到一个合理值。
,如果调整完后,命中率反而降低,请再回调。
(有个原则是,如果是32位操作系统,最大不要超过1G。
)
如果出现服务器内存资源不足时,可适当调小stma库的缓冲值,以腾出部分资源给stmadc库使用。
以下仅针对db2v8版本,V9.0以上版本缓冲池大小已由DB2自动维护,无需手工干预。
。
4.1.监控缓冲池命中率
缓冲池命中率,需要在业务访问期间观察,最好在业务繁忙时,可使用db2top工具观察,看哪个使用的最多,命中率如何。
如果命中率不高,则需要调整,如果命中率高(如80%以上为理想,90%以上为最佳),则无需调整。
db2top在DB2工作组版本里不提供,企业版中自带。
v8版本中也可把企业版中的db2top工具拷贝到v8版本db2服务器上,放在/usr/bin目录下,并给执行权限后可使用。
演示示例:
1)先在root用户下给可执行权限
#chmod755/usr/bin/db2top
2)进入到db2admin用户,查看dcold(即stmadc)库的缓冲池命中率情况
#su-db2admin
$/usr/bin/db2top-ddcold--大体出现如下界面:
[\]17:
44:
02,refresh=2secs(0.003)AIX,part=[1/1],DB2ADMIN:
DCOLD
[d=Y,a=N,e=N,p=ALL][qp=off]
#####################################Forhelptypehor...
###########db2top-h:
usage
##########
######################Status:
Active
#########Uptime:
24d22h:
03m:
54s
#########Lastbackup
############################2012/10/15-14:
19:
47
DB2InteractiveSnapshotMonitorV2.0
Usethesekeystonavigate:
d-Databasel-Sessionsa-Agent
t-Tablespacesb-BufferpoolsT-Tables
D-DynamicSQLU-Locksm-Memory
s-Statementsp-Partitionsu-Utilities
A-HADRF-FederationB-Bottlenecks
J-Skewmonitorq-Quit
3)选择b–Bufferpools,出现动态界面后,观察缓冲池使用
4.2.缓冲池参数调整
1)查看dcold库内存情况下
$db2mtrk-d–v(从显示结果中找到DCOLD相关信息,如下)
数据库的内存:
DCOLD
Backup/Restore/UtilHeap的大小为16384个字节
PackageCache的大小为5767168个字节
CatalogCacheHeap的大小为1277952个字节
BufferPoolHeap的大小为33030144个字节
BufferPoolHeap的大小为65929216个字节
BufferPoolHeap的大小为33161216个字节
BufferPoolHeap的大小为6717440个字节
BufferPoolHeap的大小为1196032个字节
BufferPoolHeap的大小为42287104个字节
BufferPoolHeap的大小为671744个字节
BufferPoolHeap的大小为409600个字节
BufferPoolHeap的大小为278528个字节
BufferPoolHeap的大小为212992个字节
LockManagerHeap的大小为84344832个字节
DatabaseHeap的大小为5160960个字节
OtherMemory的大小为0个字节
总计:
280461312个字节--(即280M)
2)查看dcold库(即stmadc)的各个缓冲池的名字及参数信息当前值
#su-db2admin(需登录到db2服务器上执行)
$db2connecttodcold--连接到dcold库
$db2level--查看DB2版本
$db2"select*fromsyscat.bufferpools"--各个缓冲池的名字及参数信息
$db2"selectBPNAME,NPAGES,PAGESIZEfromsyscat.bufferpools"
BPNAMENPAGESPAGESIZE
-------------------------------------------------
IBMDEFAULTBP-14096
STMADCSYSBP2504096
ISM_TEMPBUF_32K20032768
CDA_BUFFP_16K200016384
STMADC_BUFFP_32K200032768
STMADCTMPBP100032768
如上,BPNAME--dcold库的几个缓冲池的名字;
NPAGES--缓冲池页数;(主要看这个值)
PAGESIZE--每个页大小(byte)
缓冲池占用内存大小M=页数*页大小
3)缓冲池调整方法:
参数都调整后需要重启数据库。
调整dcold库中的STMADC_BUFFP_32K缓冲池页面大小,若页面大小小于6000,则整为6000(即6000页*32k=192M)。
示例如下:
(可优先调整dcold库的下面两个缓冲池值)
$db2connecttodcold
--对STMADC_BUFFP_32K调整
$db2ALTERBUFFERPOOLSTMADC_BUFFP_32KIMMEDIATESIZE6000
dcold的其它缓冲池,可在原值基础上每次加上200,调整方法同上。
调整stmaold库中的STMABP缓冲池页面大小,若页面大小大于10000,则整为10000。
调整方法同上。