使用Oracle的ODP.NET库,我正在处理的应用程序需要执行两种不同类型的查询,其中一种类型可能相对较慢,但另一种类型的查询速度要快。我继承的当前应用程序代码完全禁用连接池,并为“快速”查询保留特定的连接对象,这对于此目的非常有用,因为如果第一次调用的时间超过X毫秒,我们就可以切换到另一个打开的连接,提醒用户如果第二次通话不够快,数据没有足够快地返回。单个连接的ODP.NET连接池关闭?
与此同时,更改连接字符串以启用池化操作后,我们运行的常规查询返回的速度要快得多,因此使用池化查询会更好。
有没有一种方法可以为大多数目的启用池,但禁用它的特定连接对象?或者它会更容易一些(因为我们已经有了基本的代码来为关键查询“汇集”两个连接)来扩展现有的代码,以通过一般查询的连接对象的小集合进行轮换,并保持两个其他连接分开对于更关键的查询?
我认为你并不是想通过烟雾来取代火焰。在连接对象之间切换会导致代码难以理解,并且该解决方案会增加代码的复杂性(维护这些连接)。在一个项目中,我们发现计算执行计划花了很长时间,我们认为应该将这些执行计划存储到数据库中,几周后我们意识到左外连接是慢查询和消除这些问题的真正原因。 – Mino
现有的代码在任务内部运行查询,因此使用不同的连接运行另一个任务很容易通过简短的'//过了很长时间,再次尝试不同的连接'来解释。就实际查询而言,我无法以任何方式对其进行优化,幸运的是,它通常返回的速度比我们的阈值快大约10倍。如果没有,我们使用新连接从群集中获取响应相同TNS名称的空闲服务器(根据DBA强大的“建议”),这通常可以解决问题。 – Amazingant
您是否检查过此网站? http://www.oracle.com/technetwork/issue-archive/2006/06-jul/o46odp-097508。html – Mino