千家信息网

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

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,如何进行DB2性能调节工作分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。近期负责了Metric项目的服务器性能维护,对DB2的性
千家信息网最后更新 2025年02月02日如何进行DB2性能调节工作分析

如何进行DB2性能调节工作分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

近期负责了Metric项目的服务器性能维护,对DB2的性能调节做了些研究。整体感觉数据库调优的关键点应该还是在建库阶段,好的查询更能得到更好的性能。而后期对数据库参数等的调节结果并不是非常明显的。
1,Monitoring

db2 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 tp1

db2mtrk -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.txt

sort 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 < 50 order by name"

db2exfmt -l -d tp1 -o extp2.txt

insert优化

你的问题比较简单,我个人认为,db2插入6000条数据,肯定30秒之内,我建议你做如下的调整:

1、update db cfg using logfilsz 51200

2、update db cfg using logbufsz 1024

3、你插入的6000条数据从哪里来的,怎么插入的,也就是说,如果你的insert 后面使用的是select,那么你要看看你的select本是是不是很慢

4、把你的insert语句中所有涉及到的表,适用下面的语句执行一下:

db2 reorg table .

db2 runstats on table . with distribution and detailed indexes all

5、如果你的表空间使用的bufferpool太小,那么必须增加你的bufferpool,适用db2 "select bpname,pagesize,npages from syscat.bufferpools"命令查看你的bufferpool总大小,然后在保证所有bufferpool总合不超过1G的情况下,尽量增加buffer的大小,调整bufferpool的大小使用db2 "alter bufferpool ibmdefaultbp size 51200"

关于如何进行DB2性能调节工作分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

缓冲 数据 情况 大小 空间 数据库 监视 调整 性能 调节 功能 查询 分析 接下来 问题 工作 字段 实例 索引 语句 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 常见小型数据库管理系统 网络安全研究所所长刘权简历 ui设计引领软件开发新风向 服务器显示77 软件开发专业哪个培训学校好 第一届内蒙古网络安全论坛 区残联网络安全工作报告 天英软件开发 网络技术与应用前景怎么样 南宫网络安全和信息化委员会 济宁电商软件开发公司 网络技术的分类组成 软件开发合同逾期约定 东西湖区网络安全项目 光猫软件开发需要什么能力 安徽软件开发平台哪个好 tcga数据库药物化合物来源 宁波第三届网络安全大赛结果 烟台昭阳网络技术服务 萌娃网络安全修炼手册 延庆区综合网络技术服务平台 国外最好的服务器多少钱一个月 小学生网络安全教育手抄报有字 网络安全防护意识短视频 惠普服务器2012密码过期 项目软件开发费用测算 服务器如何触发刷新网页 全球网络技术大会开幕 安卓软件开发怎么加背景图 中国人民解放军医院数据库名称
0