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

DB2 執行計劃優化全攻略:統計信息、RUNSTATS、REORGCHK 與 db2look 實戰

     編輯:DB2 教學

優化器核心機制:基於成本的 CBO 架構

DB2 採用成本優化器 (CBO),綜合評估 CPU 成本、I/O 成本、系統目錄統計信息與 SQL 語句本身四大因子,生成最優存取路徑。優化流程:語法校驗 → 依據環境信息生成計劃 → 轉譯為機器指令執行 → 返回/緩存結果。

統計信息:優化器的「眼睛」

系統目錄視圖 (SYSCAT.TABLES、SYSCAT.COLUMNS、SYSCAT.INDEXES 等) 記錄了表行數、頁數、列分布、索引聚簇度等關鍵元數據。統計信息過期或缺失會誤導優化器選錯計劃。

RUNSTATS:統計收集的瑞士軍刀

必須執行 RUNSTATS 的四大場景:

  • 創建新索引後(DB2 8.2+ 可在 CREATE INDEX 時同步更新)。
  • 執行 REORG 表重組後(高水位線等物理屬性變化)。
  • 表數據量變動超過 10%-20%(含增刪改)。大表可用採樣模式 (TABLESAMPLE SYSTEM (20))。
  • 執行 REDISTRIBUTE DATABASE PARTITION GROUP 後。

推薦命令:RUNSTATS ON TABLE schema.table WITH DISTRIBUTION AND DETAILED INDEXES ALL。生產環境建議結合 REORG → RUNSTATS → REBIND 定時作業。

VOLATILE 表:應對劇烈波動數據的利器

對於短期內數據量劇變的表(如電信月末匯總表),執行:

ALTER TABLE table_name VOLATILE CARDINALITY

優化器將傾向索引掃描而非全表掃描,無視具體統計值。

REORGCHK:自動判斷是否需重組

  • 系統表:REORGCHK UPDATE STATISTICS ON TABLE SYSTEM
  • 用戶表:REORGCHK UPDATE STATISTICS ON TABLE USER

耗時較長,安排在業務低峰期。DB2 8.2 引入自動維護 (AUTO_RUNSTATS),但建議關閉 (UPDATE DB CFG USING AUTO_MAINT OFF AUTO_TBL_MAINT OFF AUTO_RUNSTATS OFF),改為手動可控窗口執行。

LOAD 統計選項:裝載數據同步收集

利用 STATISTICS YES 參數在載入過程中直接生成統計信息,避免額外 RUNSTATS 掃描:

LOAD FROM data.del OF DEL REPLACE INTO target
  STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL

DB2 8.2+ 支持 STATISTICS USE PROFILE 復用預定義統計模板。

db2look:統計信息遷移神器

跨環境(開發→生產、生產→測試)保持執行計劃一致:

  1. 源端:RUNSTATS ON TABLE schema.table → db2look -d db -t table -m -o stat.sql 生成 UPDATE 統計視圖腳本。
  2. 目標端:db2 -tvf stat.sql 導入統計值。

實現零數據移動的計劃一致性複製。

總結

「正確、及時的統計信息是優化器生成最優計劃的基石。」建立常態化統計維護機制,配合 VOLATILE、REORGCHK、LOAD 統計、db2look 等工具組合拳,讓 DB2 執行計劃始終處於最佳狀態。

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