DB2 提供多層次的 SQL 監控機制,核心在於「監視器開關」控制採集範圍,「快照」獲取即時畫面。本文梳理從開啟追蹤、採集快照、匯出分析到關閉追蹤的標準化流程,並補充進階參數與第三方工具選項。
db2 update monitor switches using statement on
此命令在實例層級啟用動態 SQL 陳述式文本採集。預設關閉以節省資源。
db2 get snapshot for dynamic sql on <資料庫別名> >> sql_snapshot.txt
關鍵點:
dynamic sql:僅捕捉動態 SQL(準備/執行),靜態 SQL 需用 static sql 或應用程式快照將 sql_snapshot.txt 下載至本地,建議使用文本編輯器或腳本解析關鍵欄位:
db2 update monitor switches using statement off
務必在採集完成後關閉,長期開啟會增加系統開銷(特別是高併發 OLTP)。
db2 update monitor switches using BUFFERPOOL / LOCK / SORT / STATEMENT / TABLE / TIMESTAMP / UOW on
七大開關對應採集維度:
| 開關 | 採集內容 | 典型用途 |
|---|---|---|
| BUFFERPOOL | 緩衝池讀寫、命中率、非同步 I/O | I/O 瓶頸分析 |
| LOCK | 鎖等待、鎖升級、死鎖、鎖清單 | 並發爭用診斷 |
| SORT | 排序堆積使用、溢寫、排序次數 | 排序效能調優 |
| STATEMENT | 動態/靜態 SQL 文本、執行統計 | SQL 調優核心 |
| TABLE | 表掃描、插入/更新/刪除、索引存取 | 表存取模式分析 |
| TIMESTAMP | 各階段時間戳 | 延遲分解 |
| UOW | 工作單元提交/回滾、執行時間 | 事務效能分析 |
修改下列 DBM 參數可使監視器開關預設開啟,但持續影響效能,生產環境慎用:
db2 update dbm cfg using DFT_MON_BUFPOOL ON
DFT_MON_LOCK ON
DFT_MON_SORT ON
DFT_MON_STMT ON
DFT_MON_TABLE ON
DFT_MON_UOW ON
DFT_MON_TIMESTAMP ON
修改後需 db2stop && db2start 生效。建議僅在測試/診斷環境長期開啟。
手工快照適合臨時診斷,持續監控建議使用:
db2mon.sh 採集寫入歷史表,支援趨勢分析DB2 SQL 追蹤的核心是「監視器開關控制採集、快照捕捉瞬間、離線深度分析」。掌握標準流程與進階參數,配合工具自動化,即可建立從「感知問題」到「定位 SQL」到「驗證優化」的閉環能力。