11g挂起发布统计数据
==============
11g之前,收集统计信息,如analyze或者使用dbms_stats包后收集到的统计信息会立即生效
11g中默认也是这样
不过可以通过设置可以不自动发布统计信息
这样在不知新的统计信息是否对系统有帮助的情况下先进行测试
之后确定有帮助之后再发布
--------------
--查看默认统计信息发布方式
--true为自动发布,false为挂起方式
SQL> select dbms_stats.get_prefs('publish') from dual;
DBMS_STATS.GET_PREFS('PUBLISH')
--------------------------------------------------------------------------------
TRUE
--对表进行分析
--收集统计信息
SQL> analyze table an.at compute statistics;
Table analyzed.
--确认收集到的统计信息
SQL> select table_name,last_analyzed,num_rows from dba_tables where wner='AN' and table_name='AT';
TABLE_NAME LAST_ANALYZED NUM_ROWS
------------------------------ ------------------- ----------
AT 2011-12-01 11:44:06 0
--设置an用户下表at的统计信息发布方式为挂起发布
--反向操作将false改为true即可
SQL> exec dbms_stats.set_table_prefs('an','at','publish','false');
PL/SQL procedure successfully completed.
--确认an用户下表at的统计信息发布方式
--false为挂起方式,true为自动发布
SQL> select dbms_stats.get_prefs('publish','an','at') from dual;
DBMS_STATS.GET_PREFS('PUBLISH','AN','AT')
--------------------------------------------------------------------------------
FALSE
--再次对表进行分析
--收集统计信息
SQL> analyze table an.at compute statistics;
Table analyzed.
--从dba_tables中确认到已经发布的统计信息没有发生改变
--证明当前对表an.at统计信息的收集方式修改生效
SQL> select table_name,last_analyzed,num_rows from dba_tables where wner='AN' and table_name='AT';
TABLE_NAME LAST_ANALYZED NUM_ROWS
------------------------------ ------------------- ----------
AT 2011-12-01 11:44:06 0
--对于挂起统计信息表的查询要在dba_tab_pending_stats中进行
--查询结果为刚刚进行的分析时间
SQL> select table_name,last_analyzed,num_rows from dba_tab_pending_stats where wner='AN' and table_name='AT';
TABLE_NAME LAST_ANALYZED NUM_ROWS
------------------------------ ------------------- ----------
AT 2011-12-01 11:45:52 0
--手动发布挂起的统计信息
--使优化程序能够认到
SQL> exec dbms_stats.publish_pending_stats('AN','AT');
PL/SQL procedure successfully completed.
--确认之前挂起的统计信息已经发布
SQL> select table_name,last_analyzed,num_rows from dba_tables where wner='AN' and table_name='AT';
TABLE_NAME LAST_ANALYZED NUM_ROWS
------------------------------ ------------------- ----------
AT 2011-12-01 11:45:52 0
--删除挂起统计信息
SQL> exec dbms_stats.delete_pending_stats('AN','AT')
PL/SQL procedure successfully completed.
SQL> select table_name,last_analyzed,num_rows from dba_tab_pending_stats where wner='AN' and table_name='AT';
no rows selected
--删除当前用户下所有表的挂起统计信息
--将delete改为publish即为发布
SQL> exec dbms_stats.delete_pending_stats('AN',null)
PL/SQL procedure successfully completed.
--删除全库表的挂起统计信息
--将delete改为publish即为发布
SQL> exec dbms_stats.delete_pending_stats(null,null)
PL/SQL procedure successfully completed.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13177610/viewspace-712536/
,如需转载,请注明出处,否则将追究法律责任。