DB2 優化器分析 SQL 產生存取計劃 (Access Plan),包含索引使用、排序方法、連接順序等策略。解釋工具用於**捕獲並視覺化**這些計劃,協助調優。
執行 db2 -tvf EXPLAIN.DDL (位於 sqllib/misc/) 建立下列表:
| 表名 | 用途 |
|---|---|
| EXPLAIN_INSTANCE | 主控制表,記錄 SQL 來源、環境 |
| EXPLAIN_STATEMENT | 原始 SQL 與優化器重寫版本 |
| EXPLAIN_OPERATOR | 計劃中各算子 (掃描、連接、排序...) |
| EXPLAIN_OBJECT | 涉及的資料物件 (表、索引...) |
| EXPLAIN_STREAM | 算子間資料流 |
| EXPLAIN_PREDICATE | 各算子套用的謂詞 |
| EXPLAIN_ARGUMENT | 算子特有屬性 |
EXPLAIN_STATEMENT.SNAPSHOT。EXPLAIN ALL WITH SNAPSHOT FOR SELECT * FROM DEPARTMENTSET CURRENT EXPLAIN MODE = YES; -- 收集完整並執行
SET CURRENT EXPLAIN MODE = EXPLAIN; -- 僅收集不執行SET CURRENT EXPLAIN SNAPSHOT = YES;REOPT 值可捕獲重優化時的計劃 (參數標記實際值已知時)。
| 特性 | Visual Explain (GUI) | db2exfmt (文字報表) | db2expln (封包解析) |
|---|---|---|---|
| 介面 | 圖形化 | 文字 | 文字 |
| 靜態 SQL | ✅ | ✅ | ✅ |
| 動態 SQL | ✅ | ✅ | ✅ (無參數標記) |
| CLI 應用 | ✅ | ✅ | ❌ |
| 優化器內部細節 | ✅ | ✅ | ❌ (僅最終計劃) |
| 適合批量分析 | ❌ | ✅ | ✅ |
# 收集完整解釋
db2 "EXPLAIN ALL FOR SELECT * FROM SALES"
# 格式化輸出
db2exfmt -d <db> -1 -o plan.txt -g TIC
輸出含:計劃圖 (ASCII)、成本、統計資訊、謂詞、算子細節。
db2expln -d <db> -p <pkg> -c <creator> -s <section> -g -o plan.txt
適用於無解釋數據的既有應用封包快速檢視。
SET CURRENT EXPLAIN MODE = YES 收集完整解釋。db2exfmt 產出報表,或 Visual Explain 圖形化分析。EXPLAIN SNAPSHOT 低開銷採樣。db2expln 無法分析參數標記語句。db2exfmt。