2013-07-02 101 views
0

我是一名DBA,而不是開發人員,可以使用一些洞察力。開發人員正在使用VB.NET創建連接到DB2數據庫的基於Web的應用程序。請假定web.config文件中的連接字符串編碼正確。VB.NET和孤立連接的連接池

我可以看到來自Web服務器的孤立連接的數量隨着時間而增長。通過孤兒我的意思是沒有任何活動與連接數小時,但我可以看到其他連接創建和銷燬每隔幾秒鐘。

我懷疑連接沒有正確關閉,但是有兩個不同的小組正在查看這個問題,但到目前爲止還沒有發現任何問題。到一天結束時,我可以擁有數百個這樣的連接 - 當應用程序池每晚重置時,所有這些連接都會被清除。 (這意味着它不是一個數據庫問題)

有沒有一種編碼技術,以確保在IIS v7 +上使用vb.net關閉連接? 我在IIS上看到了另一個問題的症狀嗎?

+0

在代碼中未正確釋放的任何連接都將保持打開狀態,直到用戶的[會話超時](http://msdn.microsoft.com/zh-cn/library/system.web.sessionstate.httpsessionstate.timeout的.aspx)。如果你縮短了過多的話,人們就會變得脾氣暴躁,但作爲一種測試,你可以縮短這個時間,以證明在代碼中放棄了那些討厭的VB人員需要根除的開放連接。當應用程序池重置時(如果他們使用默認會話方法),每個人的會話都可能會超時。 – DOK

+0

以我的經驗,其他最常見的罪魁禍首是濫用DataReaders(流水遊標)。這些必須手動[在代碼中關閉](http://msdn.microsoft.com/en-us/library/haa3afyz%28v=vs.110%29.aspx)。 – DOK

+0

最後,您可能還會在姐姐[DBA站點](http://dba.stackexchange.com/)上找到一些專家指導 – DOK

回答

0

你需要有開發人員實現了Dispose模式,這是由VB.NET的Using聲明推動,像這樣的(這是相關的SQL服務器,但無論連接對象,你正在使用DB2應該工作以及):

Using theConnection As New SqlConnection() 
    '' Command, parameter logic goes here 

End Using 

通過包裝一個Using塊內部的連接對象,這將保證該連接被關閉並正確設置的存儲器,明智的,即使在Using塊內的代碼的異常。

聲音就像代碼審查是爲了誰負責開發人員。

+0

我正在讓開發者研究這個問題,到目前爲止他們還沒有在代碼中找到任何東西。搜索繼續... – Doug