awr中sql execute to parse比例在「instance efficiency percentages」部分直接显示为“execute to parse %”,健康值应≥95%;低于90%表明绑定变量使用不佳,需结合v$sql中bind_mismatch、child_number及sql_text分析根因。
awr里怎么看sql execute to parse比例
这个比例在awr报告的「instance efficiency percentages」部分直接给出,不是要你手动算。它等于 100 * (parse count (total) - parse count (hard)) / executions,但oracle自己算好放在报告里了——关键看那个百分比数字本身是否长期低于90%(健康线通常建议≥95%)。
注意:报告里显示的是「Execute to Parse %」,数值越低说明软解析/硬解析占比越高,绑定变量没用好。别被名字误导,“Execute to Parse”不是执行一次再解析一次,而是「每执行N次,才解析1次」的倒推表达。
- 查路径:生成AWR报告后,Ctrl+F搜
Execute to Parse %,定位到「Instance Efficiency Percentages」表格 - 别只看单次报告:连续3–5天同一时段的报告对比更可靠,避免把偶发硬解析当常态
- 如果该值
从AWR Top SQL里揪出未绑定变量的罪魁祸首
「SQL ordered by Parse Calls」和「SQL ordered by Executions」两个列表要对照着看。真正危险的是那些「Parse Calls高 + Executions也高」的SQL——说明它被反复硬/软解析,又高频执行,绑定变量缺失最典型。
重点盯住 PARSE_CALLS 和 EXECUTIONS 两列的比值:如果 PARSE_CALLS / EXECUTIONS > 0.1(即每10次执行就解析1次以上),基本可判定没绑定变量。
- 在AWR报告中翻到「SQL Statistics」→「SQL ordered by Parse Calls」,记下前5条的
SQL_ID - 用这个
SQL_ID去查v$sql:SELECT sql_text, child_number, bind_mismatch, bind_equiv_failure FROM v$sql WHERE sql_id = 'xxx';
- 如果
bind_mismatch = 'Y'或child_number > 10,大概率是绑定变量未复用(比如用了不同长度的字面量字符串) - 特别警惕
sql_text里带WHERE id = 123这种硬编码值的,而不是WHERE id = :b1
为什么用了绑定变量还被重复解析?常见坑点
不是写了 :b1 就万事大吉。Oracle对绑定变量的“等价性”判断很严格,稍有差异就会另起子游标,导致软解析变硬解析或子游标爆炸。
- 字符串长度不一致:
:b1 VARCHAR2(10)和:b1 VARCHAR2(20)被视为不同绑定,哪怕传的都是'abc' - 隐式类型转换:SQL里写
WHERE status = :b1,但应用传的是数字1,而字段是VARCHAR2,触发隐式转换,子游标分裂 - 游标共享被禁:检查
cursor_sharing参数是否为EXACT(默认),设成SIMILAR或FORCE是临时缓解手段,但治标不治本 -
SESSION_CACHED_CURSORS太小:游标缓存不够,刚软解析完就被踢出,下次还得重新找
验证修复效果不能只看比例数字
改完代码加了绑定变量,AWR里 Execute to Parse % 上去了,不代表问题真解决。得确认子游标数降下来、硬解析减少、且业务逻辑没出错。
- 上线后立刻查
v$sql:SELECT sql_id, child_number, executions, parse_calls FROM v$sql WHERE sql_id = 'xxx';
—— 如果child_number从几十降到1–3,才算有效 - 对比硬解析次数:
SELECT name, value FROM v$sysstat WHERE name LIKE '%parse%hard%';,观察单位时间增量是否明显下降 - 留意
library cache lock或latch: shared pool等等待事件是否同步减少,这是绑定变量起效的间接证据 - 最麻烦的是:有些SQL逻辑上就不能用绑定变量(比如动态IN列表、分区键范围),这类得单独评估,不能硬套
绑定变量不是银弹,它和SQL结构、数据分布、应用传参方式死死绑在一起。看到比例低,第一反应不该是“加冒号”,而是先问一句:这SQL到底被谁、怎么调的?










