我們在使用SQL Express運行並處理多個併發的基於AJAX的請求的MVC3 Web應用程序上遇到與Nhibernate有關的連接池問題。Nhibernate連接池問題
每隔一段時間(小時之間),我們開始看到它的錯誤顯示:
NHibernate.Util.ADOExceptionReporter
超時過期。在從池中獲取連接之前已超時。發生這種情況的原因可能是因爲所有連接池都在使用中,並且達到最大池大小。
然後在準備選擇TOP(@ P0)
....
發生錯誤
我們必須回收IIS應用程序池的
負荷在此之後停止引發500個錯誤。
縱觀SQL服務器,我們看到:
select * from sys.dm_exec_sessions
...給約30會話使用標識上面51(即用戶會話)
select * from sys.dm_exec_connections
...給周圍的相同數額
BUT
select @@connections
...給出結果79022
這是否表明連接永不釋放?
Nhibernate會話是請求的整個生命週期。
有沒有人有這樣的經驗或可以指出我們在正確的方向嗎?
非常感謝
理查德
+1關於釋放連接;檢查爲每個請求分配和釋放會話的代碼,並確保您正確地處理會話。 –
@理查德:謝謝你的接受。我會對你在調查中發現的內容感興趣 – gbn
我發現我必須將連接池數從100增加到200,並且此後不再有這些錯誤。因爲我相信該應用程序不應該需要這麼多,但嘿,不是完全滿意。有用。 – Richard