在DB2调优过程中经常希望能够获取当前生产环境中执行缓慢的sql,获取后可以针对特定慢的sql进行精确调优。以下脚本可以利用,操作还是比较繁琐,需要手动运行。
成都创新互联公司拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的成都网站制作、网站设计、网站维护、服务器托管解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、商城系统网站开发、政府网站等各类型客户群体,为全球1000+企业提供全方位网站维护、服务器维护解决方案。
db2 connect to tablename;
db2 -x "
select current timestamp ||'|'|| stmt_text ||'|'|| member
||'|'|| NUM_EXEC_WITH_METRICS ||'|'|| TOTAL_ACT_TIME ||'|'|| TOTAL_ACT_WAIT_TIME ||'|'|| TOTAL_CPU_TIME
||'|'|| POOL_READ_TIME ||'|'|| LOCK_WAIT_TIME ||'|'|| TOTAL_SECTION_SORT_TIME ||'|'|| TOTAL_SECTION_SORTS
||'|'|| ROWS_READ ||'|'|| ROWS_RETURNED ||'|'|| POOL_DATA_L_READS ||'|'|| POOL_TEMP_DATA_L_READS
||'|'|| POOL_INDEX_L_READS ||'|'|| POOL_TEMP_INDEX_L_READS ||'|'|| POOL_DATA_P_READS
||'|'|| POOL_TEMP_DATA_P_READS ||'|'|| POOL_INDEX_P_READS ||'|'|| POOL_TEMP_INDEX_P_READS
||'|'|| SORT_OVERFLOWS ||'|'|| TOTAL_SECTION_TIME ||'|'|| TOTAL_SECTION_PROC_TIME
||'|'|| FCM_RECV_WAIT_TIME ||'|'|| FCM_SEND_WAIT_TIME
FROM
(SELECT * FROM TABLE(MON_GET_PKG_CACHE_STMT(NULL , NULL, '5 ', -2))
WHERE NUM_EXEC_WITH_METRICS > 0 AND TOTAL_ACT_WAIT_TIME> 5000)
WHERE TOTAL_ACT_WAIT_TIME/(NUM_EXEC_WITH_METRICS*1.0) > 5000" >> sqllist.txt
db2 connect reset;
这段脚本是抓取慢SQL的脚本,需要在数据库服务器上每5分钟执行一次。
- 脚本每次执行会抓取过去5分钟里平均执行时间大于5秒的SQL语句
- 抓取的SQL会输出到文件sqllist.txt中,监控该文件的大小,避免文件过大导致磁盘空间相关问题
- 因为脚本每次运行抓取的只是过去5分钟执行过的SQL语句,在白天工作时间执行就可以了,w无人值守的时间将脚本执行关闭掉。
具体的监控内容,可以通过ibm官网进行查询
例如 TOTAL_ACT_TIME