2011-07-20 122 views
3

我正在開發一個混淆工具,它主要是在專用SQL服務器(僅用於該工具)上檢索數據庫,檢索記錄,執行某些數據操作並更新這些記錄。這一切都是用LINQ to SQL完成的。我正在使用任務和並行循環來同時運行儘可能多的更新。所有的SQL都是從同一個連接字符串完成的。最初我使用了默認的最大連接池大小(100),假設它足夠了。看起來運行了幾個小時後(因爲這個工具正在更新數百萬條記錄),它開始嘔吐,因爲它無法建立連接。在查看連接池之後,我注意到我已經達到了100的限制。因此我將限制增加到了200.儘管我的一個進程(沒有提到這個過程在幾個進程中運行)結束大約3小時後失敗。連接池似乎沒有被過度使用,因此我只是搔了搔腦袋。我已經在我的代碼中檢查了很多區域,以確保所有連接正在處理,它們是。我甚至將所有連接代碼移動到一箇中心位置,所以現在代碼只能建立一個位置的連接。爲了排除連接池最大化的想法,我想使用C#查詢池以在嘗試連接時查看異常的限制。這可能嗎?框架是否有代碼來做到這一點,或者我會被要求運行一個SQL語句來確定這個嗎?有沒有辦法從C#代碼檢查池中的連接?

供參考:我使用4.0和SQL 2008.

在此先感謝!

回答

2

它看起來像我能夠使用PerfMon監視連接池。這表明我實際上正在達到游泳池的極限,令我驚訝的是,游泳池並不像我想的那樣設置了200。問題解決了!有時候,我們會創建這樣複雜的代碼,導致我們自己的問題

備註 - 我最初使用的是sp_who2,但是當我的異常發生時,池被清理乾淨,所以我無法獲得準確的讀數。

相關問題