Transacciones - Deadlock
En la parte 1 exploramos los fundamentos de las transacciones y las propiedades ACID. Ahora profundizaremos en los problemas de concurrencia que surgen cuando múltiples transacciones se ejecutan simultáneamente y cómo las bases de datos los previenen.
Dirty Write
Un dirty write ocurre cuando una transacción sobrescribe un valor que fue escrito por otra transacción que aún no ha sido confirmada (committed).
Para prevenir los dirty write, las bases de datos usan bloqueos a nivel de fila (row-level locks).
El mecanismo funciona así:
- Cuando una transacción quiere modificar una fila, debe adquirir un lock sobre esa fila.
- Debe mantener ese lock hasta que la transacción termine (commit o abort).
- Solo una transacción puede tener el lock en una fila específica.
- Si otra transacción quiere escribir en la misma fila, debe esperar a que se libere el lock.
Deadlock
Un deadlock ocurre cuando dos o más transacciones están esperándose mutuamente para liberar locks, creando un círculo de espera del cual ninguna puede escapar.
La base de datos detecta automáticamente los deadlocks y aborta una de las transacciones para que las otras puedan progresar.