首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 解釋工具完整指南:收集、分析與視覺化 SQL 存取計劃

     編輯:DB2 教學

什麼是解釋工具?

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算子特有屬性

兩類解釋數據

  • 完整解釋數據:跨多表詳細記錄計劃細節。
  • 解釋快照:SQL 內部表示單一快照,存於 EXPLAIN_STATEMENT.SNAPSHOT。

五種收集方式

  1. EXPLAIN SQL 陳述式:
    EXPLAIN ALL WITH SNAPSHOT FOR SELECT * FROM DEPARTMENT
  2. 特殊暫存器 CURRENT EXPLAIN MODE:
    SET CURRENT EXPLAIN MODE = YES;  -- 收集完整並執行
    SET CURRENT EXPLAIN MODE = EXPLAIN; -- 僅收集不執行
  3. 特殊暫存器 CURRENT EXPLAIN SNAPSHOT:
    SET CURRENT EXPLAIN SNAPSHOT = YES;
  4. PRECOMPILE/BIND 選項 EXPLAIN:靜態 SQL 收集完整解釋。
  5. PRECOMPILE/BIND 選項 EXPLSNAP:靜態 SQL 收集快照。

REOPT 值可捕獲重優化時的計劃 (參數標記實際值已知時)。

三大分析工具對比

特性Visual Explain (GUI)db2exfmt (文字報表)db2expln (封包解析)
介面圖形化文字文字
靜態 SQL✅✅✅
動態 SQL✅✅✅ (無參數標記)
CLI 應用✅✅❌
優化器內部細節✅✅❌ (僅最終計劃)
適合批量分析❌✅✅

工具使用範例

db2exfmt (最常用)

# 收集完整解釋
db2 "EXPLAIN ALL FOR SELECT * FROM SALES"
# 格式化輸出
db2exfmt -d <db> -1 -o plan.txt -g TIC

輸出含:計劃圖 (ASCII)、成本、統計資訊、謂詞、算子細節。

Visual Explain

  • Data Studio / IBM Data Management Console 內建。
  • 拖曳 SQL 即可生成圖形計劃,支援「調優前/後」對比。
  • 可直接查看統計資訊、索引建議、算子成本明細。

db2expln (針對已綁定封包)

db2expln -d <db> -p <pkg> -c <creator> -s <section> -g -o plan.txt

適用於無解釋數據的既有應用封包快速檢視。

最佳實踐流程

  1. 建立解釋表 (一次)。
  2. 開發/測試環境:SET CURRENT EXPLAIN MODE = YES 收集完整解釋。
  3. 使用 db2exfmt 產出報表,或 Visual Explain 圖形化分析。
  4. 針對高成本算子:檢查統計資訊新舊、索引缺失、謂詞下推、連接順序。
  5. 調優後 (建索引/更新統計/重寫 SQL) **再次收集** 對比驗證。
  6. 生產環境謹慎開啟,建議用 EXPLAIN SNAPSHOT 低開銷採樣。

常見陷阱

  • 未建立解釋表 → 收集失敗靜默無聲。
  • 只看 EXPLAIN 不看統計資訊新舊 → 誤判計劃好壞。
  • 動態 SQL 用 db2expln 無法分析參數標記語句。
  • 視覺化工具無法顯示完整解釋數據,需搭配 db2exfmt。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved