DBAtlas · Atlas für Datenbankbetrieb

40P01: deadlock_detected

PostgreSQL

Was bedeutet das?

Zwei oder mehr Transaktionen sind in einen Deadlock geraten, weil jede auf Sperren wartet, die die andere hält. PostgreSQL erkennt den Zyklus und bricht eine der Transaktionen ab.

Ursache

Sperren in unterschiedlicher Reihenfolge, Updates derselben Zeilen über Kreuz, lange Transaktionen oder kollidierende Sperren bei Foreign-Key-Prüfungen.

Lösung

Das Deadlock-Detail im Serverlog zeigt die beteiligten Abfragen. Greife in allen Transaktionen in derselben Reihenfolge auf Tabellen/Zeilen zu. Halte Transaktionen kurz. Fange die abgebrochene Transaktion in der Anwendung ab und wiederhole sie. Verknüpfe pg_locks mit pg_stat_activity, um Sperren zu untersuchen. Lege die Sperrreihenfolge bei Bedarf mit SELECT ... FOR UPDATE explizit fest.

In DBAtlas öffnen →

Weitere Einträge zu dieser Datenbank