Pending statistics
来源:互联网 发布:微信时时彩源码坐庄 编辑:程序博客网 时间:2024/05/04 21:54
Pending statistics
11gr2开始,可以使用下面类型的操作来收集优化器统计信息:
1. 自动发布收集的统计信息在收集操作结束以后(默认选项publish)
2. 保存新的统计信息,并且待定(暂不发布pending)
这个特性可以将新收集的统计信息置为待定状态,所以可以先验证新统计信息的有效性然后再发布
有两个场景会使用到,去验证执行计划
1、当pending statistics收集后,在session级别设置optimizer_use_pending_statistics =true,运行查询,检查性能执行计划等
2、用EXPORT_PENDING_STATS导出pending statistics,去测试库,运行查询,检查性能执行计划等
Pending statistics 可以导出,发布,删除
DELETE_PENDING_STATS Procedure
EXPORT_PENDING_STATS Procedure
PUBLISH_PENDING_STATS Procedure
设置表的Pending statistics
Exec dbms_stats.set_table_prefs('<owner_schema>','<Table_Name>','PUBLISH','FALSE');
True表示新的统计信息收集后即发布,也就是说优化器会使用新的统计信息来生查询计划,False表示收集的统计信息会被放入USER_TAB_PENDING_STATS和 USER_IND_PENDING_STATS,并且不会立刻被优化器使用,为待定状态。
可以使用下面的命令来查看是否默认发布新的统计信息
select dbms_stats.get_prefs('PUBLISH', '<owner_schema>', '<Table_name>' ) FROM DUAL;
Once pending statistics have been collected, there is a parameter, OPTIMIZER_USE_PENDING_STATISTICS, which specifies whether or not the optimizer uses pending
statistics when compiling SQL statements. The Default for this is 'FALSE'. Once pending statistics have been collected you could change
OPTIMIZER_USE_PENDING_STATISTICS to 'TRUE' at the session level to check how SQL statements perform with the new statistics before making them 'live'.
举例:
SQL> Create table test as select * from dba_objects;
表已创建。
SQL> SELECT LAST_ANALYZED FROM DBA_TABLES WHERE TABLE_NAME='TEST';
LAST_ANALYZED
--------------
SQL> select dbms_stats.get_prefs('PUBLISH', 'SCOTT', 'TEST' ) FROM DUAL;
DBMS_STATS.GET_PREFS('PUBLISH','SCOTT','TEST')
------------------------------------------------------------------------------------------------
TRUE
SQL> Exec dbms_stats.set_table_prefs('SCOTT','TEST','PUBLISH','FALSE');
PL/SQL 过程已成功完成。
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','TEST');
PL/SQL 过程已成功完成。
SQL> SELECT LAST_ANALYZED FROM DBA_TABLES WHERE TABLE_NAME='TEST';
LAST_ANALYZED
--------------
SQL> SELECT table_name, last_analyzed FROM dba_tab_pending_stats WHERE table_name='TEST';
TABLE_NAME LAST_ANALYZED
------------------------------ --------------
TEST 09-8月 -15
alter session set optimizer_use_pending_statistics = TRUE;
在session级别优化器是可以查看到pending statistics统计信息,然后查看sql语句的性能
SQL> SELECT LAST_ANALYZED FROM DBA_TABLES WHERE TABLE_NAME='TEST';
LAST_ANALYZED
--------------
在此测试sql语句收集统计信息后的性能
这样在session级别内就可以使用待定的统计信息来编译sql语句并且生成查询计划,如果新的统计信息已经被验证,那么可以使用下面的语句发布统计信息。
SQL> Exec dbms_stats.publish_pending_stats('SCOTT','TEST');
SQL> SELECT LAST_ANALYZED FROM DBA_TABLES WHERE TABLE_NAME='TEST';
LAST_ANALYZED
--------------
09-8月 -15
如果不想使用新的统计信息,那么可以使用下面的语句去删除。
Execdbms_stats.delete_pending_stats('owner','tablename');
如果已经发布了统计信息,想要恢复从前的统计信息,可以根据user_TAB_STATS_HISTORY中的stats_update_time,来确定timestamp,执行下面的操作,
最后一个参数as_of_timestamp指的是恢复在这个时间点生效的统计信息,
select h.table_name,to_char(h.STATS_UPDATE_TIME, 'yyyymmddhh24miss') from user_TAB_STATS_HISTORY h
where h.table_name = 'TEST';
exec dbms_stats.restore_table_stats(ownname => 'SCOTT',tabname =>'TEST',as_of_timestamp => to_date('20150805161309','yyyymmddhh24miss'));
可以使用下面的包来改变各个级别(global,schema,table)的默认publish选项。
Global
exec Dbms_stats.set_global_prefs(pname =>'PUBLISH' ,pvalue=> 'FALSE') ;
Schema
exec dbms_stats.set_schema_prefs(ownname => 'DEXTER',pname=>'PUBLISH' ,pvalue => 'TRUE') ;
table
Exec dbms_stats.set_table_prefs('DEXTER', 'PUBLISH_TEST','PUBLISH', 'false');
查看:
How to Use Pending Statistics (文档 ID 1456776.1)
- Pending Statistics
- Pending statistics
- 11gr2 新特性Pending Statistics
- oracle 11g新特性:Pending Statistics
- oracle 11g新特性:Pending Statistics
- 11g New Feature dbms_stats Pending and Published Statistics
- ORACLE DBMS_STATS统计信息 11g新特性:Pending Statistics
- Pending
- pending
- pending transaction
- pending,resolved
- pending intent
- InfoPath pending
- Pending使用
- Robust Statistics
- Error statistics
- Database statistics
- Create statistics
- 操作系统:线程与线程
- 深刻理解Docker镜像大小
- 内容为王
- leetcode Count Primes 统计 素数 个数 超时 解决方案
- LeetCode(134) Gas Station
- Pending statistics
- BestCoder Round #50 (div.2)
- C语言入门笔记20150601
- 给妈妈的一封信
- RAMdisk保存文件方案,解决关机后无盘镜像文件没了的方案
- HTML学习笔记(5)——CSS浮动,相对定位与绝对定位
- 今天开始做战斗,回合制战斗代码实现第二篇,九宫格战斗
- UVA 11426
- Lua笔记9-再论函数