查看AWR报告发现:
每秒解析次数只有5.4
每秒硬解析次数达到928.4
Library Hit %: 71.16 Soft Parse %: -17,006.07
软解析比例完全溢出。
检查系统的解析次数统计发现大量的parse count (failures)
select * from v$sysstat where name like 'parse%';
STATISTIC# NAME CLASS VALUE STAT_ID
---------- ----------------------------------- ---------- ---------- ----------
581 parse time cpu 64 477065 206905303
582 parse time elapsed 64 4197686 1431595225
583 parse count (total) 64 1236743 63887964
584 parse count (hard) 64 144019327 143509059
585 parse count (failures) 64 143996658 1118776443
586 parse count (describe) 64 359 469016317
在v$session不时的出现一个活动会话,等待事件为如下2个:
cursor: pin S wait on X
kksfbc child completion
该SESSION执行的SQL在v$sql中并未查询到,怀疑是语法错误,sql语句并没有执行。
解析错误最常出现的字段不存在(ORA-00904)或表不存在的错误(ORA-00942)
检查应用日志,果然发现大量ORA-00942的错误。
原因是程序拼SQL语句时,在SQL中造出了不存在的表名。
该问题解决后,命中率恢复正常。
至此问题定位完成。