2008-12-05 40 views
3

我以前有過這個問題,發現基本上我有一個連接,我沒有足夠快地關閉(讓連接打開並等待垃圾收集並不是最佳實踐)。如何找到未關閉的連接?超時過期。操作完成之前超時時間已過或服務器沒有響應

現在我再次得到它,但我似乎無法找到我將我的連接打開的位置。當時看到錯誤數據庫已經清除了舊的連接,所以我看不到所有鎖定連接的最後一個命令(非常有幫助,我上次有這個問題)。

任何想法如何我的儀器我的代碼或數據庫來跟蹤發生了什麼,所以我可以找到我的違規的一段代碼?

+0

你能提供更多的信息嗎?語言?數據庫類型?平臺? – 2008-12-05 18:02:27

回答

1

您提供的錯誤並不真正指向一個打開的連接;更有可能是有一個查詢需要比應用程序預計更長的時間。 您可以增加等待響應的時間,並且您可以使用Sql來查找哪些查詢是最重要的。

0

希望你有一個數據訪問層類,而不是一大堆類,每個類創建自己的連接,對吧?你在用什麼語言?如果您使用C#,這個問題的最大原因是DataReaders並將這些對象返回到上層。很有可能某些客戶端類沒有關閉它從DAL類中收到的DataReader,從而導致連接打開/鎖定,因爲誰知道多長時間。跟蹤您要返回的DataReader並確保您的客戶端類正確關閉/處理它們。

我也開始考慮通過實現Disposable模式重新設計數據訪問層,並可能返回POCO而不是Data(...表,...集,...讀者)對象。

相關問題