/*
環境: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)保存多組數據,用於反覆測試