DBA 常面臨困境:生產庫出現惡劣訪問計劃導致效能劣化,需在測試庫復現並嘗試統計信息調整、優化級別變更、註冊表參數微調等策略。但生產環境往往擁有海量數據、特殊硬體配置,測試環境難以 1:1 克隆。
db2look 實用程式正是為解決此問題而生——無需真實數據,即可在測試系統模擬生產優化器行為,支援訪問計劃問題診斷、SQL0901N 錯誤復現、實例崩潰分析等場景。
# 1. 儲存佈局:緩衝池、表空間、資料庫分區組
db2look -d <dbname> -l -o storage.out
# 2. 設定參數與註冊表變量(含 db2fopt 指令)
db2look -d <dbname> -f -fd -o config.out
# 3. 完整 DDL + 統計信息(模擬模式)
db2look -d <dbname> -e -a -m -o db2look.out
# 4. 指定表級 DDL + 統計信息
db2look -d <dbname> -e -a -m -t table1 table2 ... -o table.ddl
優化器對表空間關鍵屬性極度敏感,必須確保測試與生產一致:
PREFETCHSIZE 16
EXTENTSIZE 16
OVERHEAD 12.670000
TRANSFERRATE 0.180000
db2fopt 指令欺騙優化器(詳見 -fd 選項)輸出包含關鍵的 db2fopt 指令,例如:
!db2fopt SAMPLE update opt_buffpage 50000;
!db2fopt SAMPLE update opt_sortheap 10000;
原理:優化器實際使用 opt_buffpage、opt_sortheap 作為成本計算依據,而非真實分配的緩衝池/排序堆大小。測試機記憶體不足時,透過 db2fopt 指定生產環境數值,即可讓優化器「以為」擁有同等資源,從而生成相同計劃。
執行 db2exfmt 觀察計劃頂部 Database Context 區塊,確認下列參數與生產一致:
Parallelism: None
CPU Speed: 6.523521e-07
Buffer Pool size: 50000
Sort Heap size: 10000
Database Heap size: 5120
Lock List size: 1000
Optimization Level: 5
Blocking: Block All Cursors
Isolation Level: Cursor Stability
環境變量區同樣關鍵:
ENVVAR:
DB2_ANTIJOIN=yes
DB2_INLIST_TO_NLJN=yes
下一篇將實戰演示:從生產 SAMPLE 資料庫收集資訊,在測試庫 DUMMYDB 逐步重現相同訪問計劃,包含配置修改、統計信息導入、驗證對比全流程。