如何进行DB2性能调节工作分析


如何进行DB2性能调节工作分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。近期负责了Metric项目的服务器性能维护,对DB2的性能调节做了些研究。整体感觉数据库调优的关键点应该还是在建库阶段,好的查询更能得到更好的性能。而后期对数据库参数等的调节结果并不是非常明显的。

1,Monitoringdb2 get database manager monitor switches

//显示监视开关的情况

db2 update dbm cfg using DFT_MON_BUFPOOL ON DFT_MON_LOCK ON

db2 update dbm cfg using DFT_MON_SORT ON DFT_MON_STMT ON

db2 update dbm cfg using DFT_MON_TABLE ON DFT_MON_UOS ON

db2 terminate

db2stop

db2start

//在实例级打开监视开关,这样随着实例的重启,开关生效

db2 get database manager monitor switches

db2 get monitor switches

//发现实例级和下面的数据库监视开关都打开了

db2 deacivate database tp1

db2 activate database tp1

//重新激活数据库,刷新监视数据

select agent_id,rows_read,rows_written,rows_selected,rows_inserted from sysibmadm.snapappl

//监视每个代理读写查询的情况,如果read的数量远高于select的数量,考虑是不是缺少索引

//在我的工作中,很少遇到写多的情况,所以对这方面也没深入

db2 get snapshot for tables on tp1 > sntab1.txt

//接下来监视tp1数据库下所有表的读写啦

##下一步,就是抓到那个有大量读大于写的表,然后提取该表上的查询SQL

##这里就要考虑两种情况了,是静态的还是动态的

##@@@静态的,从包里提取

db2bfd -s sqltp1st.bnd

##@@@动态的,可以用snapshot SQL STATEMENT抓取,这里不写了//然后就要提取出我们关注的大量读的查询SQL

//我不太喜欢这部,累眼睛,还烦琐!!!如果有大量查询SQL,还需要想办法自己找出

db2 describe indexes for table acct show detail

//然后就是从提出的SQL中找到表,从表中看有没有索引,没有的话,新建

##之后呢,就可以从访问计划中看索引有没有生效

##静态SQL可以用db2expln从包里弄,本人比较喜欢db2exfmt,因为动静SQL都可以弄

##后面有db2exfmt关于动静的例子,我比较习惯把SQL statement拿出来

##然后放进文本里,db2expln -d GTSSTGMS -f SQL.txt -g -z ; -o GTSSTGMS_sort.txt

##或者,db2 connect to tp1

##db2 set current explain mode explain

##db2 set current explain snapshot explain

##db2 “select name,address from acct where ……”

##db2exfmt -l -d tp1 -o extp2.txt => vi extp2.txt
############2,Talespace and I/O Performance##################

db2 select bpname,bufferpoolid,npages,pagesize from syscat.bufferpools

//查看数据库的缓冲池,syscat.bufferpools中的bufferpoolid字段和sysibmadm.snapdb_memory_pool

//的pool_secondary_id是关联的,从后一张表中记载着用户用户间的缓冲池和系统自建的缓冲池

//CURRENT_SIZE 当前大小;POOL_CONFIG_SIZE 设置大小;HIGH_WATERMARK 最高记录;

//我发现,这和使用 db2pd -db GTSSTGMS -mempools是对应的 PhySz PhyUpBnd PhyHWM

//使用 db2pd -db GTSSTGMS -memset,将同类内存集合并计算

//在这里插一段缓冲池自调节功能介绍

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@开发云主机域名@@@@@@@@@@@@@@@@@@@@

下面我们创建示例缓冲池MYBP1,其使用自调整功能(注意其create bufferpool语句使用了automatic),初始大小为400K,具体如清单4所示:

创建使用自动自调整功能的示例缓冲池MYBP1

db2 create bufferpool mybp1 immediate size 100 automatic pagesize 4k

db2 “select BPNAME, NPAGES from sysibm.sysbufferpools”

当缓冲池启用了自调整功能时,该特定缓冲池的 sysibm.sysbufferpools 表中的 NPAGES 字段将设置为 -2。当自调整功能处于禁用状态时,NPAGES 字段将设置为缓冲池的当前大小。

db2 alter bufferpool mybp2 immediate size 100 automatic

表空间在读大数据的时候,给表空间指定缓冲区是没有用的。这种情况下,DB2会利用直接I/O去接触大数据

db2 create bufferpool BP8K size 1000 pagesize 8k

db2 create system temporary tablespace TMP8K pagesize 8k managed by system using (‘TMP8K’) EXTENTSIZE 8 PREFETCHSIZE 8 bufferpool BP8K

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

###接下来呢,当然是看命中率了 当然可以用 db2 get snapshot for database on tp1

###这里介绍另外一个方法

