2016-12-07 1 views
0

Ich habe eine Back-End-Anwendung, die Session-Level-Advisory-Sperre implementiert. Wenn jedoch der Client die Verbindung plötzlich verliert (z. B. Erzwingen eines Neustarts während der Verbindung), bleibt die Advisory-Sperre dort und wird nicht verschwinden.PostgreSQL Advisory Sperre bleibt nach Benutzer trennen

Gibt es eine Möglichkeit, die Sperre immer nach einer unterbrochenen Verbindung ablaufen zu lassen?

Danke.

+1

'Während ein Flag, das in einer Tabelle gespeichert ist, für den gleichen Zweck verwendet werden kann, sind Advisory-Sperren schneller, vermeiden das Aufblähen von Tabellen und werden am Ende der Sitzung automatisch vom Server bereinigt. Https: // www. postgresql.org/docs/9.1/static/explicit-locking.html Also, solange Sie Timeout für Verbindungen haben, sind Sie in Ordnung. – freakish

Antwort

1

Ich gehe davon aus, dass die Sperre bleibt, weil der Back-End-Prozess immer noch da ist.

Wenn der Server versucht, den Client nicht zu kontaktieren, kann es lange dauern, bis das Betriebssystem erkennt, dass der Client-Socket nicht mehr vorhanden ist. Dies ist der Fall, wenn das PostgreSQL-Back-End beendet wird.

Sie können den PostgreSQL-Parameter tcp_keepalives_idle auf einen kleinen Wert setzen, um die Zeit bis zum Erkennen einer Verbindung zu verringern.

Verwandte Themen