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

DB2 更新執行計劃的核心方法:RUNSTATS、REORGCHK、LOAD、DB2LOOK

     編輯:DB2 教學

優化器運作原理

DB2 採用成本基礎優化器 (CBO),依據四大因素評估存取路徑:

  1. CPU 成本
  2. I/O 成本
  3. 系統目錄統計資訊
  4. SQL 語句本身

統計資訊準確與否直接決定執行計劃優劣。

核心統計資訊來源

何時必須 RUNSTATS

  1. 建立新索引後:舊版需手動 RUNSTATS,DB2 9.7+ 可用 CREATE INDEX ... COLLECT STATISTICS 同步更新。
  2. REORG 表後:高水位等物理屬性變更,需同步統計。
  3. 資料量變動 10-20% 以上:含 INSERT/UPDATE/DELETE。
  4. DPF 環境執行 REDISTRIBUTE 後:分區分布改變。

RUNSTATS 完整語法

RUNSTATS ON TABLE schema.table
  WITH DISTRIBUTION AND DETAILED INDEXES ALL
  ALLOW WRITE ACCESS;  -- 線上收集,不封鎖

大表抽樣統計 (DB2 9.7+)

RUNSTATS ON TABLE big_table TABLESAMPLE BERNOULLI (20);  -- 僅掃描 20%

前提:資料分布均勻。

VOLATILE 表處理劇烈波動資料

ALTER TABLE volatile_table VOLATILE CARDINALITY;

優化器將傾向索引掃描而非表掃描,忽略不準確的統計基數。

REORGCHK 自動評估是否需 REORG

db2 reorgchk UPDATE STATISTICS ON TABLE SYSTEM  -- 系統表
db2 reorgchk UPDATE STATISTICS ON TABLE USER    -- 用戶表

輸出含 * 標記者建議 REORG。大資料庫建議離峰執行。

關閉自動維護 (視負載決定)

db2 UPDATE DB CFG USING AUTO_MAINT OFF AUTO_TBL_MAINT OFF AUTO_RUNSTATS OFF

LOAD 同步產生統計資訊

-- 詳細統計
LOAD FROM data.del OF DEL REPLACE INTO tab
  STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL;

-- 簡略統計
LOAD FROM data.del OF DEL REPLACE INTO tab
  STATISTICS YES AND INDEXES ALL;

-- 使用預設設定檔 (9.7+)
LOAD FROM data.del OF DEL REPLACE INTO tab
  STATISTICS USE PROFILE;

DB2LOOK 遷移統計資訊 (開發→生產環境同步計劃)

  1. 來源環境:
    RUNSTATS ON TABLE schema.tab;
    db2look -d srcdb -t tab -m -o stat.sql
  2. 產生的 stat.sql 含目錄表 UPDATE 陳述式。
  3. 目標環境:
    db2 -tvf stat.sql

如此可確保兩環境優化器擁有相同統計基數,產出一致執行計劃。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
物件關鍵統計目錄視圖
Table卡數、頁數、PCTFREE、COMPRESSSYSSTAT.TABLES / SYSCAT.TABLES
Column欄位數、長度、分布、COMPRESSSYSSTAT.COLUMNS / SYSCAT.COLUMNS
Index是否存在、葉頁/層級、離散值、叢集性SYSSTAT.INDEXES / SYSCAT.INDEXES