Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
img
img

 

 

SQL Server
Blog. (Apuntes y Recopilaciones) por Norman M. Pardell

img
img
23 de Febrero, 2011 · asyncnetworkio

Problemas de "ASYNC_NETWORK_IO", "NETWORKIO"

 Los errores tipo: ASYNC_NETWORK_IO (observados en versiones, SQL Server 2005 y superiores) y NETWORKIO (observados en SQL Server 2000) suelen estar asociados con alguna aplicación que no es lo suficientemente rápida para procesar los resultados devueltos por SQL Server.

 

Paso 1:

 

 En este punto, hay que dedicar tiempo, en revisar la arquitectura de nuestra plataforma y el buen funcionamiento de todos los elementos hardware que interfieren en las comunicaciones. Desde las propias tarjetas y cables de red, hasta los enrutamientos configurados en los switches.

 Es conveniente asegurarnos que ninguna boca de red sea causa de error en la transmisión de paquetes. También cerciorarnos que las tenemos configuradas en modo Full-Duplex, a la misma y mayor velocidad, en ambas bocas que unen cada uno de los latiguillos de red.

  Descartar problemas con las posible versión de drivers, de cada tarjeta de red, así como la configuración del TCP Chimney.

 Os dejo un enlace, donde cuento como solucionar problemas en SQL Server relacionados con: "General Network error", "Communication link failure", or "A transport-level error":

http://microsoftsqlsecret.fullblog.com.ar/como-solucionar-problemas-de-general-network-error-communication.html

 Hay que valorar, la criticidad o impacto de este error en el negocio.  Replantearse la posibilidad de que los cliente(s) o en su defecto frontales (servidores web) dispongan de tarjetas Gigabit Ethernet, así serán capaces de recibir y transmitir mayor número de datos, en menos tiempo.

 Es aconsejable que en la red se utilice switches en lugar de hubs, etc..

 

 Paso 2:

  En el caso de estar trabajando con un SQL Server 2005/8, confirmar con las DMV (Dynamic Management Views), en que dedica más tiempo el servidor, (dejo select):

 

SELECT TOP 10

 [Wait type] = wait_type,

 [Wait time (s)] = wait_time_ms / 1000,

 [% waiting] = CONVERT(DECIMAL(12,2), wait_time_ms * 100.0 / SUM(wait_time_ms) OVER())

FROM sys.dm_os_wait_stats

WHERE wait_type NOT LIKE '%SLEEP%'

ORDER BY wait_time_ms DESC;

 

 Te tendría que aparecer en primer lugar "async-network-io"

 async-network-io: Suele aparecer por causa del cliente, no suele ser problema de procesamiento en el servidor. Posiblemente el servidor no pueda enviar más datos al cliente, por algún motivo, y ha de esperar (hacer una pausa), para poder seguir enviando resultados al cliente, de forma que poco a poco se va llenado el bufer de salida, dando lugar en algún momento a no pueder gestionarlo... y sale el error. Puede ser causado por problemas en la red, tarjeta de red, cliente poco potente...

  Es conveniente verificar e identificar junto con el equipo de la aplicación (o desarrolladores) las consultas que se esperan que devuelvan grandes resultados, y que no reportan más de unas cuantas filas a la vez… Una solución podría ser añadir una “clausula Where” o restringir aún más la consulta para que devuelva menos datos al cliente. 

 

 Paso 3:

 Por otro lado, podemos obtener la bbdd donde se produce "async-network-io", usando la consulta:

 

SELECT tx.[text] AS [Executing SQL], wt.session_id, wt.wait_duration_ms,

wt.wait_type,

      wt.resource_address, wt.blocking_session_id, wt.resource_description

FROM sys.dm_os_waiting_tasks AS wt INNER JOIN sys.dm_exec_connections AS ec

   ON wt.session_id = ec.session_id

CROSS APPLY

   (SELECT * FROM sys.dm_exec_sql_text(ec.most_recent_sql_handle)) AS tx

WHERE wt.session_id > 50 AND wt.wait_duration_ms > 0

 

 Y cruzandola con el resultado de sp_who2, ya que sesion_ID = SPID del sp_who2:

 Lo más probable es que se produzca con una de las bases de datos alojadas en el servidor, intenta aislarla o ponerla fuera de línea para acotar el problema, viendo si se reproduce.

 Es posible que encuentre errores, en el log de SQL, del tipo:

2010-11-26 15:29:49.22 Server      All schedulers on Node 0 appear deadlocked due to a large number of worker threads waiting on ASYNC_NETWORK_IO. Process Utilization 0%.


Aquí os dejo un enlace de funciones y vistas de administración dinámica relacionadas con ejecuciones.


Apunte realizado por Norman M. Pardell

 

Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.

publicado por normanmpardell a las 13:01 · Sin comentarios  ·  Recomendar
Comentarios (0) ·  Enviar comentario
Esta entrada no admite comentarios.
img
.Sobre mí
FOTO

Norman M. Pardell

MCITP: Database Administrator & Database Developer, SQL Server 2008. MCC Award Certificate. Consultor Senior de bases de datos en Capgemini España, S.L. Asesoramiento en implementación, desarrollo y gestión de bases de datos en grandes compañías. Actualmente, asignado a proyecto en compañía líder en el sector energético global. Más de 10 años trabajando con SQL Server (y otros gestores de BBDD)

» Ver perfil

img
.Secciones
» Inicio
img
.Enlaces
» Microsoft MSDN Foros
» Windows Server 2012
img
.Más leídos
» Asignar la cantidad correcta de Memoria para SQL Server
» Base de Datos Sospechosa (Suspect)
» Como modificar la Intercalación (Collation) en SQL Server
» Detectar bloqueos. SQL Server V.2005 y superiores
» Funciones SQL Server. Funciones escalares y funciones con valores de tabla.
» Integridad y corrupción en las bases de datos: DBCC CHECKDB
» Log de transacciones ( .ldf ). SQL Server.
» Migrando SQL Server 2005, 2008, 2008 R2 a SQL Server 2012
» Tomo I. Memoria RAM. Optimización de sistemas de 32 y 64 bits. SQL Server 2008.
» Transacciones activas. SQL server 2008
img
.Nube de tags [?]
                                                           
img img
FULLServices Network | Crear blog | Privacidad