Ich habe ein Django-Setup, das Django 1.6.7 und Postgres 9.3 auf Ubuntu 14.04 LTS verwendet.
Zu jedem Zeitpunkt erhält die Site ungefähr 250 gleichzeitige Verbindungen zur PostgreSQL-Datenbank, einer Quad Core Xeon E5-2670 mit 2,5 GHz und 16 GB RAM. Die durchschnittliche Auslastung dieser Maschine liegt den ganzen Tag über zwischen 20 und 30.
Gelegentlich erhalte ich E-Mails, in denen ich darüber informiert werde, dass das Zeitlimit für Verbindungen zur Datenbank überschritten wurde, und ich schätze, dass das Aktivieren eines Verbindungspools dieses Problem mindert und die Datenbank ein wenig entlastet.
Da wir Django 1.6 verwenden, steht uns das eingebaute Pooling zur Verfügung. Wenn ich jedoch CONN_MAX_AGE auf 10 Sekunden oder 60 Sekunden setze, springt die Anzahl der gleichzeitigen Verbindungen fast sofort auf die maximal zulässige Einstellung (was ungefähr dem Doppelten entspricht, was wir normalerweise sehen), und Verbindungen werden abgewiesen.
Es scheint also, dass die Verbindungen aus irgendeinem Grund bestehen bleiben , aber NICHT wiederverwendet werden.
Woran könnte das liegen?
PS. Wir verwenden Gunicorn auch mit --worker-class = eventlet. Vielleicht ist dies die Quelle unserer Leiden?
quelle