在oracle 10g之前并没有自动收集统计信息的机制,对统计信息的收集一般都是由DBA手工编写SHELL脚本来实现。这样就会出现根据表或者其他对象的变更,需要频繁的变更SHELL脚本来适应数据库对象的变更。另外,可能很多DBA没有意识到统计信息对优化器的重要性,导致很多的SQL无法得到正确的执行计划。
基于统计信息对CBO的重要性,所以oracle从10g版本开始引入了自动收集统计信息的功能。自动统计信息收集作业能够每天收集统计信息。默认情况下,该收集作业会自动判断如下方面的内容。
1、需要对哪些对象收集统计信息。
2、需要对哪些统计信息已经过期的对象重复收集统计信息。
3、以估算模式收集统计信息的采样比例(默认是以估算模式进行收集)
4、需要对哪些列收集直方图统计信息以及相应的Bucket 的数量。
5、是否启用并行收集以及相应的并行度。
当然使用oracle自动收集统计信息,必须要确保oracle的参数statistics_level的值为:TYPICAL或者 ALL
1. 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';
2. 查看job
select client_name,status from dba_autotask_client;
3. 禁用自动收集
exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
4. 启用自动收集
exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
查看表的统计信息是否过期
SELECT owner,
table_name,
object_type,
stale_stats,
last_analyzed
FROM dba_tab_statistics
WHERE owner = '&OWNER'
AND table_name = '&TABLE_NAME';
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30327022/viewspace-2136048/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30327022/viewspace-2136048/