PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was kann zu Leerlauf in der Transaktion für BEGIN-Anweisungen führen?

Die Transaktionen blockieren überhaupt nicht. Die Datenbank wartet darauf, dass die Anwendung die nächste Anweisung sendet.

Die Sperre für die Transaktions-ID ist nur eine Technik für Transaktionen, um sich gegenseitig zu blockieren, selbst wenn sie nicht um eine Tabellensperre konkurrieren (z. B. wenn sie auf eine Zeilensperre warten):Jede Transaktion hält eine exklusive Sperre für sich Transaktions-ID, und wenn es auf den Abschluss einer gleichzeitigen Transaktion warten muss, kann es einfach eine Sperre für die ID dieser Transaktion anfordern (und blockiert werden).

Wenn alle Transaktionen so aussehen, muss sich die Sperre irgendwo in Ihrer Anwendung befinden; die Datenbank ist nicht beteiligt.

Suchen Sie bei der Suche nach blockierten Prozessen in der Datenbank nach Zeilen in pg_locks wobei granted ist falsch.