說明:本文爲Oracle11g收集各種統計信息(DBMS_STAT)的簡要指導手冊
溫馨提示:如果您發現本文哪裏寫的有問題或者有更好的寫法請留言或私信我進行修改優化
● analyze始於Oracle7,但自從Oracle8.1.5引入dbms_stats包後,Oracle便推薦使用dbms_stats取代analyze
● 官網地址
https://docs.oracle.com/cd/E11882_01/server.112/e41573/stats.htm#PFGRF003
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS059
● 常用參數說明
參數名稱 說明
ownname USER_NAME
tabname TABLE_NAME
partname 分區表的某個分區名
estimate_percent 採樣百分比,有效範圍爲[0.000001,100](默認Oracle自動確定適當的樣本量以獲得良好的統計數據)
block_sample 使用隨機塊採樣代替隨機行採樣
options 分析模式
①gather:重新分析整個架構
②gather empty:只分析目前還沒有統計的表
③gather stale:只重新分析修改量超過10%的表(包括插入、更新和刪除)
④gather auto:重新分析當前沒有統計的對象,以及統計數據過期(變髒)的對象。使用gather auto類似於組合使用gather stale和gather empty
method_opt 抽樣方法
①for table:只統計表
②for all indexed columns:只統計有索引的表列
③for all indexes:只分析統計相關索引
④for all columns:分析所有的列
⑤for all hidden columns:分析所有隱藏列(函數索引等)
cascade 是否收集此表索引的統計信息
degree 並行處理的cpu數量
granularity 要收集的統計信息的粒度(僅在表已分區時才相關)
①'AUTO'-根據分區類型確定粒度。這是默認值。
②'ALL' -收集所有(子分區,分區和全局)統計信息
③'GLOBAL' -收集全球統計數據
④'GLOBAL AND PARTITION'-收集全局和分區級別的統計信息。即使它是一個複合分區對象,也不會收集任何子分區級別統計信息。
⑤'PARTITION '-收集分區級別的統計信息
⑥'SUBPARTITION' -收集子分區級別的統計信息
⑦'DEFAULT'-收集全局和分區級別的統計信息。該選項已過時,並且當前受支持,但僅出於遺留原因才包含在文檔中。您應該使用“ GLOBAL AND PARTITION”來實現此功能。請注意,默認值現在是' AUTO'。
stattab 用戶統計信息表標識符,用於描述將當前統計信息保存在何處
statown 包含的架構stattab(如果不同於ownname)
statid 標識符(可選),用於與這些統計信息關聯 stattab
no_invalidate 如果設置爲TRUE,則不使從屬遊標無效。如果設置爲FALSE,則該過程將立即使從屬遊標無效。默認Oracle自己決定何時使依賴的遊標無效。
stattype 統計信息類型。允許的唯一值是DATA。
force 收集表的統計信息(即使已鎖定)
● 收集“表/表+索引”的統計信息(支持分區表)
》》常用語句:
exec dbms_stats.gather_table_stats(ownname => 'SCOTT',tabname => 'EMP',method_opt=> 'for all columns',estimate_percent => '100',degree=>'8',granularity=>'all',cascade=>TRUE);
》》存儲過程詳情:
DBMS_STATS.GATHER_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
estimate_percent NUMBER DEFAULT to_estimate_percent_type(get_param('ESTIMATE_PERCENT')),
block_sample BOOLEAN DEFAULT FALSE,
method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'),
degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')),
granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')),
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE')),
stattype VARCHAR2 DEFAULT 'DATA',
force BOOLEAN DEFAULT FALSE);
》》官網說明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68582
● 收集“索引”的統計信息
》》常用語句:
exec dbms_stats.gather_index_stats(ownname => 'SCOTT',indname => 'PK_EMP',estimate_percent => '100',degree => '4');
》》存儲過程詳情:
DBMS_STATS.GATHER_INDEX_STATS (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
estimate_percent NUMBER DEFAULT to_estimate_percent_type (GET_PARAM('ESTIMATE_PERCENT')),
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')),
granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (GET_PARAM('NO_INVALIDATE')),
force BOOLEAN DEFAULT FALSE);
》》官網說明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68575
● 收集“用戶”的統計信息
》》常用語句:
exec dbms_stats.gather_schema_stats(ownname=>'SCOTT',degree=>8,cascade=>true,granularity=>'ALL');
》》存儲過程詳情:
DBMS_STATS.GATHER_SCHEMA_STATS (
ownname VARCHAR2,
estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')),
block_sample BOOLEAN DEFAULT FALSE,
method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'),
degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')),
granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')),
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
options VARCHAR2 DEFAULT 'GATHER',
objlist OUT ObjectTab,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE')),
force BOOLEAN DEFAULT FALSE,
obj_filter_list ObjectTab DEFAULT NULL);
》》官網說明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68577
● 收集“全庫”的統計信息(非常慢)
》》常用語句:
exec dbms_stats.gather_database_stats(degree=>4,block_sample=>true,estimate_percent =>'10',cascade=>true,granularity=>'ALL');
》》存儲過程詳情:
DBMS_STATS.GATHER_DATABASE_STATS (
estimate_percent NUMBER DEFAULT to_estimate_percent_type(get_param('ESTIMATE_PERCENT')),
block_sample BOOLEAN DEFAULT FALSE,
method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'),
degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')),
granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')),
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
options VARCHAR2 DEFAULT 'GATHER',
objlist OUT ObjectTab,
statown VARCHAR2 DEFAULT NULL,
gather_sys BOOLEAN DEFAULT TRUE,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE')),
obj_filter_list ObjectTab DEFAULT NULL);
》》官網說明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68569
● 收集“數據字典”的統計信息(速度較慢)
》》常用語句:
exec dbms_stats.gather_dictionary_stats();
》》存儲過程詳情:
DBMS_STATS.GATHER_DICTIONARY_STATS (
comp_id VARCHAR2 DEFAULT NULL,
estimate_percent NUMBER DEFAULT to_estimate_percent_type(get_param('ESTIMATE_PERCENT')),
block_sample BOOLEAN DEFAULT FALSE,
method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'),
degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')),
granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')),
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
options VARCHAR2 DEFAULT 'GATHER AUTO',
objlist OUT ObjectTab,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE')),
obj_filter_list ObjectTab DEFAULT NULL);
》》官網說明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68571
● 收集“固定對象/內部對象”的統計信息(fixed_objects是指:一些x$表及他們的index,他們只是Oracle自定義的內存結構)(速度超慢)
》》常用語句:
exec dbms_stats.gather_fixed_objects_stats();
》》存儲過程詳情:
DBMS_STATS.GATHER_FIXED_OBJECTS_STATS (
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE')));
》》官網說明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68573
● 收集“系統”的統計信息(藉助於系統統計信息,Oracle可以更清楚地知道目標數據庫服務器的實際處理能力)(較快)(Oracle強烈建議您收集系統統計信息)
》》常用語句:
exec dbms_stats.gather_system_stats();
》》存儲過程詳情:
DBMS_STATS.GATHER_SYSTEM_STATS (
gathering_mode VARCHAR2 DEFAULT 'NOWORKLOAD',
interval INTEGER DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL);
》》官網說明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68580
※ 如果您覺得文章寫的還不錯, 別忘了在文末給作者點個贊哦 ~
over