我有两个来自v $ sqlarea的查询。例如
查询1:select * from employee emp where emp.eid = 5
查询2:select * from employee v where v.eid = 15
两者在结构上完全相同。但每次都会单独编译..
我需要匹配仅由别名或绑定变量变化的查询。
oracle中的内置函数utl_match.jaro_winkler_similarity()
提供了一个非常好的字符串匹配算法。但是没有提供sql透视匹配。还有其他解决方案吗?
答案 0 :(得分:1)
有一个script on Asktom可以找到这种语句(语句不使用绑定)。
最后一个查询的输出将显示共享中相同的语句 删除所有数字和字符串常量后的池。这些 声明 - 更重要的是它们的数量 - 是潜在的瓶颈。在 除了引起争用外,他们将成为巨大的cpu消费者。
答案 1 :(得分:1)
Oracle实际上在内部执行此操作,以支持cursor_sharing = similar
。我不知道他们在任何地方公开这个功能。
答案 2 :(得分:0)
别名是一个棘手的问题。您可以查找具有相同PLAN_HASH_VALUE作为起点的SQL。