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

使用 db2look 重建優化器存取計劃:從生產環境複製統計資訊至測試環境

     編輯:DB2 教學

核心目的

在無法直接存取生產資料的情況下,透過 db2look 擷取生產環境的資料庫物件定義、統計資訊、配置參數,套用至測試環境,使優化器產生相同的存取計劃,從而重現與調效 SQL 效能問題。

前提條件

  • 測試環境已建立相同數量的邏輯分區(Database Partition),節點群組定義一致。
  • 表空間類型(DMS/SMS)與容器配置在測試環境可用相同或等效路徑。
  • 在執行查詢的節點上收集 db2look,以確保取得正確的緩衝區池、DB CFG、DBM CFG 等節點級配置。

四步驟資訊收集流程

1. 收集儲存物件定義(表空間、緩衝區池、節點群組)

db2look -d <資料庫名> -l -o storage.out
  • -l:產生表空間、緩衝區池、節點群組、資料庫分區群組的 DDL。
  • 輸出檔需手動修改:容器路徑、容器數量可依測試環境調整,但表空間類型(DMS/SMS)必須保持一致。

2. 收集配置參數與緩衝區池詳細資訊

db2look -d <資料庫名> -f -fd -o config.out
  • -f:擷取 DB CFG 參數。
  • -fd:擷取 DBM CFG 參數與緩衝區池詳細狀態(如 NUMBLOCKPAGES、BLOCKSIZE 等)。
  • 緩衝區池設定是導致存取計劃差異的關鍵因素,務必在查詢執行節點收集。

3. 收集目標物件的 DDL 與統計資訊

db2look -d <資料庫名> -e -a -m -t TAB1 TAB2 TAB3 -o db2look.out
  • -e:產生物件 DDL(CREATE TABLE、INDEX、VIEW、MQT 等)。
  • -a:包含所有綱要物件。
  • -m:關鍵參數,輸出 UPDATE SYSSTAT... 陳述式,寫入統計資訊至系統目錄表。
  • -t:指定目標資料表(可多個,空白分隔)。

4. 在測試環境套用並驗證

  1. 依序執行 storage.out(修改後)、config.out、db2look.out。
  2. 執行 RUNSTATS 更新時間戳記(可選)。
  3. 對目標查詢執行 db2exfmt 取得存取計劃,與生產環境比對:
db2exfmt -d <資料庫名> -1 -g -o prod_plan.txt   # 生產
db2exfmt -d <資料庫名> -1 -g -o test_plan.txt   # 測試
diff prod_plan.txt test_plan.txt

經典陷阱:RUNSTATS 會覆蓋手工注入的統計資訊

若測試環境啟用 AUTO_RUNSTATS,自動收集會覆蓋 db2look -m 寫入的統計值。解決辦法:

  • 暫停自動維護視窗或關閉 AUTO_RUNSTATS。
  • 或建立統計資訊設定檔(Statistical Profile)包含所需欄位群組,讓自動收集保留這些統計值。

實戰提示

  • 若生產與測試節點數不同,需手動調整 db2nodes.cfg 節點對應關係。
  • MQT、VIEW、觸發器、檢查約束等相依物件需一併收集(-a 參數已涵蓋)。
  • 若查詢涉及動態 SQL,確保 CURRENT EXPLAIN MODE 設定一致。
  • 無法重現問題時,常因統計資訊不夠精細(如缺乏分布統計),可加上 -h 參數收集直方圖統計。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved