通过系统监控平台告警发现数据库的Library Hit %命中率很低


查看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中造出了不存在的表名。
该问题解决后,命中率恢复正常。


至此问题定位完成。
09-23 14:20