oracle 收集对象统计信息
收集对象统计信息
为收集对象统计信息,dbms_stats包含有多个存储过程。使用多个存储过程是因为,根据不同的情形,收集对象统计信息的处理过程应该发生在整个数据库、数据字典、模式或者单独的表级别上。
Ø gather_database_stats 为整个数据库收集对象统计信息。
Ø gather_dictionary_stats 为数据字典收集对象统计信息。注意,数据字典不仅是由存储在sys模式下的对象组成,同时也包括由Oracle为可选组件安装的其他模式下的对象。
Ø gather_fixed_objects_stats 为称作固定表(又称为x$表)和固定索引的特殊对象收集对象统计信息,它们是数据字典的组成部分。固定表,通常用于动态性能视图中,是仅存在于内存中的结构。基于这个原因,需要对它们进行特殊处理。要想知道这个过程与哪些表有关系,可以使用下面的查询。注意,并没有为所有的固定表收集对象统计信息:
select name from
v$fixed_table where type='TABLE';
Ø gather_schema_stats 为整个模式收集对象统计信息。
Ø gather_table_stats 为表收集包括列在内的对象统计信息,还可以为其索引收集统计信息。
Ø gather_index_stats 为索引收集对象统计信息。
注意 dbms_stats包并不是收集对象统计信息的唯一特性。实际上,CREATE INDEX 和ALTER INDEX 语句在创建索引时会自动收集对象统计信息。此外,从12.1版本开始,CTAS语句和将数据插入到空表中的直接路径插入也会自动收集对象统计信息。要知道由dbms_stats包计算的对象统计信息要优先于自动收集的统计信息。因此,不能在任何情况下都总是依赖自动收集统计信息。
dbms_stats包提供的存储过程接受的不同参数可以分为三种主要的类型。通过第一组参数可以指定目标对象,通过第二组可以指定收集的选项,而通过第三组可以指定是否在覆盖当前统计信息之前备份它们。表8-3总结了在各个存储过程中可用的不同参数。
表8-3 用于收集对象统计信息的存储过程的参数
参 数 |
数据库 |
数据字典 |
固定对象 |
模 式 |
表 |
索 引 |
目标对象 |
|
|
|
|
|
|
ownname |
|
|
|
y |
y |
y |
indname |
|
|
|
|
|
y |
tabname |
|
|
|
|
y |
|
partname |
|
|
|
|
y |
y |
comp_id |
|
y |
|
|
|
|
granularity |
y |
y |
|
y |
y |
y |
cascade |
y |
y |
|
y |
y |
|
gather_fixed |
y |
|
|
y |
|
|
gather_sys |
y |
|
|
|
|
|
gather_temp |
y |
|
|
y |
|
|
options |
y |
y |
|
y |
Y* |
|
objlist |
y |
y |
y |
|
|
|
force |
|
|
|
y |
y |
y |
obj_filter_list |
y |
y |
y |
|
|
|
收集选项 |
|
|
|
|
|
|
estimate_percent |
y |
y |
|
y |
y |
y |
block_sample |
y |
y |
|
y |
y |
|
method_opt |
y |
y |
|
y |
y |
|
degree |
y |
y |
|
y |
y |
y |
no_invalidate |
y |
y |
y |
y |
y |
y |
备份表 |
|
|
|
|
|
|
stattab |
y |
y |
y |
y |
y |
y |
statid |
y |
y |
y |
y |
y |
y |
statown |
y |
y |
y |
y |
y |
y |
*表示从12.1版本起开始可用。