跳到主要内容

GATHER_TABLE_STATS

GATHER_TABLE_STATS 过程用于收集表和列的统计信息。

语法

DBMS_STATS.GATHER_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
estimate_percent NUMBER DEFAULT AUTO_SAMPLE_SIZE,
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 NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
stattype VARCHAR2 DEFAULT 'DATA',
force BOOLEAN DEFAULT FALSE,
hist_est_percent NUMBER DEFAULT AUTO_SAMPLE_SIZE,
hist_block_sample BOOLEAN DEFAULT NULL
);

参数说明

参数解释
ownname要分析的表所在的 Schema。
tabname表名称。
partname分区名称。
estimate_percent预估行的百分比。 有效范围为 [0.000001,100]。
block_sample确定数据库是使用随机块抽样 (TRUE) 还是随机行抽样 (FALSE)。 默认值为 FALSE。随机块采样效率更高,但如果数据不是随机分布在磁盘上,那么样本值可能存在相关性。
method_opt在全局、Schema、数据库或字典级别设置首选项时,只允许使用 FOR ALL 语法。除此之外,method_opt 只能为以下选项之一,或两者的组合:
  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]
  • FOR COLUMNS [column_clause] 其中,size_clause 定义为 size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}column_clause 定义为 column_clause := column_name | extension name | extension
  • integer:直方图 Bucket 的数量。有效范围为 [1,2048]。
  • REPEAT:仅在已有直方图的列上收集直方图。
  • AUTO:seekdb 优化器根据列的使用情况,来决定是否收集列的直方图。直方图桶个数使用默认值 254。
  • SKEWONLY:仅仅只收集数据分布不均匀的列的直方图。直方图桶个数使用默认值 254。
  • column_name:列名。
  • extension:可以是 (column_name, colume_name [, ...]) 格式的列组或表达式。默认值为 FOR ALL COLUMNS SIZE AUTO
degree并行度。默认值是 NULLNULL 表示使用由 CREATE TABLEALTER TABLE 语句中的 DEGREE 子句指定的表默认值。当使用 DEGREE=>NULLDEGREE=>n 时,如果对象的大小不保证实现并行执行,则 DBMS_STATS 可能会使用串行执行。
granularity要收集的统计信息的粒度(仅适用于当表已分区时)。
  • ALL:收集所有(子分区、分区和全局)统计信息。
  • APPROX_GLOBAL AND PARTITION: 类似于 GLOBAL AND PARTITION,但在这种情况下,全局统计信息是分区级别统计信息的汇总。此选项将汇总不同值的数量和索引不同键的数量之外的所有统计信息。但只汇总带有统计信息的分区。如果 partnameNULL 或无法执行汇总(例如缺少其中一个分区的统计信息),则会收集全局统计信息。
  • AUTO:根据分区类型确定粒度。是默认值。
  • DEFAULT:收集全局和分区级别的统计信息。此选项已废弃,建议使用 GLOBAL AND PARTITION
  • GLOBAL:收集全局统计数据。
  • GLOBAL AND PARTITION:收集全局和分区级别的统计信息。即使是复合分区对象,也不会收集子分区级别的统计信息。
  • PARTITION:收集分区级别的统计信息。
  • SUBPARTITION:收集子分区级别的统计信息。
cascade除了收集表和列统计信息之外,还会收集有关索引的统计信息,等效于在 Schema 中的每个索引上运行 GATHER_INDEX_STATS 过程。
no_invalidate收集统计信息时是否刷 Plan Cache。设置为 TRUE 表示收集统计信息时不刷 Plan Cache。
stattype当前统计信息所存储的位置。
force是否强制收集,并忽略锁的状态。默认为 FALSE。如果设置为 TRUE,即使统计信息被锁定,也会收集统计信息。
hist_est_percent指定直方图的采样比例。
hist_block_sample指定直方图的采样方式。

异常情况

错误码描述
HY000
  • 表不存在或权限不足。
  • 输入值错误。

使用说明

要调用此过程,必须是表的所有者。

示例

收集用户 testUser01tbl1 表的统计信息。

CALL DBMS_STATS.GATHER_TABLE_STATS ('testUser01', 'tbl1', method_opt=>'FOR ALL COLUMNS SIZE
5', granularity=>'ALL', degree=>4, no_invalidate=>FALSE);
Query OK, 0 rows affected