对于经常需要truncate的表进行固定统计信息
来源:互联网 发布:第二代身份证照片软件 编辑:程序博客网 时间:2024/04/26 11:15
大家做过统计的一些存储过程可能会知道,我们经常有这类表,要先truncate它,执行插入,再在执行相关sql,这就会导致有一个时间误差,如果在truncate和插入的中间进行了表的分析,这个统计信息是不准确的,也会影响执行计划:
SQL> select num_rows,blocks from user_tables; NUM_ROWS BLOCKS---------- ---------- 50315 103SQL> turncate table daodao_temp;SP2-0734: unknown command beginning "turncate t..." - rest of line ignored.SQL> truncate table daodao_temp;Table truncated.SQL> select num_rows,blocks from user_tables; NUM_ROWS BLOCKS---------- ---------- 50315 103SQL> execute dbms_stats.gather_table_stats(user,'DAODAO_TEMP');PL/SQL procedure successfully completed.SQL> select num_rows,blocks from user_tables; NUM_ROWS BLOCKS---------- ---------- 0 0
--这里是关键点,我们有个按天分析的job,如果这个时候分析了这个数据,会认为数据为0,但是之后就是录入数据到临时表
SQL> select num_rows,blocks from user_tables;
NUM_ROWS BLOCKS
---------- ----------
0 0
SQL> insert into daodao_temp select object_id,object_id from dba_objects;
50315 rows created.
SQL> commit;
Commit complete.
有数据进行入库:
好了,这个时候已经不会再执行统计信息的存储过程了(除非第二天的时候),这个时候如果有一个sql执行,就会导致执行计划可能错误了。
这种现象在月初尤其明显,道理类似的。
我们可以对这类临时表进行录入数据的锁定统计信息:
SQL> execute dbms_stats.gather_table_stats(user,'DAODAO_TEMP');
SQL> select num_rows,blocks from user_tables;
NUM_ROWS BLOCKS
---------- ----------
50315 103
SQL> execute DBMS_STATS.LOCK_TABLE_STATS(user,'DAODAO_TEMP');
PL/SQL procedure successfully completed.
SQL> TRUNCATE TABLE DAODAO_TEMP;
Table truncated.
SQL> execute dbms_stats.gather_table_stats(user,'DAODAO_TEMP');
BEGIN dbms_stats.gather_table_stats(user,'DAODAO_TEMP'); END;
*
ERROR at line 1:
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 13056
ORA-06512: at "SYS.DBMS_STATS", line 13076
ORA-06512: at line 1
这样搜集统计信息的时候就不会搜集了,相关数据字典可以查询这个:
SQL> select stattype_locked from user_tab_statistics where table_name ='DAODAO_TEMP';
STATT
-----
ALL
all表示锁定了 ,空表示没有锁定:
如果需要解锁,可以执行如下:
SQL> execute dbms_stats.unlock_table_stats(user,'DAODAO_TEMP');
PL/SQL procedure successfully completed.
- 对于经常需要truncate的表进行固定统计信息
- truncate表,会将统计信息清除么?
- 统计信息对于查询路径选择的影响
- 对于某些不会变又经常需要用的数据的处理
- 静态获取时间,对于经常需要写注释的哥们们有福了!
- 通过Python进行MySQL表信息统计
- oracle truncate 其他用户下的表需要的权限
- 对于%需要注意的
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- 需要经常看的故事
- oc经常提到的静态方法中返回的对象,是否需要进行reless操作。
- 解决IE经常出现“Microsoft Internet Explorer遇到问题需要关闭……”的信息提示
- 关于truncate table需要的系统权限
- 经常需要对WebView中加载的内容是否完成或者是否加载失败进行判别
- 统计信息所在的表
- 用统计方法进行信息抽取的几位研究人员
- 使用MongoDB的MapReduce进行区域地震信息统计实验
- 对于Sql模糊查询的话,需要对多个字段进行模糊查询的解决办法
- 程序员编程艺术:第五章、寻找满足和为定值的两个或多个数
- KMP算法详解
- 设计模式原则(6)迪米特法则
- 十四、第三章再续:快速选择SELECT算法的深入分析与实现
- 用exten在一个文件内声明全局变量
- 对于经常需要truncate的表进行固定统计信息
- vc6.0企业安装版解决win7不兼容问题附编译器下载
- 简单的BFS 和康托展开式的应用
- linux bash bc awk 浮点 计算 比较
- 学习存储过程
- 垂直电商生死局:赚钱是王道
- 网页游戏征途
- hdu 3038 How Many Answers Are Wrong
- android应用优化之缓存计算结果