2017-10-07 139 views
0

我们有一个使用ODP.Net从ASP MVC页面连接到oracle数据库的网页。在应用程序池因任何原因而回收的情况下,如果用户负载过重,则会比内部oracle类中的连接超时错误少。C#应用程序池回收时连接超时到oracle数据库

内部异常:堆栈跟踪:在OracleInternal.ConnectionPool.PoolManager`3.Get(的ConnectionString csWithDiffOrNewPwd,布尔bGetForApp,字符串affinityInstanceName,布尔bForceMatch)

我们如何处理这种情况?可能是这个错误的原因是什么?

+0

我不认为这与应用程序池回收有关。问题是你已经达到最大池大小。很可能您忘记在代码中的某个地方关闭连接,导致连接没有返回到池以满足其他请求,或池的大小太小 –

+0

当您忘记关闭连接时,连接将最终关闭,但它仅在GC收集这些对象时才会发生。因此,有很多连接不会长时间返回到池中,并且会导致达到最大池大小。 –

+0

我正在使用USING块进行连接,因此连接正在关闭。这个问题有时只会发生,如果连接没有关闭,我们应该经常看到它? – Zeus

回答

0

如果您使用的连接字符串每个用户或其他变量参数都不相同,则可以超出最大连接数。只有使用完全相同的字符串时,共用池才有效。在封面下,您的“关闭”会被忽略,连接管理器会保持连接打开。在SQL Server中,每次重用现有连接时,都可以在跟踪控制台中看到连接重置。

Oracle可能有类似的东西。

跟踪您的连接和可能的连接重置很可能会对创建这么多连接的内容有所了解。

+0

与web.config相同的连接字符串 – Zeus

相关问题