Ao olhar para a lista de procedimentos armazenados que levam muito tempo para serem executados, um se destaca como o que causa mais 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, afirma-se que a causa de ASYNC_NETWORK_IO é que o cliente não consegue acompanhar o fluxo de dados e isso provavelmente é verdade. Não tenho certeza de como fazer o cliente acompanhar, pois tudo o que ele faz é chamar o procedimento armazenado por meio de um ADO.NET e apenas processar o conjunto de dados.
Portanto, com essas informações, devo me preocupar com o tipo de espera ASYNC_NETWORK_IO para esse 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 a respeito).
Como você disse, esse tipo de espera indica que o aplicativo não está acompanhando o SQL Server. Agora, o que isso 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 próprio aplicativo for muito lento, não haverá impacto significativo no desempenho de outras consultas. Se, por outro lado, o pipe 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 em ASYNC_NETWORK_IO. Você deve ser capaz de ver esse impacto claramente.