我有一個.NET 4.0 Winform和.NET 4.0 Windows服務,它們都通過LINQ to SQL連接到SQL 2005/2008數據庫。它在我們的測試環境中運行良好且快速,擁有完美的生產數據克隆,但在生產環境中,它的運行速度非常緩慢,CPU使用率和帶寬使用率都很低。我還注意到每天有數百個SQL超時,即使是索引良好的數據庫上的最小查詢也是如此。因此,我啓動了Profiler ...Linq-to-SQL和sp_reset_connection
我發現sp_reset_connection在10分鐘的負載下捕獲期間佔SQL CPU總持續時間的三分之一和所有SQL調用總數的90%。
- 我試過禁用&啓用連接池和擺弄連接字符串中允許的連接數和連接超時數。沒有任何影響。
- 我一直在用ADO.NET查詢代替我的LINQ查詢。這些舊的ADO.NET查詢從不超時。只有LINQ的。
- 我已經注意到該服務器上的其他主要性能問題,但我不確定如何通過客戶的系統管理員來處理該主題。
我在運行服務的應用程序服務器上具有Admin訪問權限。我在他們運行Winform的終端服務器上,以及SQL服務器上都沒有訪問權限。
是什麼原因導致sp_reset_connection運行頻繁?
- 有沒有辦法繞過這些調用而不會將我的應用程序中的所有LINQ都撕掉?
- 有沒有辦法減少這個存儲過程的調用次數?
- 有沒有辦法減少SQL服務器在這些調用中需要的處理器時間?
- 如果我將pooling禁用並用空的替換那個存儲的proc,我會亂七八糟嗎?
除非你手動打開連接(這是我從來沒有真正做過的,因爲它是違反直覺的),或者有一個環境事務(這是一個環境事務),它會出現數據上下文在'using'塊中的每個命令之後發出'sp_reset_connection'我一直都有,所以它對我有效,我甚至沒有意識到爲什麼)。你能給一個「其他網頁」的鏈接?想要一些有關該行爲的文檔。 – GSerg