掌握動態 SQL 執行情況是效能調校的基礎。DB2 提供兩種主要監控機制:Snapshot Monitor(快照監控)與Event Monitor(事件監控),兩者適用場景與效能影響截然不同。
| 特性 | Snapshot Monitor | Event Monitor |
|---|---|---|
| 效能影響 | 極低,適合生產環境常態監控 | 極大,每條 SQL 皆記錄完整特徵與執行資訊 |
| 資料粒度 | 彙總統計(執行次數、平均耗時等) | 逐條 SQL 完整文本、存取計畫、執行上下文 |
| 適用場景 | 日常健康檢查、趨勢分析 | 問題 SQL 深度診斷、開發測試階段 |
| 儲存方式 | 記憶體中即時統計 | 寫入檔案系統(.evt 檔案) |
⚠️ 警告:事件監控器會顯著影響資料庫效能,嚴禁在高負載生產環境長期啟用。
db2 connect to <資料庫名稱>
db2 "update monitor switches using statement on"
db2 "create event monitor sqlmon for statements write to file '/db2/monitor'"
db2 "set event monitor sqlmon state 1"
確保 /db2/monitor 目錄存在且有足夠空間(建議預留 500MB 以上),DB2 實例擁有者需具備寫入權限。
保持監控會話開啟,執行正常業務操作或重現問題場景。/db2/monitor 目錄下會產生 *.evt 二進位追蹤檔。
db2 "set event monitor sqlmon state 0"
db2 terminate
在一般命令提示字元(非 db2 互動模式)執行:
db2evmon -path /db2/monitor > sqltrace.txt
產生的 sqltrace.txt 為可讀文本報表,包含每條 SQL 的完整文本、執行時間、存取計畫、資源消耗等詳細資訊。
db2 connect to <資料庫名稱>
db2 "drop event monitor sqlmon"
日常監控建議使用快照功能,無需建立物件,效能影響可忽略:
-- 捕捉動態 SQL 快照
db2 "get snapshot for dynamic sql on <資料庫名稱>"
-- 重置計數器(基準線比較用)
db2 "reset monitor for database <資料庫名稱>"
配合 db2pd -d 可獲取更詳細的記憶體中動態 SQL 快取資訊。
儲存程序內部 SQL 需使用 Statement Event Monitor 捕捉。建立方式類似,但指定 for statements 而非 for transactions。同樣需謹慎評估效能影響。