Oracle 11g系统自动收集统计信息的一些知识
来源:互联网 发布:阿里云开mc服务器 编辑:程序博客网 时间:2024/05/17 02:21
在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.enabledFROM 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 11g系统自动收集统计信息的一些知识
- Oracle 11g系统自动收集统计信息的一些知识
- [Oracle] 11G自动收集统计信息
- Oracle 11G自动收集统计信息
- 启用oracle 11g自动收集统计信息
- Oracle 11G统计信息自动收集及调整
- oracle 11g 自动收集统计信息 导致IO过大
- 11G自动收集统计信息
- Oracle 11g统计信息收集
- 关于11g+的统计信息收集
- Oracle自动收集统计信息
- 11g中如何禁用自动统计信息收集作业?
- 10G 自动收集统计信息
- 10g 统计信息自动收集
- oracle收集系统统计信息
- 统计信息的自动收集
- Oracle 收集统计信息在11g和12C下的区别
- oracle自动统计信息的收集原理及实验
- 在C#中主线程和子线程如何实现互相传递数据
- LeetCode——Search a 2D Matrix
- 使用CocoaPods更新第三方库出错的解决办法
- codeforces 486C Palindrome Transformation 贪心求构造回文
- jsonp 前端和后端的结合
- Oracle 11g系统自动收集统计信息的一些知识
- git学习使用记录
- 数据结构与算法学习之路:直接插入排序
- SpringMVC拦截器简单使用
- javascript中的each
- Java垃圾回收机制
- erlang进程占用内存过多的查找问题过程
- Git常用命令解说
- Error parsing XML: unbound prefix on XXX解决办法