select data_physical_reads,index_physical_reads,total_physical_reads,bp_name from sysibmadm.bp_hitratio where bp_name not like ‘IBMSYSTEM%’select data_logical_reads,index_logical_reads,total_logical_reads,bp_name from sysibmadm.bp_hitratio where bp_name not like ‘IBMSYSTEM%’select data_hit_ratio_percent,index_hit_ratio_percent,total_hit_ratio_percent,bp_name from sysibmadm.bp_hitratio where bp_name not like ‘IBMSYSTEM%’

//上面这样可以检测每一个缓冲器的命中率情况

###接下来,看一下缓冲器的读写情况

select substr(bp_name,1,15) as bp_name,total_physical_reads,average_read_time_ms from sysibmadm.bp_read_io where bp_name not like ‘IBMSYSTEM%’select substr(bp_name,1,15) as bp_name, total_write,average_write_time_ms from sysibmadm.bp_write_io where bp_name not like ‘IBMSYSTEM%’

//那个bufferpool比较忙,用于那个表空间,该表空间有哪些表,检查。。。###下面检查表空间

select pool_data_p_reads as Total_Data_Reads, Pool_async_data_reads as Asynch_Data_Reads, pool_async_read_time from sysibmadm.snapbp where bp_name=’IBMDEFAULTBP’select pool_async_data_read_reqs as Data_Prefetch_Requests, decimal(POOL_ASYNC_DATA_READS)/decimal(POOL_ASYNC_DATA_READ_REQS) as Data_Page_Per_Prefetch, pages_from_block_ios from sysibmadm.snapbp where bp_name=’IBMDEFAULTBP’###其中DATA_PAGES_PER_PREFETCH要match上extent size,为了得到extent size,

###(最好打开Automatic Prefetch size,这样自动计算数值NUM of Containers * Extent Size)使用

db2 get snapshot for tablespace on tp1

###最好将IOSERVERS和IOCLEANERS设为自动

db2 get db cfg show detail | grep NUM_IO

NUM_IOSERVERS AUTOMATIC?

NUM_IOCLEANERS AUTOMATIC?
############3,Memory Management##################

###当然是要看内存当前使用了

db2 deactivate db tp1

db2 activate db tp1

db2 connect to tp1db2mtrk -d -v

db2pd -db tp1 -mempools

db2pd -db tp1 -memsets

//这里就不多说了,好多我也不明白,明白的具体情况具体分析############4,Memory Management##################

db2 get snapshot for database on tp1 | grep -i sort

//需要看一下total sorts和Sort Overflows的情况

//如果sort heap不够用的话,会用临时表空间

//可以snapshot一下这个临时表空间

//特别注意Buffer pool temprorary data logical reads和Buffer pool temporary data physical reads

//Buffer pool data writes,Asynchronous pool data page writes

###接下来就要估一下sortheap是否够用

db2expln -d tp1 -f sortquery.sql -g -z ; -o expsort.txt

###这里主要看Rows * Row Width 和 sortheap大小
############5,Access plan(Optimizer plan)##################

Monitor —– Static SQL

cd $HOME/sqllib/bin

db2 connect to tp1

db2 bind sqltp1st.bnd explain yes explsnap yes

db2exfmt -l -d tp1 -n SQLTP1ST -# / -o exptp1.txtsort heap size * 4K(PAGE) 和 numrows*rowwidth(BYTE) 比较大小,来决定sort heap size

PCTFREE & FREEPAGE => 1) 只读表,如果对于一个表没有任务更新活动,那么可以将定义为没有空余空间,而且也没有任何比较reorg,因为不会产生分页。

Monitor —– Dynamic SQL

cd $HOME/sqllib/bin

db2 connect to tp1

db2 set current explain mode explain

db2 set current explain snapshot explain

db2 “select name,address from acct.where acct_grp
db2exfmt -l -d tp1 -o extp2.txtinsert优化你的问题比较简单,我个人认为,db2插入6000条数据,肯定30秒之内,我建议你做如下的调整:1、update db cfg using logfilsz 512002、update db cfg using logbufsz 10243、你插入的6000条数据从哪里来的,怎么插入的,也就是说,如果你的insert 后面使用的是select,那么你要看看你的select本是是不是很慢4、把你的insert语句中所有涉及到的表,适用下面的语句执行一下:db2 reorg table .db2 runstats on table . with distribution and detailed indexes all5、如果你的表空间使用的bufferpool太小,那么必须增加你的bufferpool,适用db2 “select bpname,pagesize,npages from syscat.bufferpools”命令查看你的bufferpool总大小,然后在保证所有bufferpool总合不超过1G的情况下,尽量增加buffer的大小,调整bufferpool的大小使用db2 “alter bufferpool ibmdefaultbp size 51200″关于如何进行DB2性能调节工作分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注开发云行业资讯频道了解更多相关知识。

相关推荐: 虚拟主机怎么管理控制

虚拟主机怎么管理控制?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。虚拟主机控制,主要通过控制面板系统和FTP软件开发云主机域名来实现,搭建网站涉及的域名绑定、首页设置、404页面、…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/04 13:29
下一篇 06/04 13:30

相关推荐