對我的Web服務器和數據庫服務器之間的流量進行TCP分析時,我發現網絡緩衝區(TCP窗口)經常被填滿。 Web服務器然後發送TCP消息到數據庫服務器,告訴它它的緩衝區已滿並且在給定更新之前不發送更多的數據。加快IIS/.NET/LINQ從網絡緩衝區檢索數據的速度
例如,這是字節網絡緩衝區的用於越長壽命到數據庫服務器連接中的一個的大小隨時間:
web服務器運行的.NET 4.0應用程序在Windows 2008 R2 Web服務器上以IIS集成模式運行。 SQL服務器是2008 R2服務器。
我的解釋是,SQL服務器將數據更快地返回到Web服務器,然後Web服務器上的應用程序可以從緩衝區收集數據。我嘗試過調整網絡驅動程序中的所有內容來解決此問題。特別是增加RSS隊列,禁用中斷審覈以及設置Windows 2008 R2服務器以更積極地增加緩衝區大小。
所以,如果我的理解是正確的,讓我想了解一下兩種可能性:
- 是否有.NET沒有辦法告訴它來增加網絡緩衝區的大小? 「增強的2008 R2 TCP堆棧」很少決定爲此連接啓用窗口縮放(使緩衝區大於65 kB)(可能是由於延遲較低)。它看起來像手動設置這個系統範圍的能力在Windows Server 2008 r2中沒有了(以前是註冊表項,現在被忽略了)。那麼有沒有一種方法可以在代碼中強制執行?
- 是否有任何可以調整的方法來加快應用程序讀取網絡緩衝區信息的速度,特別是SQL連接的速度?
編輯:
要求DMV查詢切斷在ASYNC_NETWORK_IO:
SELECT * FROM sys.dm_os_wait_stats ORDER BY waiting_tasks_count desc;
wait_type waiting_tasks_count wait_time_ms max_wait_time_ms signal_wait_time_ms CXPACKET 1436226309 2772827343 39259 354295135 SLEEP_TASK 231661274 337253925 10808 71665032 LATCH_EX 214958564 894509148 11855 84816450 SOS_SCHEDULER_YIELD 176997645 227440530 2997 227332659 ASYNC_NETWORK_IO 112914243 84132232 16707 16250951
這是我將談論微軟的一個問題直接上。打開支持服務單或使用免費的MSDN電話(如果有的話)。 – 2011-03-03 12:54:52
凱爾的後續行動:http://blog.serverfault.com/post/views-of-the-same-problem-network-admin-dba-and-developer/ – 2011-03-20 19:52:19