Oracle 使用resultset上的ojdbc6 getMetaData()时,sql';已执行,但在ojdbc5中看不到这一点

Oracle 使用resultset上的ojdbc6 getMetaData()时,sql';已执行,但在ojdbc5中看不到这一点,oracle,jdbc,metadata,Oracle,Jdbc,Metadata,我们对从oracle存储过程调用返回的每个游标使用getMetaData() 有了ojdbc5,我们执行的元数据sql的数量和平均时间不会出现峰值。但在ojdbc6中,我们看到执行的元数据sql数量激增,平均sql执行时间增加 是否有人知道或意识到ojdbc6存在此问题。。希望他们能把它开源 至少有人在任何时候尝试过反编译ojdbc6 jar吗?问题在于Spring的SimpleJDBCall的工作方式,它为everycall获取过程的元数据及其参数。即使他们不应该缓存它,也应该有一个设置,在使

我们对从oracle存储过程调用返回的每个游标使用getMetaData()

有了ojdbc5,我们执行的元数据sql的数量和平均时间不会出现峰值。但在ojdbc6中,我们看到执行的元数据sql数量激增,平均sql执行时间增加

是否有人知道或意识到ojdbc6存在此问题。。希望他们能把它开源


至少有人在任何时候尝试过反编译ojdbc6 jar吗?

问题在于Spring的SimpleJDBCall的工作方式,它为everycall获取过程的元数据及其参数。即使他们不应该缓存它,也应该有一个设置,在使用SimpleJDBCall时启用和禁用元数据缓存


使用SimpleJDBCall时。。。当心发生的元数据争用。。如果您的应用程序有太多的pl/sql过程调用,那么oracle可能会发生闩锁争用,因此整个应用程序将变慢,因为这会导致瓶颈。。。服务器甚至崩溃,导致应用程序无响应。通过跳入spring代码添加一个小缓存,并设置一个标志来启用/禁用。。。Tadaannggg。。它的运行速度比以往任何时候都快。

你能通过查询V$SQL来判断它在做什么吗?我们对它进行了反编译,发现对于每一个过程调用,getMetadata都会执行两个SQL执行(一个用于proc相关的元,另一个用于proc的参数)…我们甚至有跟踪文件,看起来它是使用元数据的通用dao编程的致命组合。。。这里的杀手是Spring+Ojdbc。。。是的,我知道每个人都在使用spring,但没有人注意到这一点。是否存在不使用元数据的通用dao程序。