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

Flask und SQLAlchemy verursachen viel IDLE in Transaktionsverbindungen in PostgreSQL

Ich habe gesehen, dass diese Situation auftritt, wenn Sie Flask im Debug-Modus . Wenn Ihr Code eine Ausnahme auslöst und der Debugger einsetzt, wird die Transaktion niemals „zurückgesetzt“ oder „entfernt“. Daher wird die Sitzung, die für die fehlgeschlagene Anfrage verwendet wurde, nie an den Pool zurückgegeben.

Die Lösung besteht darin, den Debug-Modus zu deaktivieren.

BEARBEITEN:

Es gibt noch einen anderen Umstand, wo ich das gesehen habe. Wenn Sie Code haben, der autonom ausgeführt wird (d. h. nicht Teil einer HTTP-Transaktion ist – wie ein unabhängiger Thread, der beim Start der Flask-App gestartet und gestartet wird), ist normalerweise ein Ruhezustand erforderlich. Wenn Sie vor dem Ruhezustand auf die Sitzung zugreifen, kommt es während des Ruhezustands zu einer hängenden Transaktion wie dieser.

Eine andere Möglichkeit besteht darin, dass Sie über die Funktion „App erstellen“ auf eine Sitzung zugreifen. Wenn Sie dies tun, stellen Sie sicher, dass Sie es .remove() entfernen. Andernfalls könnte diese Sitzung im Haupt-Thread einer Gevent-App hängen bleiben.