| 物件 | 關鍵統計 | 目錄視圖 |
| Table | 卡數、頁數、PCTFREE、COMPRESS | SYSSTAT.TABLES / SYSCAT.TABLES |
| Column | 欄位數、長度、分布、COMPRESS | SYSSTAT.COLUMNS / SYSCAT.COLUMNS |
| Index | 是否存在、葉頁/層級、離散值、叢集性 | SYSSTAT.INDEXES / SYSCAT.INDEXES |
何時必須 RUNSTATS
- 建立新索引後:舊版需手動 RUNSTATS,DB2 9.7+ 可用
CREATE INDEX ... COLLECT STATISTICS 同步更新。
- REORG 表後:高水位等物理屬性變更,需同步統計。
- 資料量變動 10-20% 以上:含 INSERT/UPDATE/DELETE。
- 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 遷移統計資訊 (開發→生產環境同步計劃)
- 來源環境:
RUNSTATS ON TABLE schema.tab;
db2look -d srcdb -t tab -m -o stat.sql
- 產生的
stat.sql 含目錄表 UPDATE 陳述式。
- 目標環境:
db2 -tvf stat.sql
如此可確保兩環境優化器擁有相同統計基數,產出一致執行計劃。
- 上一篇文章: JDBC 連線 DB2、Oracle、MySQL、PostgreSQL 通用範本
- 下一篇文章: 建立空的 IBM DB2 ECO 資料庫步驟指南
Copyright ©
程式碼之家 All Rights Reserved