查询未使用绑定变量的SQL,硬解析SQL语句
-- 查看oracle中未使用绑定变量的sql语句 -- 原理:利用V$SQL 视图的 FORCE_MATCHING_SIGNATURE 字段可以识别可能从绑定变量或 CURSOR_SHARING 获益的 SQL 语句。 -- 如果 SQL 已使用绑定变量或者 CURSOR_SHARING ,那么 FORCE_MATCHING_SIGNATURE 在对其进行标识时将给出同样的签名。 -- 换句话说,如果两个 SQL语句除了字面量的值之外都是相同的,它们将拥有相同的 FORCE_MATCHING_SIGNATURE , -- 这意味着如果为它们提供了绑定变量或者CURSOR_SHARING ,它们就成了完全相同的语句。 -- 所以,使用 FORCE_MATCHING_SIGNATURE 字段可以识别没有使用绑定变来的 SQL 语句。 -- Oracle在解析SQL语句的时候,如果在共享池中发现匹配的SQL语句,就可以避免掉解析的大部分开销。 -- 在共享池中找到匹配的SQL语句所对应的解析被称为软解析(soft parse)。如果没有找到匹配的SQL语句,则必须进行硬解析(hard parse)。 -- 硬解析不仅耗费CPU时间,在有大量会话想要同时缓存SQL语句到共享池时还会造成争用。通过使用绑定变量,可以最小化解析的代价。 -- 1.CURSOR_SHARING参数 -- 该参数转换SQL语句中的字面值到绑定变量。转换值提高了游标共享,且可能会影响SQL语句的执行计划。优化器是基于绑定变量的存在生成执行计划,而不是实际字面量值。 -- CURSOR_SHARING决定什么类型的SQL语句可以共享相同的游标。CURSOR_SHARING参数有三个值: -- FORCE:只要有可能,字面量就会被替换为绑定变量。 -- SIMILAR:只有当替换不会影响到执行计划时,才会将字面量替换为绑定变量 -- EXACT:这是默认值。不将字面量替换为绑定变量。 -- 注意:不推荐修改CURSOR_SHARING参数的默认值。如果实在无法修改现有应用的代码,可以通过设置CURSOR_SHARING参数来指示Oracle透明地将字面量替换为绑定变量。
复制
set line 300 pages 90 col SQL_TEXT for a90 col PARSING_SCHEMA_NAME for a10 set numw 19 col RANKING for 99999 with force_mathces as (select l.force_matching_signature mathces, max(l.sql_id || l.child_number) max_sql_child, dense_rank() over(order by count(*) desc) ranking,count(*) a from v$sql l where l.force_matching_signature <> 0 and l.parsing_schema_name <> 'SYS' group by l.force_matching_signature having count(*) > 10) select v.sql_id, v.sql_text, v.parsing_schema_name, fm.mathces, fm.ranking,v.force_matching_signature,fm.a from force_mathces fm, v$sql v where fm.max_sql_child = (v.sql_id || v.child_number) and fm.ranking <= 200 order by fm.ranking;
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
66
2年前

评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
802次阅读
2025-04-18 14:18:38
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
602次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
551次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
538次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
512次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
503次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
474次阅读
2025-04-17 09:30:30
OR+DBLINK的关联SQL优化思路
布衣
387次阅读
2025-05-05 19:28:36
Oracle数据库Hint大全,31个使用案例,速来下载!
陈举超
371次阅读
2025-04-16 21:25:19
Oracle19C低版本一天遭遇两BUG(ORA-04031/ORA-00600)
潇湘秦
337次阅读
2025-04-16 17:05:16
热门文章
Oracle password 密码策略 密码复杂度
2020-06-24 9768浏览
python paramiko 设置远程ssh执行命令超时限制
2021-06-22 9752浏览
library cache lock 原因及解决方案
2021-05-10 7478浏览
linux Oracle修改ORACLE_SID、修改DB_NAME,修改实例名,服务名
2020-05-31 6133浏览
使用SecureCRT开启图形化界面功能,在Windown显示Linux服务器图形化界面
2020-06-20 5892浏览
最新文章
人大金仓 安装报错ArrayIndexOutOfBoundsException
2025-02-07 78浏览
CRS-42216: No interfaces are configured on the local node for interface definition ib1(:.*)?:10.10.1
2024-08-02 187浏览
opengauss数据库初始化报错:[GAUSS-51607] : Failed to start instance. Error: Please check the gs_ctl log for failure details.
2024-03-05 668浏览
“Oracle_tns_listener远程投毒”故障诊断
2023-11-30 870浏览
ORA-01873 故障处理
2023-11-30 2272浏览