发现一个导致Oracle自己的低效SQL,在AWR报告中占用较大的资源。
这个SQL在Elapsed Time、CPU Time、User I/O Wait Time、Buffer Gets、Physical Reads都会出现,其SQL模块是Oracle Enterprise Manager.Metric Engine。显然这是一个OEM自己的SQL,检查完整SQL语句:
SELECT TO_CHAR(current_timestamp AT TIME ZONE 'GMT', 'YYYY-MM-DD HH24:MI:SS TZD') AS curr_timestamp, COUNT(username) AS failed_count FROM sys.dba_audit_session WHERE returncode != 0 AND TO_CHAR(timestamp, 'YYYY-MM-DD HH24:MI:SS') >= TO_CHAR(current_timestamp - TO_DSINTERVAL('0 0:30:00'), 'YYYY-MM-DD HH24:MI:SS')
这个检查DBA_AUDIT_SESSION的SQL语句写法很烂,以致于一开始我还不太相信是出自Oracle,不过Oracle Enterprise Manager.Metric Engine的MODULE NAME已经说明了问题,Oracle居然自己违反对列进行操作以及不必要的转换原则。
此外,这个SQL基本上没有办法使用索引,如果DBA_AUDIT_SESSION中记录很多,那么这个SQL会非常耗时,这就是不算是OEM的bug,至少也是一种设计缺陷。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-709177/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-709177/