Na semana passada, algo estranho aconteceu em nosso banco de dados. De repente, o aplicativo foi bloqueado para nossos usuários que não puderam salvar novas entidades etc. Depois de examinar o Monitor de Atividade do SQL Server (2008 com modo de compatibilidade 2005), vi as três entradas a seguir:
Após algum tempo, os usuários tiveram um tempo limite de conexão. Quando eu matei o processo 64, eles poderiam salvar normalmente novamente.
O problema é que as entidades que eles tentaram salvar durante o bloco foram inseridas no banco de dados mais de uma vez (até 3 vezes), embora exista um código que impeça que isso aconteça (coluna numérica que deve ser única, mas sem restrições) ... a verificação acontece no código).
Usamos o Entity Framework 6.0.
- Alguém sabe por que e quando esses tipos de espera ASYNC_NETWORK_IO ocorrem e como evitá-los?
- E o que exatamente eles significam?
Respostas:
ASYNC_NETWORK_IO
de alguma forma, indica que o aplicativo cliente não está processando os resultados tão rapidamente quanto o SQL Server os alimenta. Isso pode ser causado por um problema com o aplicativo cliente ou com a conexão de rede entre o servidor e o aplicativo cliente.Consulte um post de Thomas LaRock
ou este post de Joe Sack
Como você está usando
entity framework
este post de Brent Ozar também pode ser útilfonte
Existem alguns conceitos errados sobre o tipo de espera ASYNC_NETWORK_IO, principalmente devido ao nome que indica o problema de rede, mas é muito raro o motivo desse tipo de espera.
As esperas excessivas ASYNC_NETWORK_IO podem ocorrer em dois cenários:
A sessão deve aguardar o aplicativo cliente processar os dados recebidos do SQL Server para enviar o sinal ao SQL Server de que ele pode aceitar novos dados para processamento. Esse é um cenário comum que pode refletir um design inadequado do aplicativo e é a causa mais frequente de valores excessivos do tipo de espera ASYNC_NETWORK_IO.
Isso envolve investigar o aplicativo que está causando os valores excessivos do tipo de espera ASYNC_NETWORK_IO e frequentemente coordenar com os desenvolvedores do aplicativo que o criaram.
A largura de banda da rede está no máximo. Uma Ethernet entupida causará a lenta transmissão de dados para frente e para trás do aplicativo. Isso, por si só, degradará a eficiência do aplicativo.
Muito mais detalhes podem ser encontrados nesta página
fonte