Episodio

Tiempo de espera del comando de SQL Server: tiempo de espera de la aplicación: atención de eventos extendidos

Cuando se usa ODBC o SqlClient para acceder a datos desde SQL Server, de forma predeterminada, la consulta se cancelará si no hay respuesta del servidor en un período de tiempo determinado (30 segundos de forma predeterminada). ODBC o SqlClient iniciarán un temporizador después de enviar la consulta a SQL Server y, si no hay resultados del servidor en un plazo de 30 segundos, la consulta se cancelará y se enviará un mensaje de error de tiempo de espera a la aplicación. En caso de que se reciba un paquete de red (que contiene los resultados de la consulta) en los 30 segundos y, si esperamos paquetes de red adicionales (filas adicionales que no caben en el primer paquete de red), se reinicia el temporizador, si el siguiente paquete de red no se recibe en este período de 30 segundos, se cancelará la consulta.

Las razones comunes para el tiempo de espera del comando SQL no son un esquema óptimo o consultas ineficaces que se ejecutan durante un largo período de tiempo o que pierden índices o bloquean problemas de espera. Es importante ajustar las consultas en lugar de aumentar la configuración de tiempo de espera del comando SQL.

En el vídeo se muestra un ejemplo en el que la reducción del tamaño del paquete de red elimina el tiempo de espera, esta demostración es comprender cómo intervienen los paquetes de red para restablecer el temporizador y desarrollar una mejor comprensión del tiempo de espera. Cambiar el tamaño del paquete de red no es una solución para evitar el tiempo de espera, optimizar el esquema no óptimo o las consultas ineficaces o agregar índices o evitar esperas de bloqueo son la solución adecuada.

Para identificar el comando que conduce al error de tiempo de espera del comando SQL, puede usar eventos extendidos y supervisar el evento "sqlserver.attention". El script de eventos extendidos usado en el vídeo está disponible en www.sqlvideo.com/xevents.

En SQL Server Management Studio, el tiempo de espera del comando SQL se puede cambiar mediante "Opciones" en el cuadro de diálogo de conexión. De forma predeterminada, se establece en "0", lo que significa que no se ha agotado el tiempo de espera. Cuando se ejecuta una consulta o un procedimiento almacenado, si hace clic en el botón "Cancelar" (el cuadrado rojo), se enviará la misma atención a SQL Server (como tiempo de espera del comando DE SQL). Y esto generará a su vez el evento "sqlserver.attention" en Eventos extendidos.

En el vídeo siguiente puede ver un ejemplo del tiempo de espera del comando SQL. SQLTest Tool simula los laboratorios prácticos automáticamente, sin necesidad de registro. Puede practicar el ejemplo práctico en línea mientras ve el vídeo.