Oracle提供了统计数据自动收集功能。在部署安装软件过程中,其中有一个步骤便是提示是否启用这个功能(默认是启用这个功能)。这个功能貌似带来了统计数据采集上的便捷,但是其中却隐藏着性能隐患。在7*24小时的系统中这种自动运行的任务很有可能对系统性能带来冲击。因此,我们酌情需要修改或是禁掉这项功能。10g和11g的处理方法有所不同,以下分别阐述。
一、针对Oracle 10g的处理方法
1、自动统计作业的查询
Oracle 10g版本中,自动统计的job名为GATHER_STATS_JOB,这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启,它调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级,再开始进行统计。
下面是在10g中查看自动收集统计作业的方法:
col program_name for a30
col schedule_name for a30
col last_run_duration for a30
select owner, job_name, program_name, schedule_name, job_class, enabled, auto_drop, run_count, to_char(last_start_date, 'yyyy-mm-dd hh24:mi:ss') last_start_time, last_run_duration, state from dba_scheduler_jobs where job_name = 'GATHER_STATS_JOB';
OWNER JOB_NAME PROGRAM_NAME SCHEDULE_NAME JOB_CLASS ENABL AUTO_ RUN_COUNT LAST_START_TIME LAST_RUN_DURATION STATE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ----- ----- ---------- ------------------- ------------------------------ ---------------
SYS GATHER_STATS_JOB GATHER_STATS_PROG MAINTENANCE_WINDOW_GROUP AUTO_TASKS_JOB_CLASS TRUE FALSE 29 2017-01-28 06:00:05 +000000000 00:00:38.535000 SCHEDULED
以下查看自动收集统计作业的历次运行明细,该表会保留最近一个月的记录:
col owner for a10
col job_name for a20
col status for a10
col run_duration for a20
col session_id for a10
col cpu_used for a20
select owner, job_name, status, to_char(actual_start_date, 'yyyy-mm-dd hh24:mi:ss') actual_start_time, run_duration, session_id, cpu_used
from dba_scheduler_job_run_details where job_name = 'GATHER_STATS_JOB' order by actual_start_date desc;
即便作业被删除,我们仍可以通过log记录查看作业的历史运行情况:
col owner for a10
<