首页 > 数据库 > Oracle > oracle 11g自动收集统计信息介绍
对于oracle而言,准确的统计信息对于CBO来说是非常重要的,因为这直接关系到CBO能否对目标SQL生成合适的、正确的执行计划。所以我们应该使自己维护的数据库中的统计信息尽量准确。
在oracle 10g之前并没有自动收集统计信息的机制,对统计信息的收集一般都是由DBA手工编写SHELL脚本来实现。这样就会出现根据表或者其他对象的变更,需要频繁的变更SHELL脚本来适应数据库对象的变更。另外,可能很多DBA没有意识到统计信息对优化器的重要性,导致很多的SQL无法得到正确的执行计划。
基于统计信息对CBO的重要性,所以oracle从10g版本开始引入了自动收集统计信息的功能。自动统计信息收集作业能够每天收集统计信息。默认情况下,该收集作业会自动判断如下方面的内容。
1、需要对哪些对象收集统计信息。
2、需要对哪些统计信息已经过期的对象重复收集统计信息。
3、以估算模式收集统计信息的采样比例(默认是以估算模式进行收集)
4、需要对哪些列收集直方图统计信息以及相应的Bucket 的数量。
5、是否启用并行收集以及相应的并行度。
当然使用oracle自动收集统计信息,必须要确保oracle的参数statistics_level的值为:TYPICAL或者 ALL 。
现在我们详细介绍一下oracle11g中的自动统计信息收集作业的详情:
oracle 11g 引入了一个名为gather_stats_prog的自动运行任务专门用于收集统计信息。
SELECT t.CLIENT_NAME, t.TASK_NAME, t.OPERATION_NAME, t.STATUS
FROM dba_autotask_task t;
gather_stats_prog实际上也是调用了dbms_stats包里面的存储过程dbms_stats.gather_database_stats_job_proc:
SELECT t.PROGRAM_NAME
FROM dba_scheduler_programs t
where t.PROGRAM_NAME = 'GATHER_STATS_PROG';
oracle 11g的自动统计信息收集作业可配置的维护窗口从10g 的2个增加到了7个,具体的维护窗口可以根据下面SQL语句查看:
SELECT t.WINDOW_NAME,t.AUTOTASK_STATUS FROM dba_autotask_window_clients t ;
可以根据下面的SQL看到每个收集统计信息的维护窗口的执行开始时间和每次执行的持续时间,通过该视图中的RESOURCE_PLAN字段可以看出oracle在收集统计信息的过程中添加了资源的限制:
SELECT t.WINDOW_NAME, t.REPEAT_INTERVAL, t.duration, t.enabled,t.RESOURCE_PLAN
FROM dba_scheduler_windows t
where enabled = 'TRUE';
自动运行任务GATHER_STATS_PROG每次运行的时候都会先 生成名为ORA$AT_OS_OPT_XXX 的作业,然后再执行这个作业,从视图dba_scheduler_job_run_details 中可以看到具体的执行信息,
相关的查询SQL和执行结果 如下:
SELECT a.job_name, a.actual_start_date, a.status
FROM (SELECT *
FROM dba_scheduler_job_run_details t
where t.JOB_NAME like 'ORA$AT_OS_OPT_%'
order by t.LOG_DATE desc) a
where rownum <= 4;
从上图 我们可以看出最近今天的自动收集统计信息作业实际执行时间和是否执行成功。另外 我们也可以根据oracle 提供的脚本$ORACLE_HOME/rdbms/admin 下的catmwin.sql脚本中看到 统计信息收集作业的整体搭建流程。有兴趣的同学可以研究下此脚本的内容。
我们来总结一下oracle 11g中的自动统计信息收集的特点。
(1)oracle 11g 中的自动统计信息收集作业每天自动运行任务gather_stats_prog来实现,每次运行的时候会先 生成名为 ORA$AT_OS_OPT_XXX的作业,然后再执行这个作业来自动收集统计信息,其本质也是执行DBMS_STATS 包里的存储过程 gather_database_stats_job_proc。
(2)oracle 11g 中的自动统计信息收集作业的可维护窗口有7个,窗口的名字分别是从周一到周日的英文名字。
(3)在11g 的版本中添加了对7个维护窗口的资源控制,其对应的Resource Plan 的名称为DEFAULT_MAINTENANCE_PLAN。
---fdh
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28211342/viewspace-2141345/ ,如需转载,请注明出处,否则将追究法律责任。