Oracle 11g收集各種統計信息(DBMS_STAT)

說明:本文爲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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章