Oracle自动收集统计信息JOB总是失败,原因大都因为数据量较大,在预计的时间窗口内统计信息未收集完毕。[@more@]
1、查看JOB运行状态
SELECT LOG_ID, JOB_NAME, STATUS, ADDITIONAL_INFO
FROM DBA_SCHEDULER_JOB_LOG
WHERE JOB_NAME = 'GATHER_STATS_JOB'
ORDER BY 1
ADDITIONAL_INFO原因基本为:REASON="Stop job called because associated window was closed"
2、查看下dbms_stats默认的参数设定
SELECT SNAME AS PARAMETER, NVL(SPARE4, SVAL1) AS DEFAULT_VALUE
FROM SYS.OPTSTAT_HIST_CONTROL$
3、用如下命令可以调整一下参数设定
SQL> execute dbms_stats.set_param(pname => 'CASCADE', pval =>'TRUE');
eg:
SQL> execute dbms_stats.set_param(pname => 'DEGREE', pval =>2);
SQL> execute dbms_stats.set_param(pname => 'ESTIMATE_PERCENT', pval =>2);
4、其它说明
GATHER_STATS_JOB默认ESTIMATE_PERCENT是AUTO,由ORACLE自动选取大小,在实际中这个选取的基本是100%,如果数据量大,在规定的时间窗口自然收集不完。经过上面的参数调整实际观测可以很好解决问题。
SELECT LOG_ID, JOB_NAME, STATUS, ADDITIONAL_INFO
FROM DBA_SCHEDULER_JOB_LOG
WHERE JOB_NAME = 'GATHER_STATS_JOB'
ORDER BY 1
ADDITIONAL_INFO原因基本为:REASON="Stop job called because associated window was closed"
2、查看下dbms_stats默认的参数设定
SELECT SNAME AS PARAMETER, NVL(SPARE4, SVAL1) AS DEFAULT_VALUE
FROM SYS.OPTSTAT_HIST_CONTROL$
3、用如下命令可以调整一下参数设定
SQL> execute dbms_stats.set_param(pname => 'CASCADE', pval =>'TRUE');
eg:
SQL> execute dbms_stats.set_param(pname => 'DEGREE', pval =>2);
SQL> execute dbms_stats.set_param(pname => 'ESTIMATE_PERCENT', pval =>2);
4、其它说明
GATHER_STATS_JOB默认ESTIMATE_PERCENT是AUTO,由ORACLE自动选取大小,在实际中这个选取的基本是100%,如果数据量大,在规定的时间窗口自然收集不完。经过上面的参数调整实际观测可以很好解决问题。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/717880/viewspace-1060061/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/717880/viewspace-1060061/