分区对象是由段的集合组成的逻辑概念。举例来说,下面的SQL语句创建一张拥有16个段的分区表,如图8-6所示。这16个段是在表空间中实际存储数据的对象,四个分区和表仅是元数据对象。它们只存在于数据字典中:
CREATE TABLE t(
id NUMBER,
tstamp DATE,
pad VARCHAR2(1000)
)
PARTITION BY RANGE(tstamp)
SUBPARTITION BY HASH(id)
SUBPARTITION TEMPLATE
(
SUBPARTITION sp1,
SUBPARTITION sp2,
SUBPARTITION sp3,
SUBPARTITION Sp4
)
(
PARTITION q1 VALUES LESS THAN
(to_date('2014-04-01','YYYY-MM-DD')),
PARTITION q2 VALUES LESS THAN
(to_date('2014-07-01','YYYY-MM-DD')),
PARTITION q3 VALUES LESS THAN
(to_date('2014-10-01','YYYY-MM-DD')),
PARTITION q4 VALUES LESS THAN
(to_date('2015-01-01','YYYY-MN-DD'))
);
对于分区的对象,数据库引擎分别能够在表/索引级别上及分区和子分区级别上处理前面章节讨论的所有对象统计信息(换句话说,表统计信息、列统计信息、直方图和索引统计信息)。在所有级别上拥有统计信息是有必要的,因为根据所处理的SQL语句,查询优化器着重访问最能够描述段的对象统计信息。
简言之,仅在解析阶段查询优化器可以确定是否访问某个特定的分区或者子分区时,查询优化器才使用分区和子分区统计信息。否则,查询优化器通常会使用表/索引级别统计信息。(但在某些情况下,查询优化器在同一时刻既使用表/索引级别统计信息,也使用分区和子分区级别统计信息。)
为收集对象统计信息,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版本起开始可用。