La semana pasada sucedió algo extraño en nuestra base de datos. De repente, la aplicación se bloqueó para nuestros usuarios que no pudieron guardar nuevas entidades, etc. Después de mirar el Monitor de actividad del servidor SQL (2008 con el modo de compatibilidad 2005) vi las siguientes tres entradas:
Después de un tiempo, los usuarios obtuvieron un tiempo de espera de conexión. Cuando eliminé el proceso 64, pudieron volver a guardar normalmente.
El problema es que las entidades que intentaron guardar durante el bloque se insertaron en la base de datos más de una vez (hasta 3 veces) a pesar de que hay un código que debería evitar que esto suceda (columna de números que debe ser única pero sin restricciones ... la verificación ocurre en el código).
Utilizamos Entity Framework 6.0.
- ¿Alguien de ustedes sabe por qué y cuándo ocurren estos tipos de espera ASYNC_NETWORK_IO y cómo evitarlos?
- ¿Y a qué se refieren exactamente?
fuente
Respuestas:
ASYNC_NETWORK_IO
de alguna manera indica que la aplicación cliente no está procesando resultados tan rápido como SQL Server los alimenta. Esto podría deberse a un problema con la aplicación cliente o con la conexión de red entre el servidor y la aplicación cliente.Consulte una publicación de Thomas LaRock
o esta publicación de Joe Sack
Ya que estás usando
entity framework
esta publicación de Brent Ozar también puede ser útilfuente
Hay algunas ideas erróneas sobre el tipo de espera ASYNC_NETWORK_IO, principalmente debido al nombre que indica el problema de la red, pero es muy raro el motivo de este tipo de espera.
Las esperas excesivas de ASYNC_NETWORK_IO podrían ocurrir bajo dos escenarios:
La sesión debe esperar a que la aplicación del cliente procese los datos recibidos de SQL Server para enviar la señal a SQL Server de que puede aceptar nuevos datos para su procesamiento. Este es un escenario común que puede reflejar un mal diseño de la aplicación, y es la causa más frecuente de valores de tipo de espera ASYNC_NETWORK_IO excesivos.
Esto implica investigar la aplicación que está causando los valores de tipo de espera ASYNC_NETWORK_IO excesivos y, a menudo, coordinarse con los desarrolladores de aplicaciones que la crearon.
El ancho de banda de la red está al máximo. Una red Ethernet obstruida provocará la lenta transmisión de datos desde y hacia la aplicación. Esto, en sí mismo, degradará la eficiencia de la aplicación.
Se pueden encontrar muchos más detalles en esta página
fuente