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

Oracle 統計資訊管理全攻略:CBO 效能基石、ANALYZE 與 DBMS_STATS 實戰

     編輯:Oracle 資料庫基礎

優化器演進:RBO → CBO

  • RBO (Rule-Based):固定規則,不看資料分布,Oracle 7 前主流。
  • CBO (Cost-Based):Oracle 7 引入,計算各執行計畫 Cost,選最低。依賴統計資訊(資料分布、直方圖、索引選擇性)。

CBO 支援星型連結、Hash Join、分區表、平行查詢等現代特性,**Oracle 10g+ 預設僅支援 CBO**,RBO 已棄用。

統計資訊收集兩大法

方法指令範例特點適用場景
完全計算ANALYZE TABLE abc COMPUTE STATISTICS;全表掃描,精準但耗時、鎖表久小表、需精確統計、維護窗口充足
抽樣估算ANALYZE TABLE abc ESTIMATE STATISTICS SAMPLE 20 PERCENT;快、低影響,精度足夠大表、生產環境常態維護

建議:表用抽樣(20%~30%),索引可完全計算(索引較小)。

方案一:排程 Script + Crontab(傳統)

# analyze.sh
sqlplus scott/tiger <

crontab -e 加入 0 2 1 * * /home/oracle/analyze.sh(每月 1 號凌晨 2 點)。

方案二:內建 PL/SQL 套件(推薦)

1. DBMS_DDL.ANALYZE_OBJECT

DBMS_DDL.ANALYZE_OBJECT(
  type => 'TABLE', schema => 'SCOTT', name => 'EMP',
  method => 'ESTIMATE', estimate_percent => 50
);

針對單一物件(TABLE/INDEX/CLUSTER)。

2. DBMS_UTILITY.ANALYZE_SCHEMA / DATABASE

DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT', 'ESTIMATE', NULL, 20);
DBMS_UTILITY.ANALYZE_DATABASE('ESTIMATE', NULL, 20);

分別處理單一 Schema 或整庫所有物件。

3. DBMS_STATS(8i+ 核心,功能最強)

  • GATHER_TABLE_STATS、GATHER_INDEX_STATS、GATHER_SCHEMA_STATS、GATHER_DATABASE_STATS
  • 支援平行收集、增量統計(分區表)、直方圖自動判斷、統計資訊鎖定/匯出/匯入。
-- 排程 Job 範例:每月對 SCOTT Schema 抽樣 20%
VARIABLE jobno NUMBER;
BEGIN
  DBMS_JOB.SUBMIT(:jobno,
    'DBMS_UTILITY.ANALYZE_SCHEMA(''SCOTT'',''ESTIMATE'',NULL,20);',
    SYSDATE, 'SYSDATE+30');
  COMMIT;
END;
/

進階:統計資訊最佳實踐(10g+)

  1. 自動統計收集:AUTO_TASKS 內建 GATHER_STATS_JOB,每晚維護窗口自動執行,**保持啟用**。
  2. 增量統計:分區表啟用 INCREMENTAL => TRUE,僅掃描變更分區,合併全域統計。
  3. 直方圖策略:METHOD_OPT => 'FOR ALL COLUMNS SIZE AUTO',讓 Oracle 依欄位偏態自動建立。
  4. 統計資訊鎖定:核心穩定 SQL 的表鎖定統計(LOCK_TABLE_STATS),防止計畫突變。
  5. 匯出/匯入:EXPORT_TABLE_STATS/IMPORT_TABLE_STATS 複製統計至測試環境,重現計畫。

驗證統計鮮度

SELECT table_name, last_analyzed, num_rows, blocks
FROM user_tables
WHERE stale_stats = 'YES';  -- 10g+ 顯示是否過期

結語

統計資訊是 CBO 的「眼睛」。從手工 ANALYZE 到 DBMS_STATS 再到自動化任務,核心目標一致:**及時、精準、低衝擊**。建立「自動為主、手工補充、鎖定關鍵、定期稽核」的統計治理體系,是穩定 SQL 效能的長效機制。

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