DBAtlas · Atlas de operaciones de bases de datos

40P01: deadlock_detected

PostgreSQL

¿Qué significa?

Dos o más transacciones entraron en deadlock al esperar cada una bloqueos que mantiene la otra. PostgreSQL detecta el ciclo y cancela una de las transacciones.

¿Por qué ocurre?

Bloqueos adquiridos en distinto orden, actualizaciones cruzadas de las mismas filas, transacciones largas o bloqueos en conflicto tomados durante las comprobaciones de claves foráneas.

Cómo solucionarlo

El detalle del deadlock en el log del servidor muestra las consultas en conflicto. Acceda a tablas/filas en el mismo orden en todas las transacciones. Mantenga las transacciones cortas. Capture la transacción cancelada en la aplicación y reinténtela. Combine pg_locks con pg_stat_activity para examinar los bloqueos. Si es necesario, haga explícito el orden de bloqueo con SELECT ... FOR UPDATE.

Abrir en DBAtlas →

Más entradas de este motor