统计信息的锁定功能主要用于锁死统计信息,防止统计信息更新,以保证统计信息的稳定性。
例如,如果想指定某一张表不收集统计信息,就可以提前上锁,这样计划生成的时候就会采取其他方式获取统计信息(动态采样等)。又如,对于一张数据稳定的表,我们不需要经常去收集它的统计信息,因此就可以提前上锁。
锁定功能
目前支持如下三种锁定统计信息的方式:
使用存储过程
lock_table_stats锁定某个表的统计信息。使用存储过程
lock_partition_stats锁定某个分区的统计信息。使用存储过程
lock_schema_stats锁定某个 Schema 下所有表的统计信息。
具体的存储过程定义如下:
PROCEDURE lock_table_stats (
ownname VARCHAR2,
tabname VARCHAR2,
stattype VARCHAR2 DEFAULT 'ALL'
);
PROCEDURE lock_partition_stats (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2
);
PROCEDURE lock_schema_stats(
ownname VARCHAR2,
STATTYPE VARCHAR2 DEFAULT 'ALL'
);
参数解释如下表所示。
| 参数 | 解释 |
|---|---|
| ownname | 用户名。如果用户名设置为 NULL,会默认使用当前登录用户名。 |
| tabname | 表名称。 |
| partname | 分区名称。 |
| stattype | 加锁的类型。一般包括如下三种加锁类型:
'ALL' 类型。 |
锁定功能的示例
锁定用户 test 下的表 t_part 的表级统计信息及 p0 分区的统计信息。
CALL dbms_stats.lock_table_stats('test', 't_part');
CALL dbms_stats.lock_partition_stats('test', 't_part', 'p0');
解锁功能
目前支持如下三种解锁统计信息的方式:
使用存储过程
unlock_table_stats解锁某个表的统计信息。使用存储过程
unlock_partition_stats解锁某个分区的统计信息。使用存储过程
unlock_schema_stats解锁某个 Schema 下所有表的统计信息。
具体的存储过程定义如下:
PROCEDURE unlock_table_stats (
ownname VARCHAR2,
tabname VARCHAR2,
stattype VARCHAR2 DEFAULT 'ALL'
);
PROCEDURE unlock_partition_stats (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2
);
PROCEDURE unlock_schema_stats(
ownname VARCHAR2,
STATTYPE VARCHAR2 DEFAULT 'ALL'
);
参数解释如下表所示。
| 参数 | 解释 |
|---|---|
| ownname | 用户名。如果用户名设置为 NULL,会默认使用当前登录用户名。 |
| tabname | 表名称。 |
| partname | 分区名称。 |
| stattype | 加锁的类型。一般包括三种加锁类型: 'ALL'、 'DATA' 和 'CACHE'。说明 当前版本的 OceanBase 数据库的 Oracle 模式仅支持 'ALL' 类型。 |
注意
对于一张表,如果同时加锁表级和分区级的统计信息,那么解锁的时候也需要同时解锁表级和分区级的统计信息。
解锁功能的示例
解锁用户 test 下的表 t_part 的表级统计信息及 p0 分区的统计信息。
CALL dbms_stats.unlock_table_stats('test', 't_part');
CALL dbms_stats.unlock_partition_stats('test', 't_part', 'p0');「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




