執行 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
計劃尾部 ENVVAR 區塊列出實際生效的環境變量:
ENVVAR:
DB2_ANTIJOIN=yes
DB2_INLIST_TO_NLJN=yes
STMTHEAP: 2048
db2look -f 不保證列出所有相關註冊表變量,測試環境需手動對齊生產環境完整註冊表設定(db2set -all 對比)。
db2look -d <dbname> -e -a -m -o db2look.out
UPDATE 統計語句,捕獲系統表中所有統計值,這是測試環境模擬生產優化器行為的核心
db2look -d <dbname> -e -a -m -t <table1> <table2> ... -o table.ddl
| 參數 | 優化器影響 |
|---|---|
| Parallelism | 分區間/分區內並行度,影響成本評估 |
| CPU Speed (cpuspeed) | 每指令微秒數,評估運算成本 |
| Comm Bandwidth (comm_bandwidth) | 分區間通訊成本評估(MB/s) |
| 參數 | 說明 | 測試環境對齊策略 |
|---|---|---|
| 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 降級 |
db2exfmt 顯示的 Buffer Pool size = 所有緩衝池頁面數總和。例如:
IBMDEFAULTBP 1000
BP1 1000
BP2 4000
BPIND1 1000
BPIND2 1000
BPLONG 1000
BPTEMP 1000
總計:10,000 頁
MPP 環境下 opt_buffpage 按節點計算,db2fopt 修改僅影響執行節點。
!db2fopt SAMPLE update opt_sortheap 256;
運行時真實 sortheap 仍由 db cfg 決定,優化器成本計算使用 opt_sortheap。
db2look -l 導出 storage.out → 確認表空間屬性、分區組db2look -f -fd 導出 config.out → 執行含 db2fopt 指令db2look -e -a -m 導出 DDL + 統計 UPDATE 腳本 → 執行dbheap, stmtheap, num_freqvalues, num_quantilesdb2set -all 全量對比)掌握這些參數的「優化器語義」,才能真正實現跨環境計劃的精準復現與性能問題的高效診斷。