Ao examinar a lista de procedimentos armazenados que demoram muito tempo para serem executados, destaca-se que causa a maior espera. No entanto, a maior parte dessa espera (81%) é ASYNC_NETWORK_IO e eu sei o porquê: o procedimento armazenado transfere aproximadamente 400 MB de informações.
Na documentação, ele afirma que a causa do ASYNC_NETWORK_IO é que o cliente não pode acompanhar o fluxo de dados e isso provavelmente é verdade. Não tenho certeza de como manter o cliente atualizado, pois tudo o que faz é chamar o procedimento armazenado por meio de um ADO.NET e depois apenas processar o conjunto de dados.
Portanto, considerando essas informações, devo me preocupar com o tipo de espera ASYNC_NETWORK_IO para este procedimento? Isso realmente afeta o desempenho do servidor?
Informações adicionais:
- Estou no service pack 2 do SQL Server 2005.
- O aplicativo cliente está na mesma caixa do SQL Server (eu sei, eu sei ... mas não posso fazer nada sobre isso).
fonte
Respostas:
Como você disse, esse tipo de espera indica que o aplicativo não está acompanhando o SQL Server. Agora, o que realmente significa é que o SQL Server não pode enviar os dados pela rede tão rápido quanto gostaria.
Pode haver duas causas subjacentes:
Se o aplicativo em si for muito lento, não haverá ou haverá impacto significativo no desempenho de outras consultas. Se, por outro lado, o canal for muito pequeno, outras consultas também não poderão enviar seus resultados e terão que esperar.
No último caso, no entanto, você teria todas as conexões aguardando ASYNC_NETWORK_IO. Você deve conseguir ver claramente esse impacto.
fonte
var dataSet = new DataSet();
var da = new SqlDataAdapter(command);
da.Fill(dataSet);
Portanto, não tenho certeza do que exatamente pode ser lento.