首页 » ORACLE 9i-23ai » Query dba_autotask_client slow?
Query dba_autotask_client slow?
最近在整理巡检脚本时,发现在执行select client_name,status from dba_autotask_client;时耗时几十秒, 该SQL只是想检查数据库级的自动任务是否启用(如自动收集统计信息), 返回的记录也并不多,只关心状态,如下输出.
SQL> select client_name,status from dba_autotask_client; CLIENT_NAME STATUS ---------------------------------------------------------------- -------- sql tuning advisor ENABLED auto optimizer stats collection ENABLED auto space advisor ENABLED
但是细看执行计划其实涉及的对象较多, 使用sqlmonitor可以明确,执行时间90%+是花在SCHEDULER$_EVENT_LOG的FULL TABLE SCAN, 刚好这个库有近200个JOB or scheduler 所以日志非常大,该表记录近150万, 可以使用下面的方法清理JOB 日志。
exec DBMS_SCHEDULER.PURGE_LOG(); -- or -- truncate table sys.scheduler$_event_log;
所以如果只是需要上面的查询结果可以使用VIEW 定义中的部分SQL:
SELECT C.CNAME_KETCL, DECODE(dbms_auto_task.get_client_status_override(CR.CLIENT_ID), 1, 'DISABLED', decode(CR.STATUS, 2, 'ENABLED', 1, 'DISABLED', 'INVALID')) AS STATUS FROM X$KETCL C, KET$_CLIENT_CONFIG CR WHERE C.CID_KETCL = CR.CLIENT_ID AND CR.OPERATION_ID = 0 AND C.CID_KETCL > 0 AND (BITAND(C.ATTR_KETCL,2048) = 0 OR 999999 < (SELECT TO_NUMBER(VALUE) FROM V$SYSTEM_PARAMETER WHERE NAME = '_automatic_maintenance_test')) Plan hash value: 864851597 ---------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| OMem | 1Mem | Used-Mem | ---------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 2 (100)| | | | |* 1 | HASH JOIN | | 3 | 96 | 2 (0)| 1236K| 1236K| 547K (0)| |* 2 | FIXED TABLE FULL | X$KETCL | 4 | 96 | 0 (0)| | | | |* 3 | HASH JOIN | | 1 | 56 | 1 (100)| 1098K| 1098K| 425K (0)| |* 4 | FIXED TABLE FIXED INDEX | X$KSPPI (ind:1) | 1 | 38 | 0 (0)| | | | | 5 | FIXED TABLE FULL | X$KSPPSV | 5440 | 97920 | 1 (100)| | | | | 6 | TABLE ACCESS BY INDEX ROWID BATCHED| KET$_CLIENT_CONFIG | 6 | 48 | 2 (0)| | | | |* 7 | INDEX RANGE SCAN | KET$_CL_PK | 6 | | 1 (0)| | | | ----------------------------------------------------------------------------------------------------------------------------
这样执行就可以秒级返回了。
对不起,这篇文章暂时关闭评论。