Pending statistics
发布日期:2021-09-16 04:38:35
浏览次数:37
分类:技术文章
本文共 3381 字,大约阅读时间需要 11 分钟。
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月 -15alter 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)
转载地址:https://blog.csdn.net/wll_1017/article/details/47375023 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月13日 00时26分55秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
使用命令行运行unity并执行某个静态函数(运用于命令行打包和批量打包)
2019-04-27
web.py框架
2019-04-27
web.py学习笔记
2019-04-27
python的代码缩进
2019-04-27
A* Pathfinding Project (Unity A*寻路插件) 使用教程
2019-04-27
bash学习笔记
2019-04-27
sqlite学习
2019-04-27
手把手教你实现Unity与Android的交互
2019-04-27
手把手教你使用Unity的Behavior Designer
2019-04-27
Unity3D摄像机裁剪——NGUI篇
2019-04-27
lua深拷贝一个table
2019-04-27
app运行提示Unable to Initialize Unity Engine
2019-04-27
spring boot 与 Ant Design of Vue 实现修改按钮(十七)
2019-04-27
spring boot 与 Ant Design of Vue 实现删除按钮(十八)
2019-04-27
spring boot 与 Ant Design of Vue 实现新增角色(二十)
2019-04-27
spring boot 与 Ant Design of Vue 实现修改角色(二十一)
2019-04-27
spring boot 与 Ant Design of Vue 实现删除角色(补二十一)
2019-04-27
spring boot 与 Ant Design of Vue 实现左侧组织树(二十三)
2019-04-27