Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 2617|Respuesta: 2

[Consejos] SQL Server utiliza eventos extendidos para rastrear problemas de bloqueo

[Copiar enlace]
Publicado en 2/3/2024 19:13:04 | | | |
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)





Anterior:Optimización del rendimiento .NET/C# usando consulta paralela PLINQ
Próximo:Ejecución de código en Visual Studio usando la ventana interactiva de C#
 Propietario| Publicado en 2/3/2024 19:14:35 |
Extiende la ruta predeterminada del archivo de eventos:

C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\deadlock_monitor_0_133538477770860000.xel
 Propietario| Publicado en 2/3/2024 19:16:54 |
Crea una nueva tabla de tab1 para probar el script SQL

Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com