可通过SQL语句查询Oracle的软解析率,软解析率计算公式为:1-(硬解析次数/总解析次数)。软解析率若低于0.2,可能表示硬解析率过高,但若总解析量过低,则该值可忽略。软解析率低通常意味着有较多不能被共享利用的SQL语句,可通过查询v$sqlarea视图找出执行次数偏低的SQL语句,分析原因。查询v$sqlarea视图的SQL语句如下:SELECT sql_text FROM v$sqlarea WHERE executions < 5 ORDER BY UPPER(sql_text);同时,对比SQL执行次数和硬解析次数,查询v$sqlarea的语句如下:SELECT sql_text, parse_calls, executions FROM v$sqlarea ORDER BY parse_calls;检查v$librarycache视图的Reloads和Invalidations值,接近0表示良好,否则应考虑调整shared pool size。查询v$librarycache视图的SQL语句如下:SELECT namespace, gethitratio, pinhitratio, reloads, invalidations FROM v$librarycache;检查gethitratio是否超过90%,如果未超过90%,则应检查应用代码。如果reloads/pins比率超过1%,应考虑增加shared_pool_size参数值。软解析率低可能因Library Cache空间不足或SQL语句中引用的对象不合法,需要通过调整Library Cache优化。可使用v$shared_pool_advice查询建议的pool_size、estd_lc_size和estd_lc_time_saved。如果问题不在Library Cache,需要优化SQL程序。优化方法包括使用变量而非常量,以及修改cursor_sharing参数为similar以使用绑定变量。