Si has trabajado durante algún tiempo con SQL Server seguro te has encontrado con una transacción que finaliza con este mensaje:
Transaction (Process ID ##) was deadlocked on lock resources with another process and has been chosen as the deadlock victim
Ups, tu transacción intento adquirir un bloqueo exclusivo sobre un objeto, al tiempo que otra transacción intento hacer lo mismo y SQL Server decidió que tu podías intentar nuevamente.

Image by Freepik
Y entonces ¿qué pasa cuando tienes una aplicación con cientos de transacciones por segundo y muchos usuarios dependen de ella? Creo que esperar no es una opción, por eso hoy quiero compartir la forma en la que logro identificar estos casos.
SP BlitzLock
De nuevo viene al rescate un procedimiento integrado en la solución de Brent Ozar, por medio del cual podemos identificar fácil y eficientemente estos eventos. Como siempre, descarga y ejecuta el script en tu instancia de SQL Server (de pruebas 😉) y ejecuta el siguiente comando:
exec sp_BlitzLock;
Después de unos segundos el proceso devolverá dos tablas:
La primera con un listado de transacciones involucradas, bases de datos, objetos, víctimas y victimarios, grafico del deadlock, entre mucha otra información.
La segunda, con un resumen de las bases de datos y objetos afectados (tablas, procedimientos, índices, entre otros).
Esto te ayudará a entender que está pasando, donde hay más efectos negativos y en que procesos debes dedicar tus esfuerzos. Una vez has definido las prioridades, es hora de poner manos a la obra.

¡El grafico de la muerte!
Muchas personas optan por empezar su análisis entendiendo donde y como ocurrió el bloqueo, por lo que usan el “gráfico” almacenado por SQL que contiene la información del evento. Para esto, se utiliza la última columna (deadlock_graph) de la primera tabla, guardando el XML con una extensión XDL.
Aquí tienes dos opciones:
Abres el archivo con Management Studio
O usas Plan Explorer de Sentry One
Te recomiendo darle una oportunidad a la segunda ya que tendrás todo de forma muy organizada y con animaciones precisas, que muestran el orden en el que se adquirieron los bloqueos.

Así es mucho más sencillo hacer tu análisis… y por cierto NO es un post patrocinado :)
Listo… ¿Y ahora?
Ahora hay que resolver el problema que es lo más interesante, pero eso es tema para otro post. Por supuesto, si tienes dudas déjalas en los comentarios o pregúntale a los expertos.
Espero tengas un feliz día.