在數(shù)據(jù)庫(kù)調(diào)優(yōu)過(guò)程中經(jīng)常希望能夠獲取當(dāng)前生產(chǎn)環(huán)境中執(zhí)行緩慢的sql织阅,獲取后可以針對(duì)特定慢的sql進(jìn)行精確調(diào)優(yōu)拟蜻。以下腳本可以利用绎签,操作還是比較繁瑣,需要手動(dòng)運(yùn)行酝锅。
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, '<modified_within>5</modified_within>', -2))
WHERE NUM_EXEC_WITH_METRICS > 0 AND TOTAL_ACT_WAIT_TIME> 3000)
WHERE TOTAL_ACT_WAIT_TIME/(NUM_EXEC_WITH_METRICS*1.0) > 3000" >> slowsql.list
db2 connect reset;
腳本說(shuō)明
這段腳本是抓取慢SQL的腳本诡必,需要在數(shù)據(jù)庫(kù)服務(wù)器上每5分鐘執(zhí)行一次。
- 腳本每次執(zhí)行會(huì)抓取過(guò)去5分鐘里平均執(zhí)行時(shí)間大于3秒的SQL語(yǔ)句
- 抓取的SQL會(huì)輸出到文件slowsql.list中,監(jiān)控該文件的大小爸舒,避免文件過(guò)大導(dǎo)致磁盤空間相關(guān)問(wèn)題
- 因?yàn)槟_本每次運(yùn)行抓取的只是過(guò)去5分鐘執(zhí)行過(guò)的SQL語(yǔ)句蟋字,在白天工作時(shí)間執(zhí)行就可以了,下班時(shí)間將腳本執(zhí)行關(guān)閉掉扭勉。
參數(shù)說(shuō)明
具體的監(jiān)控內(nèi)容鹊奖,可以通過(guò)ibm官網(wǎng)進(jìn)行查詢