Время ожидания сетевого ввода-вывода SQL Server 2005 (тип ожидания ASYNC_NETWORK_IO) - PullRequest
4 голосов
/ 02 июля 2010

У нас возникают проблемы с производительностью нашего веб-приложения в периоды пиковой нагрузки, которые в настоящее время разделены между одним веб-сервером IIS6 2003 года и одним сервером БД SQL Server 2005. Время запросов на сервере БД выглядит нормально (около 30 мс), а загрузка процессора низкая (менее 20%), однако выполнение запросов на веб-сервере может занять много времени (более 1 секунды).

Я искал подсказки в perfmon и увидел, что среднее время ожидания ввода-вывода составляет ~ 400 мс, что вполне может объяснить разницу в производительности. Я также выполнил некоторые запросы внутри SSMS и вижу, что каждую секунду существует примерно 10 000 мс совокупных типов ожидания ASYNC_NETWORK_IO.

Из некоторых исследований кажется, что проблема либо в недостаточной пропускной способности сети, либо в том, что веб-сервер недостаточно быстро обрабатывает результаты. Как мне узнать, что это такое, а затем решить?

Мы используем NHibernate для нашего уровня данных, поэтому, насколько мне известно, DataReader-ы не используются. Нет известных запросов, которые возвращают большие наборы результатов, хотя есть одна таблица, в которой есть столбец, содержащий сжатые документы XML.

Заранее спасибо

Дополнительная запрашиваемая информация

  • Sql Server настроен на использование TCP / IP и протоколы общей памяти
  • Мы делаем около 4 запросов БД на страницу, ничего смешного
  • В пиковое время сервер БД отправляет 1,5 МБ / с
  • На пике загрузка веб-сервера составляет около 60%
  • AT пик, загрузка сетевого адаптера веб-сервера составляет 13 МБ / с. 8 МБ отправляет, 5 МБ получает. Тот же сетевой адаптер обрабатывает трафик SQL и HTTP
  • Мы используем некоторое кэширование, но приложение довольно динамичное, поэтому большую часть времени требует актуальных данных

Ответы [ 2 ]

5 голосов
/ 02 июля 2010

Механизм базы данных ожидает в процессе ASP, чтобы использовать отправленные ему пакеты.Это может происходить либо в самом процессе ASP.Net (IP-пакеты исключаются из сетевого адаптера, но они не используются процессом, и в этом случае виновным является хост ASP.Net, как в случае плохого кода или процессора).перегрузка), или может быть так, что операционная система хоста не может потреблять пакеты IP достаточно быстро (комбинация нагрузки IP от комбинированной нагрузки HTTP и загрузки SQL туда и обратно слишком велика для хоста).

Какая у вас загрузка процессора на хосте ASP?Какова частота прерываний NIC?Распределяется ли трафик HTTP на одном сетевом адаптере с трафиком TDS (SQL), и если да, можете ли вы разделить их на другом сетевом адаптере?

Какой протокол настроен между клиентом ASP и SQL?Чистые трубы или TCP?Если это Net Pipes, можете ли вы отключить его и принудительно включить TCP, чтобы вывести SMB из уравнения?

Сколько обращений в базу данных вы совершаете за HTTP-запрос?Если больше 4, можете ли вы проанализировать код, чтобы сократить его до 3-5 циклов в каждом запросе?

Кешируете ли вы что-нибудь в процессе ASP, чтобы избежать дополнительных обращений к базе данных?

1 голос
/ 11 июля 2010

Мы решили проблему, разделив трафик SQL на другой сетевой карте. Кроме того, этот сетевой адаптер подключается к локальному IP-адресу, тогда как до этого он достиг общедоступного IP-адреса сервера базы данных.

Спасибо @Remus Rusanu за подсказку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...