PostgreSQL Connection-Pooling
Das Connection-Pooling wurde neu mit Version 7.9.0 eingeführt wurden und kann global aktiviert oder deaktiviert werden, siehe Konfiguration.
Standardmäßig ist das Connection-Pooling aktiviert.
Zum temporären Aktivieren/Deaktivieren kann der Endpunkt
/iwan/config?EnablePostgresConnectionPool={1|0}
aufgerufen werden.
Verwendung findet diese Funktion für die Ebenentypen PostgreSql und PointDatasource.
Ziel
Reduzieren des Dauer des Aufbaus von Verbindungen zur PostgreSQL Datenbank und reduzieren redundanter Aufrufe, bspw. setzten des search_path, Abrufen der OIDs Geometrietypen von der Datenbank.
Erstgenanntes wäre auch durch einen Connection-Pooler, bspw. PgBouncer, gegeben. Die Reduzierung der Roundtrips ist sehr anwendungsspezifisch und auch der Grund dieser Implementierung.
Identifikation identischer Verbindungen
Die Datenbankverbindungen werden anhand der folgenden Parameter identifiziert:
- alle Bestandteile der Verbindungszeichenfolge (außer den Parametern keepalives und client_encoding)
- dem Wert des Initial-Statements (hier vor allem der search_path)
Die Reihenfolge der Argumente im Connection-String spielt dabei keine Rolle.
Achten Sie in diesem Zusammenhang auf eine einheitliche Schreibweise der Werte, bspw. bei dem
host
(Severname). Hier werden oft aus Unachtsamkeit Varianten verwendet.Einige Beispiele, die alle das gleiche Ziel meinen:
localhost
,127.0.0.1
,::0
,pcname
,pcname.local
.Empfehlung: Sie sollten diesen Angaben vereinheitlichen
Zuweisen einer Verbindung
Intern wird eine Liste der Datenbankverbindungen geführt. Wenn eine neue Anforderung eintrifft, wird der Identifikator für die Verbindung generiert (siehe oben) und in der Liste geschaut ob es eine bestehende Verbindung mit diesem Identifikator gibt, die aktuell nicht in Verwendung ist und deren Status OK ist.
ist der Zugriff auf die Verbindung "älter" als 5 Sekunden, wir zudem noch geprüft ob die TCP Connection noch gültig ist.
Kann keine freie Verbindung ermittelt werden, wird eine neue Verbindung erstellt und in der Liste gespeichert.
Beenden der Verbindung
Intern wird alle 30 Sekunden die Liste der aktiven Verbindungen durchgegangen, es werden alle Verbindungen geschlossen die nicht in aktiver Verwendung sind und für die eine der Bedingungen zutrifft:
- die Verbindung ist nicht im Status OK
- die TCP Verbindung ist unterbrochen (bspw. durch Beenden der Sitzung auf dem DB Server)
- der letzte Zugriff ist älter als 2 Minuten
- die Verbindung ist seit mehr als 15 Minuten im Pool
- es sind insgesamt mehr als 50 Connection offen
Anzeige der aktiven Verbindungen
Die aktuelle Verwendung kann über den Endpunkt /iwan/ui/connpools
abgerufen werden.
Zuletzt geändert: 02.03.2025 11:02:58 (erstmals erstellt 01.03.2025) // Alias: "iwan7PostgresConnectionPool"