При выполнении TCP-анализа трафика между моими веб-серверами и серверами баз данных я вижу, что сетевые буферы (окно TCP) часто заполняются. Затем веб-серверы отправляют TCP-сообщения на сервер базы данных, сообщая ему, что его буферы заполнены, и не отправлять больше данных, пока не будет выполнено обновление.
Например, это размер сетевого буфера в байтах для одного из наиболее долгоживущих подключений к серверу базы данных с течением времени:
Веб-серверы запускают приложение .NET 4.0, работающее в интегрированном режиме IIS на веб-серверах Windows 2008 R2. Сервер SQL - это сервер 2008 R2.
Я считаю, что сервер SQL возвращает данные на веб-серверы быстрее, чем приложение на веб-сервере может собирать данные из буферов. Я попытался настроить все, что мог, в сетевых драйверах, чтобы обойти эту проблему. В частности, увеличение очередей RSS, отключение модерации прерываний и настройка сервера Windows 2008 R2 на более агрессивное увеличение размера буфера.
Итак, если моя интерпретация верна, у меня возникает вопрос о двух возможностях:
Изменить:
Запрошенный запрос 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