在11g之前,当表的数据量修改超过总数据量的10%,就会晚上自动收集统计信息,如何判断10%,之前的帖子有研究过:oracle自动统计信
在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:00
select 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);
--查看job
select 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位 方法
在centos 6.4下安装oracle 11gr2(x64)
oracle 11gr2 在vmware虚拟机中安装步骤
debian 下 安装 oracle 11g xe r2
oracle导入导出expdp impdp详解
oracle 10g expdp导出报错ora-4031的解决方法
本文永久更新链接地址: