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

使用 db2look 重現優化器訪問計劃(上):無需實時數據的測試環境構建指南

     編輯:DB2 教學

痛點:生產環境的查詢計劃為何難以在測試環境復現?

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

關鍵選項深度解析

-l:生成資料庫佈局(storage.out)

優化器對表空間關鍵屬性極度敏感,必須確保測試與生產一致:

PREFETCHSIZE 16
EXTENTSIZE 16
OVERHEAD 12.670000
TRANSFERRATE 0.180000
  • 表空間類型(DMS/SMS)必須一致
  • 多重分區環境:邏輯分區數需相同,物理機器數可不同
  • 受限於測試機記憶體無法分配同等大小緩衝池時,改用 db2fopt 指令欺騙優化器(詳見 -fd 選項)

-f -fd:提取配置與註冊表(config.out)

輸出包含關鍵的 db2fopt 指令,例如:

!db2fopt SAMPLE update opt_buffpage 50000;
!db2fopt SAMPLE update opt_sortheap 10000;

原理:優化器實際使用 opt_buffpage、opt_sortheap 作為成本計算依據,而非真實分配的緩衝池/排序堆大小。測試機記憶體不足時,透過 db2fopt 指定生產環境數值,即可讓優化器「以為」擁有同等資源,從而生成相同計劃。

db2exfmt 輸出中的關鍵優化器上下文

執行 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 逐步重現相同訪問計劃,包含配置修改、統計信息導入、驗證對比全流程。

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