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 只能为以下选项之一,或两者的组合:
|
| degree | 并行度。默认值是 NULL。NULL 表示使用由 CREATE TABLE 或 ALTER TABLE 语句中的 DEGREE 子句指定的表默认值。当使用 DEGREE=>NULL、DEGREE=>n 时,如果对象的大小不保证实现并行执行,则 DBMS_STATS 可能会使用串行执行。 |
| granularity | 要收集的统计信息的粒度(仅适用于当表已分区时)。
|
| cascade | 除了收集表和列统计信息之外,还会收集有关索引的统计信息,等效于在 Schema 中的每个索引上运行 GATHER_INDEX_STATS 过程。 |
| no_invalidate | 收集统计信息时是否刷 Plan Cache。设置为 TRUE 表示收集统计信息时不刷 Plan Cache。 |
| stattype | 当前统计信息所存储的位置。 |
| force | 是否强制收集,并忽略锁的状态。默认为 FALSE。如果设置为 TRUE,即使统计信息被锁定,也会收集统计信息。 |
| hist_est_percent | 指定直方图的采样比例。 |
| hist_block_sample | 指定直方图的采样方式。 |
异常情况
| 错误码 | 描述 |
|---|---|
| HY000 |
|
使用说明
要调用此过程,必须是表的所有者。
示例
收集用户 testUser01 的 tbl1 表的统计信息。
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