DBAtlas · Atlas d'exploitation des bases de données

40P01: deadlock_detected

PostgreSQL

Que signifie cette erreur ?

Deux transactions ou plus sont entrées en interblocage, chacune attendant des verrous détenus par l'autre. PostgreSQL détecte le cycle et annule l'une des transactions.

Cause

Verrous acquis dans des ordres différents, mises à jour croisées des mêmes lignes, longues transactions, ou verrous en conflit pris lors des vérifications de clés étrangères.

Comment la corriger

Le détail de l'interblocage dans le journal du serveur indique les requêtes en conflit. Accédez aux tables/lignes dans le même ordre dans toutes les transactions. Gardez les transactions courtes. Interceptez la transaction annulée dans l'application et relancez-la. Joignez pg_locks à pg_stat_activity pour examiner les verrous. Si nécessaire, rendez l'ordre de verrouillage explicite avec SELECT ... FOR UPDATE.

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur