2017-10-07 89 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

相關問題