对我的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