Funktionen
-
Mehrere Pooling-Modi mit unterschiedlich restriktiver Verbindungszuweisung:
- Sitzungs-Pooling
- Die am wenigsten restriktive Methode. Wenn ein Client eine Verbindung herstellt, wird ihm für die gesamte Dauer der Clientverbindung eine Serververbindung zugewiesen. Trennt der Client die Verbindung, wird die Serververbindung wieder in den Pool zurückgegeben. Dieser Modus unterstützt sämtliche PostgreSQL-Funktionen.
- Transaktions-Pooling
- Eine Serververbindung wird einem Client nur für die Dauer einer Transaktion zugewiesen. Sobald PgBouncer erkennt, dass die Transaktion beendet ist, wird die Serververbindung wieder in den Pool zurückgegeben. Dieser Modus ist mit einigen sitzungsbezogenen Funktionen von PostgreSQL nicht kompatibel. Er kann nur eingesetzt werden, wenn die Anwendung darauf abgestimmt ist und keine inkompatiblen Funktionen verwendet. Die folgende Tabelle führt diese Funktionen auf.
- Statement-Pooling
- Die restriktivste Methode. Sie entspricht dem Transaktions-Pooling, lässt jedoch keine Transaktionen mit mehreren Anweisungen zu. Damit wird auf der Clientseite der „Autocommit“-Modus erzwungen; der Modus ist vor allem für PL/Proxy vorgesehen.
-
Geringer Speicherbedarf (standardmäßig 2 kB pro Verbindung), da PgBouncer vollständige Pakete nicht auf einmal einlesen muss.
-
PgBouncer ist nicht an einen einzelnen Backend-Server gebunden. Die Zieldatenbanken können sich auf unterschiedlichen Hosts befinden.
-
Unterstützt für die meisten Einstellungen eine Neukonfiguration im laufenden Betrieb.
-
Unterstützt rollierende Neustarts und Upgrades mit mehreren Prozessen und
so_reuseport. Der bisherige Neustart im laufenden Betrieb (-R) wurde in 1.26.0 entfernt.
SQL-Funktionsmatrix für Pooling-Modi
Die folgende Tabelle zeigt verschiedene PostgreSQL-Funktionen und ihre Kompatibilität mit den Pooling-Modi von PgBouncer. Beachten Sie, dass das Transaktions-Pooling das vom Client erwartete Serververhalten bewusst verändert. Es kann daher nur verwendet werden, wenn die Anwendung darauf abgestimmt ist und keine inkompatiblen Funktionen nutzt.
| Funktion | Sitzungs-Pooling | Transaktions-Pooling |
|---|---|---|
| Startparameter 1 | Ja | Ja |
| SET/RESET | Ja | Für nachverfolgte Parameter 1 |
| LISTEN | Ja | Nie |
| NOTIFY | Ja | Ja |
| WITHOUT HOLD CURSOR | Ja | Ja |
| WITH HOLD CURSOR | Ja | Nie |
| Auf Protokollebene vorbereitete Ausführungspläne | Ja | Ja 2 |
| PREPARE / DEALLOCATE | Ja | Nie |
| Temporäre Tabellen mit ON COMMIT DROP | Ja | Ja |
| Temporäre Tabellen mit PRESERVE/DELETE ROWS | Ja | Nie |
| Zurücksetzen zwischengespeicherter Pläne | Ja | Ja |
| LOAD-Anweisung | Ja | Nie |
| Advisory Locks auf Sitzungsebene | Ja | Nie |
-
Seit 1.26.0 verfolgt PgBouncer alle vom Server gemeldeten Parameter nach, die Clients ändern können:
application_name,client_encoding,DateStyle,default_transaction_read_only(PostgreSQL 14+),IntervalStyle,scram_iterations(PostgreSQL 16+),search_path(PostgreSQL 18+),session_authorization,standard_conforming_stringsundTimeZone. Bei Parametern, die der Server nicht meldet, werden nur die Startwerte nachverfolgt; spätere Änderungen durchSETwerden nicht nachverfolgt. Einzelheiten und Hinweise zu Parametern von Erweiterungen finden sich untertrack_extra_parametersundignore_startup_parameters. ↩︎ ↩︎ -
Die Unterstützung vorbereiteter Anweisungen auf Protokollebene ist aktiviert, wenn
max_prepared_statementsungleich null ist. Der Standardwert ist 200; der Wert 0 deaktiviert diese Unterstützung.PREPARE/DEALLOCATEauf SQL-Ebene bleibt mit Transaktions-Pooling inkompatibel; ausgenommen sindDEALLOCATE ALLundDISCARD ALLbei aktivierter Nachverfolgung. ↩︎