Saltear al contenido principal

¿Qué es un Deadlock en SQL Server?

Para tener una idea inicial, ya hablamos en un artículo anterior sobre Qué son los Bloqueos. Cuando los escenarios se complican un poco más, a veces llegamos al punto en el que se generan errores denominados DEADLOCK.

Lo peor del deadlock es ver el error en versiones de SQL Server en español.

deadlock-español

Ok es broma… pero ¿seré solo yo? Es posible que la costumbre de trabajar con motores SQL Server en inglés me haya hecho odiar ese mensaje de error. ¿”Interbloqueo”? Creo que podría haber existido un nombre traducido más cercano a Deadlock. Pero bueno…sigamos…

¿Qué tan malo es un deadlock en SQL Server?

El concepto nos dice que un evento de deadlock en SQL Server previene completar una tarea cuando dos o más procesos o transacciones se bloquean entre sí. Esto se da cuando un proceso mantiene un Lock sobre un recurso que otro proceso lo requiere.

Entonces, ¿qué tan malo es un deadlock?

Es ¡TERRIBLE!

Siempre hay una víctima. Un proceso incompleto. Un rollback ejecutado.

¿Qué tal si esa transacción incompleta era un débito importante en una cuenta bancaria? Imagina los peores escenarios en los que no podrías tolerar un rollback.

Entonces, ¿cómo identificamos que estén sucediendo deadlocks?

¡Buenas noticias! Existen varios métodos con los que podemos identificar errores de deadlock en SQL Server.

  • Extended Events
  • Alertas
  • Manejo de errores en código (TRY/CATCH)
  • Default Trace
  • SQL Trace con Profiler
  • Trace Flags (1204, 1222)

Personalmente me gusta mucho la primera opción que la considero la forma más sencilla de monitorear deadlocks.

¿Cómo reducimos la posibilidad de que sucedan?

Puedo citar algunos puntos a grandes rasgos.

  • Evitar grandes consultas que generen altos tiempos de Locks
  • Minimizar la cantidad de lectura de información tanto en consultas de lectura o escritura. ¿Cómo medimos la cantidad de lectura?
  • Apoyarse en la creación de índices para reducir Locks.
  • Mantener un mismo orden de acceso a objetos entre sesiones.
  • Puedes considerar usar un diferente ISOLATION LEVEL más optimista.
  • También documentación oficial nos da un par de consejos para minimizar la aparición de deadlocks.

Algunos detalles adicionales para Reducir deadlock en SQL Server.

Lo más urgente en este tema: Monitoreo y Alerta

Es muy posible que tengas errores de deadlock y no te hayas enterado aún. Son bastante silenciosos sobretodo si no existe un buen manejo de excepciones en código o alertas en el servidor.

Pablo Javier Fernández

www.datoptim.com
I love working on SQL Server Performance Tuning and finding the origin of the problems. Music and SQL Server passionate.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Close search

Carrito

Volver arriba