首批通过分布式安全可靠测评,为关键业务系统打造
SET_TABLE_STATS
更新时间:2026-03-26 17:56:44
SET_TABLE_STATS 过程用于设置表级的基本统计信息。
功能适用性
该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持。
语法
DBMS_STATS.SET_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
numrows NUMBER DEFAULT NULL,
numblks NUMBER DEFAULT NULL,
avgrlen NUMBER DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE);
参数解释
| 参数 | 解释 |
|---|---|
| ownname | 用户名。如果用户名设置为 NULL,会默认使用当前登录用户名。 |
| tabname | 表的名称。 |
| partname | 存储统计信息的表分区的名称。如果表已分区且 partname 为 NULL,则统计信息存储在全局表级别。 |
| numrows | 表级的总行数。 |
| numblks | 表级占用的块数。 |
| avgrlen | 列级的平均长度(以字节为单位)。 |
| no_invalidate | 收集统计信息是否刷 Plan Cache。设置为 TRUE 表示收集统计信息时不刷 Plan Cache。 |
| force | 是否强制收集,并忽略锁的状态。默认为 FALSE。如果设置为 TRUE,即使统计信息被锁定,也会收集统计信息。 |
异常情况
| 错误码 | 描述 |
|---|---|
| OBE-20000 | 对象不存在或权限不足。 |
| OBE-20001 | 无效或不一致的输入值。 |
| OBE-20005 | 该对象的统计信息被锁定。 |
使用说明
要调用此过程,必须是表的所有者;对于使用由
SYS所拥有的对象,需要是表的所有者或具有SYSDBA权限才能调用此过程。优化器通过缓存数据来估计索引或统计表访问的缓存块数。操作的总成本包括从磁盘读取未缓存块的 I/O 成本、从缓冲区中获取缓存块的 CPU 成本以及处理数据的 CPU 成本。
对于取值为
TRUE和FALSE的参数,需要在BEGIN ... END块中执行该过程。
示例
置用户 testUser01 的表 tbl1 的总行数为一万行。
obclient> BEGIN
DBMS_STATS.SET_TABLE_STATS('testUser01', 'tbl1', numrows=>10000, force=>FALSE, no_invalidate=>FALSE);
END;
Query OK, 0 rows affected