Рассматривая список хранимых процедур, выполнение которых занимает много времени, можно выделить наиболее ожидаемое. Однако большую часть этого ожидания (81%) составляет ASYNC_NETWORK_IO, и я знаю почему: хранимая процедура передает примерно 400 МБ информации.
В документации говорится, что причина ASYNC_NETWORK_IO заключается в том, что клиент не успевает за потоком данных, и это, вероятно, верно. Я не уверен, как заставить клиента не отставать, так как все, что он делает, это вызывает хранимую процедуру через ADO.NET, а затем просто обрабатывает набор данных.
Итак, учитывая эту информацию, следует ли мне беспокоиться о типе ожидания ASYNC_NETWORK_IO для этой процедуры? Влияет ли это на производительность сервера?
Дополнительные части информации:
- Я нахожусь на пакете обновления 2 SQL Server 2005.
- Клиентское приложение находится в той же коробке, что и SQL Server (я знаю, я знаю ... но я ничего не могу с этим поделать).
Ответы:
Как вы сказали, этот тип ожидания указывает, что приложение не поспевает за SQL Server. Теперь это означает, что SQL Server не может отправлять данные по сети так быстро, как хотелось бы.
Там может быть две основные причины:
Если само приложение работает слишком медленно, это не окажет существенного влияния на производительность других запросов. С другой стороны, если канал слишком мал, другие запросы также не могут отправлять свои результаты и вынуждены ждать.
В последнем случае, однако, все соединения ожидают на ASYNC_NETWORK_IO. Вы должны быть в состоянии ясно увидеть это воздействие.
источник
var dataSet = new DataSet();
var da = new SqlDataAdapter(command);
da.Fill(dataSet);
поэтому я не уверен, что именно может быть медленным.