Requisitos: Existen muchas razones por las que la base de datos SQL Server causa bloqueos; en producción, todos pueden encontrarse con problemas de bloqueos, y la causa específica puede no localizarse solo con la información anormal de los bloqueos de aplicaciones, por lo que es necesario utilizar eventos de extensión en SQL Server para rastrear problemas de bloqueo y registrar los detalles específicos de cuándo ocurren estos bloqueos.
Resumen ampliado del evento
Extended Events es una función ligera de monitorización del rendimiento que permite a los usuarios recopilar los datos necesarios para monitorizar y resolver problemas. Esta función te permite ver detalles sobre las operaciones internas del motor de datos para fines relacionados con la monitorización del rendimiento y la resolución de problemas.
Con la arquitectura de Eventos Extendidos (XEvents), los usuarios pueden utilizar tanto o tan pocos datos como necesiten para monitorizar, identificar o solucionar problemas sobre el rendimiento de SQL Server, Azure SQL Database y Azure SQL Managed Instance. Los eventos extendidos son altamente configurables, ligeros y escalables bien.
Referencia:
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.
Causas de los bloqueos
Los bloqueos son causados por bloqueos de concurrencia en competencia en una base de datos, normalmente en transacciones de varios pasos. Cada sesión de usuario puede tener una o más tareas ejecutándose en su nombre, donde cada tarea puede buscar o esperar para obtener varios recursos. Los siguientes tipos de recursos pueden causar bloqueos y, eventualmente, provocar un estancamiento.
- Bloqueos: Los bloqueos esperando para recuperar recursos como objetos, páginas, filas, metadatos y aplicaciones pueden causar bloqueos. Por ejemplo, la transacción T1 tiene un bloqueo compartido (bloqueo S) en la fila r1 y espera a obtener un bloqueo exclusivo (bloqueo X) para la fila r2. La transacción T2 tiene un bloqueo compartido (bloqueo S) en la fila r2 y espera a obtener un bloqueo exclusivo (bloqueo X) para la fila r1. Esto da lugar a un bucle de bloqueo donde tanto T1 como T2 esperan a que el otro libere el recurso bloqueado.
- Hilos de trabajo: Las tareas que hacen cola para hilos de trabajadores disponibles pueden causar bloqueos. Si una tarea en cola tiene un recurso que bloquea todos los hilos de trabajo, se producirá un bloqueo. Por ejemplo, después de que la sesión S1 inicia una transacción y adquiere un bloqueo compartido (bloqueo S) para la línea r1, entra en suspensión. Una sesión activa que se ejecuta en todos los hilos de trabajo disponibles intenta obtener un bloqueo exclusivo (X-lock) para la línea r1. Como la sesión S1 no puede obtener un hilo de trabajo, no puede comprometer la transacción ni liberar el bloqueo en la línea r1. Esto resultará en un punto muerto.
- Memoria: Puede producirse un bloqueo cuando una solicitud concurrente espera ganar memoria y la memoria disponible actualmente no es suficiente para sus necesidades. Por ejemplo, dos consultas concurrentes (Q1 y Q2) se ejecutan como funciones definidas por el usuario, adquiriendo 10 MB y 20 MB de memoria, respectivamente. Si cada consulta requiere 30 MB y la memoria total disponible es de 20 MB, Q1 y Q2 deben esperar a que liberen memoria, lo que resultará en un bloqueo.
- Consultas paralelas y recursos relacionados con la ejecución: Los coordinadores de procesamiento, generadores o hilos de consumo típicamente asociados a puertos conmutados pueden bloquearse entre sí cuando contienen al menos un proceso que no forma parte de una consulta paralela, lo que resulta en bloqueos. Además, cuando una consulta paralela comienza a ejecutarse, SQL Server determina el grado de paralelismo o número de hilos de trabajo en función de la carga de trabajo actual. Puede producirse un bloqueo si hay un cambio inesperado en la carga de trabajo del sistema, por ejemplo, cuando una nueva consulta comienza a ejecutarse en el servidor o cuando el sistema se queda sin hilos de trabajo.
- Recursos de Conjunto de Resultados de Actividad Múltiple (MARS): Estos recursos se utilizan para controlar la ejecución cruzada de múltiples solicitudes de actividad bajo MARS.
Referencia:
El inicio de sesión del hipervínculo es visible.
Registro de eventos extendidos por bloqueo
Crea un evento de extensión para registrar la información del bloqueo con el siguiente comando:
Iniciar una sesión de evento de bloqueo
Detener una sesión de evento
Eliminar una sesión de evento
Consulta datos de sesiones de eventos
Bloqueos de prueba
Crea una nueva tabla Tab1 para probar, crea dos nuevas ventanas de ejecución y ejecuta los siguientes comandos respectivamente:
Un bloqueo ocurre de la siguiente manera:
Una transacción (ID de proceso 68) con otro proceso está bloqueada en un recurso bloqueado y ha sido seleccionada como víctima de bloqueo. Por favor, repite la transacción. La transacción (ID de proceso 68) estaba bloqueada en recursos de bloqueo con otro proceso y ha sido elegida como víctima del bloqueo. Vuelve a ejecutar la transacción.
Consulta los datos de la sesión del evento tal como se muestra en la siguiente figura:
Los datos XML detallados son los siguientes:
(Fin)
|