DB2 採用基於成本的優化器(CBO),其生成的存取計畫品質高度依賴系統目錄中的統計信息。本文系統闡述統計信息類型、收集時機、核心工具(RUNSTATS/REORGCHK/LOAD STATISTICS/db2look)用法與自動化策略,確保優化器始終擁有最新、精確的數據畫像。
| 維度 | 關鍵指標 | 系統視圖 | 影響決策 |
|---|---|---|---|
| 表 | 行數 (CARD)、頁數 (NPAGES)、PCTFREE、COMPRESS | SYSCAT.TABLES / SYSSTAT.TABLES | 全表掃描 vs 索引掃描、連接順序、排序成本 |
| 欄位 | 欄位數、長度、分布頻率 (COLCARD)、壓縮 | SYSCAT.COLUMNS / SYSSTAT.COLUMNS | 謂詞選擇率、連接選擇率、GROUP BY 基數估算 |
| 索引 | 是否存在、葉頁數、層級、鍵基數 (FIRSTKEYCARD/FULLKEYCARD)、是否聚簇 | SYSCAT.INDEXES / SYSSTAT.INDEXES | 索引掃描成本、INDEX ONLY 掃描、連接方法選擇 |
| 其他 | 分區/節點組、表空間容器、緩衝池配置 | SYSCAT.DBPARTITIONGROUPS, TBSPACES | 並行度、I/O 平行、預取策略 |
CREATE INDEX ... COLLECT STATISTICS 同步更新;舊版必須手動 RUNSTATS。TABLESAMPLE BERNOULLI (20) 或 RUNSTATS ... TABLESAMPLE SYSTEM (20)(需數據分布均勻)。-- 完整統計:表 + 分布 + 所有索引詳細
RUNSTATS ON TABLE db2inst1.staff
WITH DISTRIBUTION AND DETAILED INDEXES ALL
ALLOW WRITE ACCESS;
-- 採樣統計(大表)
RUNSTATS ON TABLE big_fact_table
WITH DISTRIBUTION AND SAMPLED DETAILED INDEXES ALL
TABLESAMPLE SYSTEM (20);
-- 檢查用戶表
REORGCHK UPDATE STATISTICS ON TABLE USER
-- 檢查系統表
REORGCHK UPDATE STATISTICS ON TABLE SYSTEM
-- 僅生成報告不更新統計
REORGCHK CURRENT STATISTICS ON TABLE USER
輸出報告中 F1-F8 公式值超標(通常 > 100 或 < 0)建議 REORG。
對於短時間內數據量劇烈波動的表(如電信月末匯總表),統計信息失真。標記為易變表:
ALTER TABLE volatile_table VOLATILE CARDINALITY;
效果:優化器傾向選擇索引掃描而非全表掃描,無視統計信息中的基數估算。
-- 完整統計
LOAD FROM mobile_number.del OF DEL REPLACE INTO mobile
STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL;
-- 簡略統計
LOAD FROM mobile_number.del OF DEL REPLACE INTO mobile
STATISTICS YES AND INDEXES ALL;
-- 使用預設統計配置檔(DB2 9.7+)
LOAD FROM mobile_number.del OF DEL REPLACE INTO mobile
STATISTICS USE PROFILE;
場景:開發/測試環境需複製生產環境統計信息,確保存取計畫一致。
db2 RUNSTATS ON TABLE prod_schema.target_table
db2look -d PROD_DB -t TARGET_TABLE -m -o stats.sql
# stats.sql 含 UPDATE SYSSTAT.TABLES/COLUMNS/INDEXES ... 語句
db2 -tvf stats.sql
-- 關閉自動統計收集(生產環境建議手動控制)
UPDATE DB CFG USING AUTO_MAINT OFF AUTO_TBL_MAINT OFF AUTO_RUNSTATS OFF;
理由:自動收集雖方便,但執行時機不可控,可能衝擊高峰期效能。建議納入定時排程作業(如每日凌晨低峰),結合 REORG → RUNSTATS → REBIND 全鏈路自動化。
[數據變更/結構變更]
↓
[REORG 表/索引] → [RUNSTATS 完整/採樣] → [REBIND 套件]
↓ ↓
[VOLATILE 標記] [db2look 遷移統計] (跨環境)
↓
[驗證 EXPLAIN 計畫] → [效能基線對比] → [釋放上線]
統計信息是優化器的「眼睛」。建立定時、分級、自動化的統計收集體系,配合 REORGCHK 判斷重組、VOLATILE 處理易變表、db2look 跨環境同步統計,能讓 DB2 優化器始終基於真實數據畫像做決策,消除計畫退化帶來的效能驚喜。