Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 11g系统自动收集统计信息的一些知识

   在11g之前,当表的数据量修改超过总数据量的10%,就会晚上自动收集统计信息,如何判断10%,之前的帖子有研究过:Oracle自动统计信息的收集原理及实验。这个STALE_PERCENT=10%,是无法修改的,如果表非常大,10%是非常多的数据,非常有可能造成统计信息不准确。    在11g之后,STALE_PERCENT=10%是可以修改的,分为全局(DBMS_STATS.SET_GLOBAL_PREFS )和表级别(DBMS_STATS.SET_TABLE_PREFS)。表级别的设定:    修改为5%(范围从1-100): exec dbms_stats.set_table_prefs(null,"table_name","STALE_PERCENT",5);
    恢复为10%: exec dbms_stats.set_table_prefs(null,"table_name","STALE_PERCENT",null);
    查询百分比:select dbms_stats.get_prefs("STALE_PERCENT",null,"table_name") from dual; ---11g的是 周一到周五 22:00-2:00 周六周日 6:00-4:00SELECT w.window_name, w.repeat_interval, w.duration, w.enabled
FROM dba_autotask_window_clients c, dba_scheduler_windows w
WHERE c.window_name = w.window_name
AND c.optimizer_stats = "ENABLED";
WINDOW_NAME          REPEAT_INTERVAL                                              DURATION
-------------------- ------------------------------------------------------------ ---------------
SUNDAY_WINDOW        freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0       +000 20:00:00
FRIDAY_WINDOW        freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0        +000 04:00:00
WEDNESDAY_WINDOW   freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0        +000 04:00:00
SATURDAY_WINDOW      freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0       +000 20:00:00
THURSDAY_WINDOW      freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0        +000 04:00:00
TUESDAY_WINDOW     freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0        +000 04:00:00
MONDAY_WINDOW        freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0        +000 04:00:00--禁用自动收集
exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => "auto optimizer stats collection",operation => NULL,window_name => NULL);
--启用自动收集
exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => "auto optimizer stats collection",operation => NULL,window_name => NULL);
--查看jobselect client_name,status from dba_autotask_client;CLIENT_NAME                                                      STATUS
---------------------------------------------------------------- --------
auto optimizer stats collection                                  ENABLED
auto space advisor                                             ENABLED
sql tuning advisor                                             ENABLED
--收集当前数据库下所有用户的统计信息
exec dbms_stats.gather_database_stats(user);
--收集当前数据库用户下所有对象的统计信息
exec dbms_stats.gather_schema_stats(user);
--收集数据字典的统计信息
exec dbms_stats.gather_dictionary_stats();
--当系统有很大的分区表时,如果总是全部收集则会比较慢,11g之后可以设置INCREMENTAL只对数据有变动的分区做收集exec dbms_stats.set_table_prefs(user,"table_name","INCREMENTAL","TRUE");--只收集数据变动的分区exec dbms_stats.set_table_prefs(user,"table_name","INCREMENTAL","FALSE");--都要收集select dbms_stats.get_prefs("INCREMENTAL",null,"table_name") from dual;--查看分区表INCREMENTAL的值
--获取global的统计信息收集设置选项
select dbms_stats.get_prefs("method_opt") from dual;
select dbms_stats.get_prefs("concurrent") from dual;
select dbms_stats.get_prefs("GRANULARITY") from dual;select dbms_stats.get_prefs("INCREMENTAL") from dual;
--设置global的统计信息收集选项
exec DBMS_STATS.SET_PARAM("DEGREE",4);exec DBMS_STATS.SET_PARAM("INCREMENTAL","TRUE");Oracle 单实例 从32位 迁移到 64位 方法  http://www.linuxidc.com/Linux/2012-03/55759.htm在CentOS 6.4下安装Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htmOracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htmDebian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htmOracle导入导出expdp IMPDP详解 http://www.linuxidc.com/Linux/2014-04/99932.htmOracle 10g expdp导出报错ORA-4031的解决方法 http://www.linuxidc.com/Linux/2014-04/99842.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址