ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 11g挂起发布统计数据

11g挂起发布统计数据

原创 Linux操作系统 作者:安佰胜 时间:2011-12-01 12:03:14 0 删除 编辑

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博客 ” ,链接:http://blog.itpub.net/13177610/viewspace-712536/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-08-26

  • 博文量
    215
  • 访问量
    607374