Mit verwaltetem Verbindungs-Pooling können Sie Ihre Arbeitslasten skalieren, indem Sie die Ressourcennutzung und die Verbindungs-Latenz für Ihre Cloud SQL-Instanzen optimieren. PostgreSQL erstellt für jede Verbindung einen neuen Prozess, was zu einer höheren Arbeitsspeichernutzung und einem höheren Aufwand für die Einrichtung der Verbindung führt. In Architekturen, in denen häufig viele kurzlebige Verbindungen hergestellt werden, z. B. bei Microservices oder serverlosen Anwendungen, die in Cloud Run ausgeführt werden, kann sich dieser Aufwand auf die Datenbankleistung und -skalierbarkeit auswirken.
Wenn verwaltetes Verbindungs-Pooling aktiviert ist, stellen Clients eine Verbindung zu einem Cluster mit Verbindungspools her, anstatt direkt eine Verbindung zum Datenbankserver herzustellen. Diese dynamische Zuweisung führt zu Leistungsverbesserungen, insbesondere bei skalierten Verbindungen, da plötzliche Verbindungsspitzen abgefangen und vorhandene Datenbankverbindungen wiederverwendet werden.
Verbindungspooler und Verbindungspools
Wenn Clientanwendungen eine Verbindung zu einer Instanz mit aktiviertem verwaltetem Verbindungs-Pooling herstellen, stellen sie eine Verbindung zu einem Cluster mit Verbindungspools her, anstatt direkt eine Verbindung zum Datenbankserver herzustellen. Der Cluster mit Verbindungspools besteht aus einem oder mehreren Verbindungspoolern. Ein Verbindungspooler ist ein Datenbank-Proxydienst, der Datenbankverbindungen zwischen Clientanwendungen und dem Datenbankserver verwaltet und weiterleitet.
Ein Verbindungspooler verwaltet Verbindungspools als Gruppe offener, wiederverwendbarer Datenbankserververbindungen pro Datenbank- und Nutzerpaar.
Wenn eine authentifizierte Clientanwendung als bestimmter Nutzer eine Verbindung zu einer Datenbank herstellt, leitet der Verbindungspooler die Anfrage an den entsprechenden Verbindungspool weiter:
- Wenn im Pool eine inaktive Serververbindung verfügbar ist, weist der Verbindungspooler sie der Clientanfrage zu.
- Wenn keine inaktive Serververbindung verfügbar ist und das Poollimit (
max_pool_size) noch nicht erreicht wurde, erstellt der Verbindungspooler eine neue Serververbindung im Pool. - Wenn alle Serververbindungen im Pool verwendet werden und das Poollimit erreicht wurde, wechselt der Client in einen Wartezustand, bis eine Serververbindung verfügbar wird.
- Nach Abschluss der Anfrage wird die Serververbindung zur Wiederverwendung an den Verbindungspool zurückgegeben.
Beziehung zwischen Poolern und Pools
Ein einzelner Verbindungspooler kann mehrere Verbindungspools gleichzeitig verwalten, wobei ein Pool für jedes eindeutige Datenbank- und Datenbanknutzerpaar vorhanden ist, das eine Verbindung über diesen Pooler herstellt.
Wenn in Ihrer Instanz mehrere Verbindungspooler ausgeführt werden, verwaltet jeder Verbindungspooler unabhängig eine eigene Gruppe von Verbindungspools für die Datenbank- und Nutzerpaare, die an ihn weitergeleitet werden.
Die Leistung und Skalierbarkeit des verwalteten Verbindungs-Poolings funktionieren auf mehreren Ebenen:
Skalierung des Clusters mit Verbindungspools:Die Anzahl der Verbindungspooler im Cluster wird automatisch basierend auf der Anzahl der für die Instanz bereitgestellten vCPU-Cores skaliert (Anzahl der vCPUs geteilt durch 4, mindestens 1 Verbindungspooler). So wird verhindert, dass das Verbindungs-Pooling zu einem Engpass wird. Eingehende Clientverbindungen werden auf die verfügbaren Verbindungspooler verteilt. Beispiel:
- Eine Instanz mit 2 oder 4 vCPUs führt 1 Verbindungspooler aus.
- Eine Instanz mit 8 vCPUs führt 2 Verbindungspooler aus.
- Eine Instanz mit 16 vCPUs führt 4 Verbindungspooler aus.
- Eine Instanz mit 32 vCPUs führt 8 Verbindungspooler aus.
- Eine Instanz mit 64 vCPUs führt 16 Verbindungspooler aus.
Skalierung von Poolern und Pools:Da Verbindungspooler unabhängig voneinander arbeiten, werden alle Konfigurationsoptionen pro Verbindungspooler und nicht global für die Instanz angewendet. Serververbindungen werden bei Bedarf bis zu einem durch
max_pool_sizedefinierten Limit für jeden verwalteten Pool in jedem Verbindungspooler erstellt. Wennmax_pool_sizebeispielsweise auf 50 für eine Instanz mit 2 Verbindungspoolern (8 vCPUs) festgelegt ist, kann jeder Verbindungspooler bis zu 50 Serververbindungen für ein bestimmtes Datenbank- und Nutzerpaar öffnen, sodass insgesamt bis zu 100 Serververbindungen für diesen Pool in der Instanz möglich sind. Die richtige Poolgröße ist entscheidend für die Leistung. Wenn Sie diesen Wert zu niedrig festlegen, kann dies zu längeren Wartezeiten für Verbindungen führen. Wenn Sie ihn zu hoch festlegen, können Datenbankserverressourcen verschwendet werden.Konfigurationen für Clientverbindungen:Grenzwerte für Clientverbindungen und das Timeout-Verhalten werden ebenfalls pro Verbindungspooler konfiguriert. Wichtige Parameter sind:
max_client_connections: begrenzt die maximale Anzahl der zulässigen Clientverbindungen pro Verbindungspooler (der Standardwert ist 5.000 Verbindungen für jeden Verbindungspooler).client_connection_idle_timeout: steuert die Dauer, die eine Clientverbindung inaktiv bleiben kann, bevor sie unterbrochen wird.query_wait_timeout: steuert die Dauer, die eine Abfrage auf eine verfügbare Serververbindung im Pool wartet, bevor sie unterbrochen wird.
Anwendungsfälle und Überlegungen
Beachten Sie Folgendes, wenn Sie verwaltetes Verbindungs-Pooling verwenden:
- Sie können verwaltetes Verbindungs-Pooling für alle transaktionalen Arbeitslasten verwenden. Es bietet jedoch den größten Durchsatz- und Latenzvorteil für Anwendungen mit kurzlebigen Verbindungen oder Anwendungen, die zu einem plötzlichen Anstieg der Verbindungen führen.
- Bei langlebigen Verbindungen kann die Verbindungsleistung mit verwaltetem Verbindungs-Pooling etwas geringer sein als bei einer direkten Verbindung. In diesem Fall bietet verwaltetes Verbindungs-Pooling eine Verbindungsskalierung, wenn die Anzahl der Verbindungen sehr hoch ist. Bei Anwendungen, die in der Regel langlebige Verbindungen herstellen, sollten Sie jedoch möglicherweise kein Verbindungs-Pooling verwenden.
- Sie können Identity and Access Management verwenden, um Verbindungen zu Ihrer Instanz zu sichern, je nach dem Port, der vom verwalteten Verbindungs-Pooling verwendet wird. Weitere Informationen zur Funktionsweise von IAM in Cloud SQL und zu den Einschränkungen finden Sie unter IAM-Authentifizierung.
Weitere Informationen zum Aktivieren des verwalteten Verbindungs-Poolings finden Sie unter Verwaltetes Verbindungs-Pooling konfigurieren.
Voraussetzungen
Damit Sie verwaltetes Verbindungs-Pooling verwenden können, muss Ihre Instanz die folgenden Anforderungen erfüllen:
- Ihre Instanz muss eine Cloud SQL Enterprise Plus-Instanz sein.
- Sie müssen nur über eine direkte Verbindung oder den Cloud SQL Auth-Proxy mit Ihrer Instanz verbunden sein.
- Ihre Instanz muss für den Zugriff auf private Dienste eingerichtet sein, eine öffentliche IP-Adresse verwenden oder Private Service Connect muss aktiviert sein.
- Ihre Instanz muss die neue Cloud SQL-Netzwerkarchitektur verwenden.
- Für verwaltetes Verbindungs-Pooling ist eine Wartungsversion von mindestens
POSTGRES_$version.R20250727.00_14erforderlich. Weitere Informationen zur Durchführung der Self-Service-Wartung finden Sie unter Self-Service-Wartung durchführen.
Pooling-Optionen
Mit verwaltetem Verbindungs-Pooling können Sie mit dem Parameter pool_mode verwalten, wie Verbindungen gepoolt werden. Sie haben die folgenden Pooling-Optionen:
transaction(Standard): Verbindungen werden auf Transaktionsebene gepoolt. Verbindungen werden nach Abschluss jeder Transaktion an den Pool zurückgegeben. Cloud SQL empfiehlt, den Pooling-Modustransactionfür kurzlebige Verbindungen zu verwenden.session: Verbindungen werden auf Sitzungsebene gepoolt. Jede Sitzung verwendet eine dedizierte Serververbindung, die einen Sitzungsstatus beibehält. Dadurch wird die Pooling-Effizienz verringert. Wenn ein Client die Verbindung trennt, wird die Serververbindung an den Verbindungspool zurückgegeben.
Erweiterte Konfigurationsoptionen
Sie können verwaltetes Verbindungs-Pooling mit den folgenden Konfigurationsoptionen anpassen.
| Konfigurationsname | Beschreibung |
|---|---|
max_pool_size
|
Die maximale Anzahl von Serververbindungen, die für ein Datenbank- und Nutzer
paar in jedem Verbindungspool zulässig sind. Diese Konfiguration wird pro
Verbindungspooler angewendet. Legen Sie diesen Wert basierend auf der Instanzgröße und den
Anforderungen an die Poolgröße fest.
Der Standardwert ist 50 Verbindungen pro Datenbank- und
Nutzerpaar für jeden Verbindungspooler.
|
min_pool_size
|
Die Mindestanzahl von Serververbindungen, die jederzeit in jedem
Verbindungspool verfügbar sind. Diese Konfiguration wird pro Verbindungspooler angewendet.
Legen Sie diesen Wert basierend auf der Instanzgröße und den Anforderungen an die Poolgröße
fest.
Wenn die Anzahl der Serververbindungen kleiner als die min_pool_size ist, werden mit dieser Einstellung weitere Server
Verbindungen zum Pool hinzugefügt. So können Sie plötzliche Anstiege der Datenbanklast nach Phasen der Inaktivität verwalten und sicherstellen, dass Verbindungen verfügbar und einsatzbereit sind.
Der Standardwert ist 0 Verbindungen.
|
max_client_connections
|
Die maximale Anzahl von Clientverbindungen, die pro Verbindungspooler zulässig sind
wenn verwaltetes Verbindungs-Pooling verwendet wird. Legen Sie diesen Wert basierend
auf der Instanzgröße und den Anforderungen an die Poolgröße fest.
Der Standardwert ist 5,000 Verbindungen für jeden Verbindungspooler.
|
max_prepared_statements
|
Die maximale Anzahl von benannten vorbereiteten Anweisungen auf Protokollebene
die pro Verbindungspooler im
transaction Pooling-Modus unterstützt werden.
Legen Sie diesen Wert basierend auf der Instanzgröße und den Anforderungen an die Poolgröße
fest.
Wenn Sie diese Option auf 0 setzen, wird die Unterstützung für vorbereitete Anweisungen
deaktiviert. Für eine optimale Leistung sollte dieser Wert die Anzahl der häufig verwendeten vorbereiteten Anweisungen in Ihrer Datenbank übersteigen. Eine hohe Anzahl
vorbereiteter Anweisungen beim verwalteten Verbindungs-Pooling kann zu einer
erhöhten Arbeitsspeichernutzung führen.
Der Standardwert ist 0 Anweisungen.
|
client_connection_idle_timeout
|
Die Zeit, die eine Clientverbindung inaktiv bleibt, bevor sie unterbrochen wird.
Dieser Wert kann zwischen 0 und 2,147,483
Sekunden liegen. Der Standardwert ist 0 Sekunden.
|
server_connection_idle_timeout
|
Die Zeit, die eine Serververbindung inaktiv bleibt, bevor sie unterbrochen wird.
Dieser Wert kann zwischen 0 und 2,147,483 Sekunden liegen. Der Standardwert ist 600 Sekunden.
|
query_wait_timeout
|
Die Zeit, die eine Abfrage auf eine Serververbindung in einem Pool wartet, bevor
sie unterbrochen wird.
Wenn Sie diese Option auf 0 setzen, wird sie deaktiviert, wodurch eine unbegrenzte Client Warteschlange möglich ist. Wenn Sie diese Option aktivieren, wird verhindert, dass nicht reagierende Server Verbindungen blockieren. Dieser Wert kann zwischen 0 und 2,147,483
Sekunden liegen. Der Standardwert ist 120 Sekunden.
|
ignore_startup_parameters
|
Die Parameter, die ignoriert werden sollen und die standardmäßig nicht in den Startpaketen für verwaltetes Verbindungs-Pooling erfasst werden. |
server_lifetime
|
Die maximale Zeit, die eine Serververbindung ungenutzt bleibt, bevor
sie durch das verwaltete Verbindungs-Pooling geschlossen wird. Wenn der Wert auf
0 Sekunden festgelegt ist, wird die Verbindung sofort nach der Verwendung geschlossen.
Der Standardwert ist 3600 Sekunden.
|
Beschränkungen
Beachten Sie bei der Verwendung des verwalteten Verbindungs-Poolings mit Ihren Cloud SQL Enterprise Plus-Instanzen die folgenden Einschränkungen:
- Wenn Sie verwaltetes Verbindungs-Pooling für eine vorhandene Instanz aktivieren, wird die Datenbank neu gestartet.
- Verwaltetes Verbindungs-Pooling kann nur mit dem Cloud SQL Auth-Proxy Version 2.15.2 und höher verwendet werden.
- Wenn Sie den Cloud SQL Go Language Connector verwenden, empfehlen wir mindestens die Go-Version
1.24. Wenn Sie Go Version 1.23 oder früher verwenden, kann es bei der Verwendung des verwalteten Verbindungs-Poolings zu Leistungseinschränkungen kommen. Wenn Sie verwaltetes Verbindungs-Pooling im Pooling-Modus
transactionverwenden, werden die folgenden SQL-Funktionen nicht unterstützt:SET/RESETLISTENWITH HOLD CURSORPREPARE/DEALLOCATEPRESERVE/DELETE ROWtemporäre TabellenLOAD- Advisory-Sperren auf Sitzungsebene
Wenn Sie die asyncpg-Datenbankschnittstellenbibliothek für den Pooler des verwalteten Verbindungs-Poolings auf den Ports 3307 und 6432 verwenden, müssen Sie die
max_prepared_statementsauf einen Wert größer als 0 aktualisieren, um die Unterstützung für vorbereitete Anweisungen im Pooler des verwalteten Verbindungs-Poolings zu aktivieren.Wenn Sie Cloud SQL for PostgreSQL Version 17 verwenden, wird die Option
sslnegotiation=directnicht unterstützt.Die Client-IP-Erfassung wird beim verwalteten Verbindungs-Pooling nicht unterstützt. Wenn Sie in Query Insights die Option Client-IP-Adressen speichern aktivieren, werden Client-IP-Adressen als
localanstelle der IP-Adresse selbst angezeigt.
Ports, die vom verwalteten Verbindungs-Pooling verwendet werden
Wenn Sie verwaltetes Verbindungs-Pooling aktivieren, ändern sich die Ports, die von Cloud SQL-Instanzen verwendet werden, um Datenbanktraffic zu verarbeiten. Sie können Identity and Access Management verwenden, um Verbindungen je nach Port zu sichern.
Die vom verwalteten Verbindungs-Pooling verwendeten Ports und die verfügbaren IAM-Optionen sind wie folgt:
TCP-Port
5432: Wird für direkte Verbindungen vom Postgres-Datenbankserver verwendet. Dies ist die Standardportnummer für die direkte Verbindung mit dem psql-Client.TCP-Port
6432: Wird für direkte Verbindungen vom Server des verwalteten Verbindungs-Poolings verwendet. Wenn Sie diesen Port verwenden möchten, geben Siepsql -p 6432an, wenn Sie direkt mit dem psql-Client eine Verbindung herstellen.Sie können jede IAM-Authentifizierungsoption verwenden, wenn Sie diesen Port verwenden.
TCP-Port
3307: Wird nur für Verbindungen mit dem Cloud SQL Auth-Proxy von einem Server des verwalteten Verbindungs-Poolings verwendet. Wenn Sie den Cloud SQL Auth-Proxy verwenden, um eine Verbindung zum verwalteten Verbindungs-Pooling herzustellen, wird diese Portnummer mit dem Cloud SQL Auth-Proxy-Client konfiguriert und kann nicht geändert werden.Sie können jede IAM-Authentifizierungsoption, oder automatische IAM-Datenbankauthentifizierung mit diesem Port verwenden.
Serververbindungen, die vom verwalteten Verbindungs-Pooling verwendet werden
Die Datenbankkonfiguration max_connections begrenzt die maximale Anzahl von Serververbindungen, die ein Pooler im verwalteten Verbindungs-Pooling verwenden kann.
Cloud SQL empfiehlt, diesen Wert basierend auf den Arbeitslastanforderungen Ihrer Instanz und der Größe der Datenbankinstanz anzupassen. Bei Spitzenlast kann die Anzahl der Verbindungen für die Authentifizierung sehr hoch sein.
Wenn Sie die Standardeinstellung max_pool_size von 50 Verbindungen pro Pool verwenden, empfehlen wir, mindestens 15 Serververbindungen pro CPU für das verwaltete Verbindungs-Pooling zu reservieren, wenn Sie das Flag max_connections für Ihre Datenbank festlegen.
Weitere Informationen zum Flag max_connections finden Sie unter
Maximale Anzahl gleichzeitiger Verbindungen.
Informationen zum Ändhing des max_connections Flags für Ihre Instanz,
siehe Datenbank-Flags konfigurieren.