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

使用 db2look 重現優化器訪問計劃(中):核心配置參數深度解析與 db2exfmt 輸出讀懂指南

     編輯:DB2 教學

db2exfmt 輸出中的優化器決策關鍵參數

執行 db2exfmt 後,計劃頂部 Database Context 與 Package Context 區塊揭示優化器成本模型的核心輸入值,這些值多由 db2look -f -fd 捕獲(除 dbheap 外)。


Database Context:
  Parallelism: None
  CPU Speed: 6.523521e-07
  Comm Speed: 100
  Buffer Pool size: 50000
  Sort Heap size: 10000
  Database Heap size: 5120
  Lock List size: 1000
  Maximum Lock List: 10
  Average Applications: 1
  Locks Available: 7849

Package Context:
  SQL Type: Dynamic
  Optimization Level: 5
  Blocking: Block All Cursors
  Isolation Level: Cursor Stability

影響計劃的註冊表變量(db2look -f 可能遺漏)

計劃尾部 ENVVAR 區塊列出實際生效的環境變量:


ENVVAR:
DB2_ANTIJOIN=yes
DB2_INLIST_TO_NLJN=yes
STMTHEAP: 2048
⚠ 注意:db2look -f 不保證列出所有相關註冊表變量,測試環境需手動對齊生產環境完整註冊表設定(db2set -all 對比)。

DDL 與統計信息導出:-e -a -m 組合拳


db2look -d <dbname> -e -a -m -o db2look.out
  • -a:所有創建者的統計信息(忽略 -u)
  • -e:導出重建資料庫物件的 DDL 腳本
  • -m:關鍵,模擬模式導出 UPDATE 統計語句,捕獲系統表中所有統計值,這是測試環境模擬生產優化器行為的核心

指定表子集導出


db2look -d <dbname> -e -a -m -t <table1> <table2> ... -o table.ddl
  • -t:指定表(最多 30 張),配合 -a 使用
  • -z:指定模式名(與 -a 互斥)

db2exfmt 關鍵配置參數詳細解讀

資料庫管理器級(dbm cfg)

參數優化器影響
Parallelism分區間/分區內並行度,影響成本評估
CPU Speed (cpuspeed)每指令微秒數,評估運算成本
Comm Bandwidth (comm_bandwidth)分區間通訊成本評估(MB/s)

資料庫級(db cfg)

參數說明測試環境對齊策略
Buffer Pool Size所有緩衝池頁面總數(無關頁大小)記憶體不足時用 db2fopt opt_buffpage 虛擬化
Sort Heap (sortheap)私有/共享排序最大頁數同理用 db2fopt opt_sortheap 虛擬化
Database Heap (dbheap)控制塊記憶體(4KB 頁)直接 update db cfg 對齊
Lock List (locklist)鎖列表存儲大小影響掃描鎖模式選擇
Max Locks (maxlocks)單應用佔用鎖列表百分比閾值影響鎖升級時機
Avg Applications (avg_appls)並發應用估算,影響緩衝池可用頁評估對齊生產值
Optimization Level (dft_queryopt)查詢優化等級 0-9必須一致,否則計劃必異
Query Degree (dft_degree)分區內並行度,ANY 時敏感於 CPU 數若用 ANY 需對齊 CPU 核心數
Num Freqvalues (num_freqvalues)WITH DISTRIBUTION 時收集的高頻值數統計信息一致性關鍵,必須對齊
Num Quantiles (num_quantiles)分位數統計收集數量同上,必須對齊
Statement Heap (stmtheap)SQL 編譯工作空間(4KB 頁)過小導致 SQL0101N 或 SQL0437W 降級

緩衝池大小計算邏輯與 db2fopt 機制

db2exfmt 顯示的 Buffer Pool size = 所有緩衝池頁面數總和。例如:


IBMDEFAULTBP  1000
BP1           1000
BP2           4000
BPIND1        1000
BPIND2        1000
BPLONG        1000
BPTEMP        1000
總計:10,000 頁

MPP 環境下 opt_buffpage 按節點計算,db2fopt 修改僅影響執行節點。

排序堆同理:opt_sortheap 虛擬化


!db2fopt SAMPLE update opt_sortheap 256;

運行時真實 sortheap 仍由 db cfg 決定,優化器成本計算使用 opt_sortheap。

實戰檢查清單

  1. db2look -l 導出 storage.out → 確認表空間屬性、分區組
  2. db2look -f -fd 導出 config.out → 執行含 db2fopt 指令
  3. db2look -e -a -m 導出 DDL + 統計 UPDATE 腳本 → 執行
  4. 對齊 dbheap, stmtheap, num_freqvalues, num_quantiles
  5. 對齊註冊表變量(db2set -all 全量對比)
  6. 重啟實例 → 重建 EXPLAIN 表 → 驗證計劃

掌握這些參數的「優化器語義」,才能真正實現跨環境計劃的精準復現與性能問題的高效診斷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved