【12c】Oracle 統計信息蒐集工具DBMS_STATS介紹

可使用Oracle內置的程序包DBMS_STATS來查看或修改蒐集的數據庫統計信息,本篇主要介紹GATHER_TABLE_STATS過程,經過該過程,能夠蒐集表和列(或索引)的統計信息。數據庫

1 語法

dbms_stats.gather_table_stats(ownname varchar2,spa

tabname varchar2,對象

partname varchar2 default null,索引

estimate_percent number default default_estimate_percent,get

block_sample boolean default false,it

method_opt varchar2 default default_method_opt,io

degree number default default_degree_value,table

granularity varchar2 default default_granularity,效率

cascade boolean default default_cascade,date

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,

-- the context is intended for internal use only.

context dbms_stats.ccontext default null,

options varchar2 default default_options);

標紅的是比較經常使用的參數。

2 參數說明

重點介紹下面幾個參數。

2.1 method_opt

method_opt對應的值有以下二者或者二者的結合,默認值是FOR ALL COLUMNS SIZE AUTO:

  • FOR ALL [ INDEXED | HIDDEN ] COLUMNS [size_clause]
  • FOR COLUMNS [column_clause] [size_clause]

size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}

column_clause := column_name | extension name | extension

其中,

  • integer:表示直方圖桶的數目,必須在1-2048範圍內;
  • REPEAT:僅在已經具備直方圖的列上收集直方圖;
  • AUTO:Oracle根據數據分佈和列的工做負責肯定要收集直方圖的列;
  • SKEWONLY:Oracle根據列的數據分佈肯定要收集直方圖的列;
  • column_name:列名;
  • extension:能夠是列組,格式爲(column_name,column_name ....),也能夠是表達式;

2.2 degree

該參數設置並行度,默認是NULL,意味着使用建表時默認設置的並行度,經過設置並行度,能夠提升執行的效率。

2.3 granularity

該參數設置要收集的統計信息的粒度(只在分區表時使用)。值包含:

  • ALL:收集全部(子分區、分區、全局)的統計信息;
  • APPROX_GLOBAL AND PARTITION:和GLOBAL AND PARTITION類似,可是在這種狀況下,全局統計信息是從分區級統計信息聚合而來的,此選項將聚合除列的不一樣值數和索引的不一樣鍵值以外的全部統計信息;
  • AUTO:默認值,基於分區的類型決定分區的粒度;
  • DEFAULT:收集全局和分區級別的統計信息,該選項已過時;
  • GLOBAL:收集全局統計信息;
  • GLOBAL AND PARTITION:收集全局和分區級別的統計信息,不收集子分區統計信息;
  • PARTITION:收集分區級別的統計信息;
  • SUBPARTITION:收集子分區級別的統計信息。

對於分區表,建議設置該參數值爲ALL。

2.4 cascade

該參數在收集表的統計信息的同時,也會收集索引統計信息,使用此選項等效於運行GATHER_INDEX_STATS過程。

2.5 no_invalidate

該參數值若設爲TRUE,則與該表相關聯的遊標不會失效,設置爲FALSE,則會使對應的遊標當即失效,在大批量數據操做,從新收集統計信息時,建議將該參數設置爲FALSE,避免由於收集了統計信息,從而使原來的SQL選擇錯誤的執行計劃。

2.6 options

該參數值進一步說明哪些對象收集統計信息,參數值包含:

  • GATHER:在全部對象上收集統計信息;
  • GATHER AUTO:自動收集全部必要的統計信息,由Oracle隱式肯定哪些對象須要新的統計信息。
相關文章
相關標籤/搜索