生產環境出現效能問題(惡劣存取路徑、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. 僅擷取特定資料表
db2look -d <dbname> -e -a -m -t table1 table2 ... -o table.ddl
| 參數 | 用途 |
|---|---|
| -d | 指定資料庫名稱(必填) |
| -l | 產生資料庫佈局:分區群、緩衝池、表空間定義 |
| -f | 擷取 DBM/DB CFG 參數與註冊表變數 |
| -fd | 產生 db2fopt 指令,模擬緩衝池/排序堆大小 |
| -e | 產生 DDL(含統計資料更新指令) |
| -a | 所有結構描述 |
| -m | 包含 RUNSTATS 統計資料更新指令(關鍵) |
| -t | 指定資料表清單 |
| -o | 輸出導向檔案 |
PREFETCHSIZE 16
EXTENTSIZE 16
OVERHEAD 12.670000
TRANSFERRATE 0.180000
db2fopt 告知優化器「假想」緩衝池大小。UPDATE DBM CFG USING cpuspeed 6.523521e-07;
UPDATE DBM CFG USING intra_parallel NO;
!db2fopt SAMPLE update opt_buffpage 50000;
!db2fopt SAMPLE update opt_sortheap 10000;
UPDATE DB CFG FOR SAMPLE USING locklist 1000;
UPDATE DB CFG FOR SAMPLE USING dft_queryopt 5;
!db2set DB2_ANTIJOIN=yes;
!db2set DB2_INLIST_TO_NLJN=yes;
db2fopt 指令讓優化器使用指定緩衝池/排序堆大小,而非實際計算值,解決測試機資源不足問題。