天天看點

DBMS_STATS包-收集統計資訊!

1、gather_table_stats 存儲過程用來收集表上的相關資訊。

procedure gather_table_stats(ownname          varchar2,                                                             --所有者名字
                             tabname          varchar2,                                                             --要分析的表名
                             partname         varchar2 default null,                                                --要分析的分區名
                             estimate_percent number default DEFAULT_ESTIMATE_PERCENT,                              --采樣的比例
                             block_sample     boolean default FALSE,                                                --是否塊分析
                             method_opt       varchar2 default DEFAULT_METHOD_OPT,                                  --分析的方式
                             degree           number default to_degree_type(get_param('DEGREE')),                   --分析的并行度
                             granularity      varchar2 default DEFAULT_GRANULARITY,                                 --分析的粒度
                             cascade          boolean default DEFAULT_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',                                              --統計資料的類型。允許的唯一值是DATA
                             force            boolean default FALSE);                                               --強制分析,即時表被鎖定
           

參數說明:

(1)estimate_percent 這是一個百分比值,它告訴分析包需要使用表中資料的多大比例來做分析。

(2)method_opt 這個參數用來定義直方圖的分析值。接受下列選項:

FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]
FOR COLUMNS [size clause] column [size_clause] [,column [size_clause]...]
size_clause is defined as size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}
column is defined as column := column_name | extension name | extension
- integer : Number of histogram buckets. Must be in the range [1,254].
- REPEAT : Collects histograms only on the columns that already have histograms
- AUTO : Oracle determines the columns to collect histograms based on data distribution and the workload of the columns.
- SKEWONLY : Oracle determines the columns to collect histograms based on the data distribution of the columns.
- column_name : Name of a column
- extension : can be either a column group in the format of (column_name, Colume_name [, ...]) or an expression 
           

預設值為:

SQL> select dbms_stats.get_param('method_opt') from dual;
DBMS_STATS.GET_PARAM('METHOD_OPT')
--------------------------------------------------------------------------------
FOR ALL COLUMNS SIZE AUTO
           

(3)degree 用來指定分析時使用的并行度,有以下設定:

 null 如果設定為null,oracle将使用被分析表屬性的并行度。

 一個數值 可以顯示的指定分析時使用的并行度。

 DEFAULT_DEGREE 如果設定為還這個值,oracle将根據初始化參數中相關參數的設定來決定使用的并行度。

(4)granularity 分析的粒度,有以下幾個設定:

 all 将會對表的全局、分區、子分區的資料都做分析。

 auto oracle根據分區的類型,自動決定哪一種粒度的分析。

 global 隻做全局級别的分析。

 global and partition 隻對全局和分區級别做分析,對子分區不做分析,這是和all的一個差別。

 partition 隻在分區級别做分析。

 subpartition 隻在子分區做分析。

2、gather_schema_stats 存儲過程用于對某個使用者下所有的對象進行分析。

procedure gather_schema_stats(ownname          varchar2,
                              estimate_percent number default DEFAULT_ESTIMATE_PERCENT,
                              block_sample     boolean default FALSE,
                              method_opt       varchar2 default DEFAULT_METHOD_OPT,
                              degree           number default to_degree_type(get_param('DEGREE')),
                              granularity      varchar2 default DEFAULT_GRANULARITY,
                              cascade          boolean default DEFAULT_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')),
                              gather_temp      boolean default FALSE,
                              gather_fixed     boolean default FALSE,
                              stattype         varchar2 default 'DATA',
                              force            boolean default FALSE,
                              obj_filter_list  ObjectTab default null);
                              
procedure gather_schema_stats(ownname          varchar2,
                              estimate_percent number default DEFAULT_ESTIMATE_PERCENT,
                              block_sample     boolean default FALSE,
                              method_opt       varchar2 default DEFAULT_METHOD_OPT,
                              degree           number default to_degree_type(get_param('DEGREE')),
                              granularity      varchar2 default DEFAULT_GRANULARITY,
                              cascade          boolean default DEFAULT_CASCADE,
                              stattab          varchar2 default null,
                              statid           varchar2 default null,
                              options          varchar2 default 'GATHER',
                              statown          varchar2 default null,
                              no_invalidate    boolean default to_no_invalidate_type(get_param('NO_INVALIDATE')),
                              gather_temp      boolean default FALSE,
                              gather_fixed     boolean default FALSE,
                              stattype         varchar2 default 'DATA',
                              force            boolean default FALSE,
                              obj_filter_list  ObjectTab default null);
           

這個存儲過程大多數參數和gather_table_stats是一樣的,值得一提的是有一個options參數,它有以下幾種選項:

GATHER

  對使用者下所有的對象進行分析。

GATHER

AUTO 

由oracle決定那些對象需要分析以及如何分析。

GATHER

STALE oracle隻對陳舊的資料進行分析。

GATHER

EMPTY 隻對沒有統計分析資料的對象進行分析。

LIST AUTO 傳回一個

GATHER

AUTO

産生的被分析對象的清單。

LIST

STALE 傳回一個oracle收集的統計資訊過時的對象清單。

LIST

EMPTY 傳回一個沒有統計分析資料的對象清單。