oracle 統計信息

/*
環境:oracle 11.2 for windows
*/

統計信息描述了數據庫及其對象的具體信息,查詢優化器根據這些信息爲sql語句選擇最佳的執行計劃,若統計信息不準確,可能導致錯誤的執行計劃,此適用於cbo優化器,rbo不使用統計信息。

統計信息包括以下內容

 

表信息
Number of rows  --行數
Number of blocks  --塊數
Average row length --行平均長度
字段信息
Number of distinct values (NDV) in column --列中唯一值數量
Number of nulls in column  --NULL值的數量
Data distribution (histogram)  --數據分佈
Extended statistics
索引信息
Number of leaf blocks --葉塊數量
Levels --等級
Clustering factor --聚簇因子
系統信息
I/O performance and utilization --I/O性能與使用率
CPU performance and utilization --CPU性能與使用率

統計信息存儲在數據字典中,oracle 10g會自動收集統計信息,也可以通過anlanze 和 dbms_stats 包手動收集統計信息,同時也可以導出或鎖定統計信息。

1.管理統計信息的自動收集
GATHER_STATS_JOB
GATHER_STATS_PROG

SELECT owner,job_name,state,last_start_date,last_run_duration,failure_count FROM dba_scheduler_jobs WHERE job_name = 'GATHER_STATS_JOB';
select PROGRAM_NAME,PROGRAM_ACTION,ENABLED from dba_scheduler_programs where PROGRAM_NAME = 'GATHER_STATS_PROG' ;

SELECT log_id, job_name, status,
          TO_CHAR (log_date, 'YYYY-MM-DD HH24:MI') log_date
     FROM dba_scheduler_job_run_details
    WHERE job_name = 'GATHER_STATS_JOB' ORDER BY log_date;

oracle收集那些表的統計信息
1.沒有統計信息的表
2.更新超過10%的表
oracle 收集腐舊統計信息時需要用到一個modification monitoring的特性,當此特性disable時,不能收集腐舊的統計信息,STATISTICS_LEVEL爲typical或all時此特性生效,默認爲typical

2.手動管理統計信息
收集統計信息可以用dbms_stats 包,這個包也用於修改、查看、導入導出和刪除統計信息。新收集的統計將替換舊的統計信息,舊的統計信息將被保存,以便用於恢復

 

    Procedure
Collects
GATHER_INDEX_STATS
Index statistics
GATHER_TABLE_STATS
Table, column, and index statistics
GATHER_SCHEMA_STATS
Statistics for all objects in a schema
GATHER_DICTIONARY_STATS
Statistics for all dictionary objects
GATHER_DATABASE_STATS
Statistics for all objects in a database
GATHER_DICTIONARY_STATES
Statistics for all system schema
3.鎖定統計信息
統計信息被鎖定後不可修改,用於保證統計信息的不可變,使執行計劃固定
加鎖:LOCK_SCHEMA_STATS and LOCK_TABLE_STATS
解鎖:UNLOCK_SCHEMA_STATS and UNLOCK_TABLE_STATS
4.統計信息的刪除
DBMS_STATS.DELETE_TABLE_STATS
5.統計信息的導入導出
新建一個表用於導出
DBMS_STATS.CREATE_STAT_TABLE
導出
DBMS_STATS.EXPORT_*_STATS
導入
DBMS_STATS.IMPORT_*_STATS

6.統計信息的恢復
統計信息會自動保存,用於恢復之前版本
視圖DBA_OPTSTAT_OPERATIONS 儲存了schema 和 database 級的DBMS_STATS 操作
視圖*_TAB_STATS_HISTORY(all,dba,user)存儲對錶的修改歷史
PURGE_STATS:手動清除超過時間戳的舊版本。
GET_STATS_HISTORY_RETENTION:獲取當前的統計歷史保留價值。
GET_STATS_HISTORY_AVAILABILITY:獲得最早可用統計版本的時間
ANALYZE命令不能存儲舊的統計信息
RESTORE 利用時間戳恢復到時間戳時的統計信息

7.統計的恢復與導入導出的對比
恢復使用的場景:
(1)想要回退到之前的執行計劃
(2)刪除舊的統計信息
導入導出使用場景
(1)想保留比自動保存更久的統計信息
(2)數據庫遷移
(3)保存多組數據,用於反覆測試

 

發佈了26 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章