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

DB2 執行計劃優化全攻略:RUNSTATS、REORGCHK 與統計資訊維護

     編輯:DB2 教學

優化器核心機制

DB2 採用成本基礎優化器(CBO),根據 CPU 成本、I/O 成本、系統目錄統計資訊及 SQL 語句本身四大因子,評估所有可能存取路徑並選擇成本最低者。優化流程包含:語法檢查 → 依環境資訊生成最佳計劃 → 轉換為機器指令執行 → 回傳或快取結果。

統計資訊:優化器的「眼睛」

系統目錄統計資訊直接決定優化器判斷準確度,主要包含:

  • 表級:筆數、頁數、PCTFREE、壓縮狀態(SYSCAT.TABLES/SYSSTAT.TABLES)
  • 欄位級:長度、分布特徵、壓縮(SYSCAT.COLUMNS/SYSSTAT.COLUMNS)
  • 索引級:存在性、葉頁/層級數、鍵值基數、叢集性(SYSCAT.INDEXES/SYSSTAT.INDEXES)
  • 分區/節點群、表空間資訊

何時必須執行 RUNSTATS?

  1. 建立新索引後(8.2 版起可於 CREATE INDEX 時同步更新)
  2. REORG 表之後(高水位等物理屬性已變)
  3. 資料量變動達 10%~20%(含大量 INSERT/UPDATE/DELETE);超大表可用抽樣模式(如 TABLESAMPLE SYSTEM (20))
  4. 執行 REDISTRIBUTE DATABASE PARTITION GROUP 後

標準 RUNSTATS 指令範例

db2 runstats on table db2inst1.staff with distribution and detailed indexes all

生產環境最佳實踐

  • 排程 REORG → RUNSTATS → REBIND 一體化作業,於離峰時段執行。
  • 對極度波動的表(如電信月結彙總表)可設 ALTER TABLE ... VOLATILE CARDINALITY,強制優化器偏好索引掃描。
  • 利用 REORGCHK UPDATE STATISTICS ON TABLE SYSTEM/USER 自動判斷是否需 REORG。

自動維護開關

db2 update db cfg using AUTO_MAINT off AUTO_TBL_MAINT off AUTO_RUNSTATS off

8.2 版引入自動統計收集,但會帶來額外負載;建議關閉,改由排程手動控制。

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