2024年5月30日发(作者:)

ORACLE10g自动收集CBO统计信息

从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为

GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。

这个特性减少了由于sql语句统计失效或陈旧而导致性能很差的可能性,通过提高查询

优化器的最佳的输出提高sql执行的性能.

gather_stats_job

默认的,在数据库创建的时候就创建了gather_stats_job,执行

dbms__database_stats_job_proc过程,使用schedular.

默认的定义了两个窗口.

weekenight_window定义在下午10点到上午六点.从周一到周五.

weekend_window定义从上午12点到周一12点.

调用DBMS__DATABASE_STATS_JOB_PROC收集统计信息。

该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级,再开始进行统计信息。

说明:当做完统计信息后,如果对对象的行数修改达到10%,DBMS_STATS就认为

是统计信息过旧。

可以通过以下查询这个JOB的运行情况:

SQL> select * from Dba_Scheduler_Jobs where JOB_NAME

='GATHER_STATS_JOB'

其实同在10点运行的Job还有一个AUTO_SPACE_ADVISOR_JOB:

SQL> select JOB_NAME,LAST_START_DATE from dba_scheduler_jobs;

JOB_NAME LAST_START_DATE

------------------- ----------------------------------------

AUTO_SPACE_ADVISOR_JOB 04-DEC-07 10.00.00.692269 PM +08:00

GATHER_STATS_JOB 04-DEC-07 10.00.00.701152 PM +08:00

FGR$AUTOPURGE_JOB

PURGE_LOG 05-DEC-07 03.00.00.169059 AM PRC

默认的maintenance_window_group组包含这两个窗口.

gather_stats_job使用特定的计划任务叫auto_tasks_job_class.这个类是自动创建的,

而且跟特定的资源组联系,这个组 叫做auto_task_consumer_group.这样确保任务使用

auto_task_consumer_group.如果想控制 gather_stats_job的资源使用,之需要为