Episodio

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

Cuando se usa ODBC o SqlClient para acceder a los datos de SQL Server, de forma predeterminada, la consulta se cancelará si no hay ninguna 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 se pudieron ajustar en el primer paquete de red), se reinicia el temporizador, si no se recibe el siguiente paquete de red en este período de 30 segundos, se cancelará la consulta.

Las razones comunes para SQL tiempo de espera de comandos son consultas de esquema no óptimas o ineficaz que se ejecutan durante un largo período de tiempo o que pierden índices o problemas de espera de bloqueo. 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 reducir el 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 para 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, ajustar el esquema no óptimo o las consultas ineficazs o agregar índices o evitar esperas de bloqueo son la solución adecuada.

Para identificar el comando que conduce a SQL error de tiempo de espera del comando, 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 hay 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 al SQL Server (como SQL tiempo de espera del comando). 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 automáticamente los laboratorios prácticos, sin necesidad de registro. Puede practicar el ejemplo práctico en línea mientras ve el vídeo.