1

我有两个来自 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 透视匹配。还有其他解决方案吗?

4

3 回答 3

1

Asktom 上有一个脚本可以准确找到这种语句(使用绑定的语句)。

在删除所有数字和字符串常量后,最后一个查询的输出将显示共享池中相同的语句。这些陈述——更重要的是它们的数量——是潜在的瓶颈。除了引起争用之外,他们还将是巨大的 cpu 消费者。

于 2009-11-03T11:37:23.007 回答
1

Oracle 实际上在内部执行此操作,以支持cursor_sharing = similar. 我不知道他们在任何地方都公开了这个功能。

于 2009-11-03T11:37:45.530 回答
0

别名是一个棘手的名称。您可以寻找具有相同 PLAN_HASH_VALUE 作为起点的 SQL。

于 2009-11-03T21:59:00.533 回答