接續上篇,本文深入探討通過 REORGCHK、LOAD 統計選項及 db2look 工具來精準控制統計信息,從而穩定並優化 SQL 執行計劃。
REORGCHK 不僅能檢查表是否需要重組,配合 UPDATE STATISTICS 選項還可同步更新統計信息。建議分別針對系統表與用戶表執行,以減少鎖衝突與耗時。
db2 reorgchk update statistics on table system
db2 reorgchk update statistics on table user
運維建議: 大數據量環境下耗時較長,請安排在業務低峰期執行。
DB2 8.2 引入自動維護功能(AUTO_MAINT, AUTO_TBL_MAINT, AUTO_RUNSTATS),雖方便但會帶來額外負載。生產環境建議關閉,改為手動排程控制:
db2 update db cfg using AUTO_MAINT off AUTO_TBL_MAINT off AUTO_RUNSTATS off
LOAD 是高性能批量數據加載工具(不記日誌,速度極快)。在加載數據時指定 STATISTICS 選項,可讓優化器即刻獲得最新統計信息,無需事後再跑 RUNSTATS。
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
預先定義統計收集配置文件,加載時直接引用:
LOAD FROM mobile_number.del OF DEL REPLACE INTO mobile
STATISTICS USE PROFILE
db2look 可提取數據庫對象的 DDL 及統計信息,是跨環境(如開發庫→生產庫)保持執行計劃一致的關鍵工具。
db2 runstats on table <Schema>.<表名>
db2look -d <數據庫> -t <表名> -m -o statis.sql
輸出文件 statis.sql 包含更新系統編目表統計字段的 UPDATE 語句。
db2 -svtf statis.sql
此法能確保不同環境下優化器看到相同的數據分佈特徵,從而生成一致的訪問路徑。