常见的分区表DDL如 split partition、add partition都会生成没有统计信息的表分区table partition,长期以来我对dbms_stats.lock_table_stats有一个错误的认识,即对于没有统计信息的分区,LOCK_STATS并不生效。 实际测试发现锁表统计信息对没有统计信息的分区同样有效,结果就是自动收集统计信息的作业不会收集这些实际没有统计信息的分区:

CREATE TABLE MacleanV
nologging
partition by range(object_id)
(partition p1 values less than (99999) tablespace users,
partition p2 values less than (maxvalue) tablespace users)
as select * from dba_objects where rownum=0; SQL> insert into macleanV select * from dba_objects; 51029 rows created. SQL> commit; Commit complete. SQL> exec dbms_stats.gather_table_stats('SYS','MACLEANV'); PL/SQL procedure successfully completed. SQL> select num_rows,blocks from dba_tables where table_name='MACLEANV'; NUM_ROWS BLOCKS
---------- ----------
51029 748 SQL> select partition_name,num_rows,blocks from dba_tab_partitions where table_name='MACLEANV'; PARTITION_NAME NUM_ROWS BLOCKS
------------------------------ ---------- ----------
P1 51029 748
P2 0 0 SQL> exec dbms_stats.lock_table_stats('SYS','MACLEANV'); PL/SQL procedure successfully completed. SQL> exec dbms_stats.gather_table_stats('SYS','MACLEANV');
BEGIN dbms_stats.gather_table_stats('SYS','MACLEANV'); END; *
ERROR at line 1:
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 15027
ORA-06512: at "SYS.DBMS_STATS", line 15049
ORA-06512: at line 1 SQL> alter table macleanv split partition p1 at (20001) into (partition p3, partition p4); Table altered. SQL> select partition_name,num_rows,blocks from dba_tab_partitions where table_name='MACLEANV'; PARTITION_NAME NUM_ROWS BLOCKS
------------------------------ ---------- ----------
P4
P2 0 0
P3 SQL> exec DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC; PL/SQL procedure successfully completed. SQL> select partition_name,num_rows,blocks from dba_tab_partitions where table_name='MACLEANV'; PARTITION_NAME NUM_ROWS BLOCKS
------------------------------ ---------- ----------
P2 0 0
P3
P4 SQL> exec DBMS_STATS.GATHER_DATABASE_STATS; PL/SQL procedure successfully completed. SQL> select partition_name,num_rows,blocks from dba_tab_partitions where table_name='MACLEANV'; PARTITION_NAME NUM_ROWS BLOCKS
------------------------------ ---------- ----------
P2 0 0
P3
P4

使用DBMS_STATS.LOCK_TABLE_STATS锁定相关统计信息
语句为:
EXECUTE DBMS_STATS.LOCK_TABLE_STATS (‘owner name’, ‘table name’);

查询锁定状态
SELECT stattype_locked FROM dba_tab_statistics

当锁定表的统计信息后,这个表相关的对象的统计信息也被锁定,比如列信息、直方图、索引的统计信息。

在锁定前,请在适当时刻对表的统计信息进行收集,并确认当前的统计信息是合适的。
在锁定后,请用刷新shared pool或grant/revoke等方法将表相关的SQL失效。

更多DBMS_STATS.LOCK_TABLE_STATS信息可以参考:

Preserving Statistics using DBMS_STATS.LOCK_TABLE_STATS [ID 283890.1]
ORA-7445 [kdapprv] Running dbms_stats.gather_table_stats or dbms_stats.lock_table_stats [ID 333377.1]
FAQ: Automatic Statistics Collection Jobs (10g and 11g) [ID 1233203.1]

[z]dbms_stats.lock_table_stats对于没有统计信息的表分区同样有效的更多相关文章

  1. 使用dbms_stats.gather_table_stats调整表的统计信息

    创建实验表,插入10万行数据 SQL> create table test (id number,name varchar2(10)); Table created. SQL> decla ...

  2. oracle里的统计信息

    1 oracle里的统计信息 Oracle的统计信息是这样的一组数据,存储在数据字典,从多个维度描述了oracle数据库对象的详细信息,有6种类型 表的统计信息:记录数.表块的数量.平均行长度等 索引 ...

  3. 有关Oracle统计信息的知识点[z]

    https://www.cnblogs.com/sunmengbbm/p/5775211.html 一.什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.例如, ...

  4. 使用DBMS_STATS来收集统计信息【转】

    overview Oracle's cost-based optimizer (COB) uses statistics to calculate the selectivity (the fract ...

  5. 为准确生成执行计划更新统计信息-analyze与dbms_stats

    如果我们想让CBO利用合理利用数据的统计信息,正确判断执行任何SQL查询时的最快途径,需要及时的使用analyze命令或者dbms_stats重新统计数据的统计信息. 例如索引跳跃式扫描(INDEX ...

  6. 收集oracle统计信息

    优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN:列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分 ...

  7. ORACLE收集统计信息

    1.     理解什么是统计信息 优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划.优化器统计信息包括: ·       ...

  8. PLSQL_统计信息系列09_统计信息在不同数据库中迁移

    2014-01-05 Created By BaoXinjian

  9. PLSQL_统计信息系列02_统计信息的对象

    20150505 Created By BaoXinjian

随机推荐

  1. Zabbix监控系统配置

    1.Zabbix是一个基于WEB界面的提供分布式系统监控的企业级的开源解决方案 Zabbix能监视各种网络参数,保证服务器系统的安全稳定的运行,并提供灵活的通知机制以让SA快速定位并解决存在的各种问题 ...

  2. Java文件上传:Restful接口接收上传文件,缓存在本地

    接口代码 import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; i ...

  3. PPT的感想

    ①double:使用double类型的数值进行计算, 其结果是不精确的.因为double类型的数值占用64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差. 这个涉及到二进制 ...

  4. SpringMVC Shiro与filterChainDefinitions

    SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能. 第一步:配置web.xml <!-- 配置Shiro过滤器,先让Shiro ...

  5. clearfix原理

    [clearfix原理] .clearfix:after { <----在类名为“clearfix”的元素内最后面加入内容: content: "."; <----内容 ...

  6. SMB扫描

    server message block协议,Windows特有的一个协议,实现较复杂,windows应用最广的一个协议,也是安全问题最多的问题,smb协议windows默认开发,用于文件共享. sm ...

  7. Python 豆瓣日记爬取

    无聊写了个豆瓣日记的小爬虫,requests+bs4. cookies_src可填可不填,主要是为了爬取仅自己可见的日记. url填写的是日记页面,即https://www.douban.com/pe ...

  8. jdbctemplate 批量插入

    public void batchImport(List<Map<String, Object>> list) { String sql = "insert into ...

  9. leetcode 树类型题

    树的测试框架: // leetcodeTree.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  10. wasserstein 距离

    https://blog.csdn.net/nockinonheavensdoor/article/details/82055147 注明:直观理解而已,正儿八经的严谨证明看最下面的参考. Earth ...