【Oracle】11g Oracle自动收集统计信息

在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';




请使用浏览器的分享功能分享到微信等