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 返回一个没有统计分析数据的对象列表。