Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Lakebase enthält einen integrierten PgBouncer-Verbindungspooler , der einen Pool mit Serververbindungen verwaltet und über viele Clientverbindungen hinweg freigibt. Der Pooler unterstützt bis zu 10.000 gleichzeitige Clientverbindungen und eignet sich gut für serverlose Funktionen, Web-APIs und andere Anwendungen, die viele kurzlebige Verbindungen öffnen.
Für die Verbindungspooling ist eine systemeigene Postgres-Kennwortauthentifizierung erforderlich. Es ist nicht für OAuth-Rollen verfügbar.
Funktionsweise von Verbindungspooling
Jede Postgres-Verbindung verbraucht Serverressourcen, da Postgres für jeden Client einen separaten Prozess erstellt. Wenn gleichzeitige Verbindungen wachsen, können sie die Verbindungsgrenze des Servers schnell ausschöpfen.
Der Verbindungspooler befindet sich zwischen Ihrer Anwendung und Postgres. Clients stellen eine Verbindung mit dem Pooler her, und der Pooler leitet Abfragen an einen kleineren Pool tatsächlicher Serververbindungen weiter. Lakebase führt PgBouncer im Transaktionsmodus aus, sodass eine Serververbindung nur für die Dauer einer einzelnen Transaktion gehalten und dann an den Pool zurückgegeben wird. Auf diese Weise können viele Clients einen kleinen Pool mit Serververbindungen gemeinsam nutzen.
Verbindungspools
PgBouncer erstellt für jede Datenbank und Benutzerkombination einen separaten Pool. Zwei Benutzer, die eine Verbindung mit derselben Datenbank herstellen, erhalten unabhängige Pools. Die Größe jedes Pools beträgt ca. 90% der Postgres-Grenze max_connections , die je nach Berechnungsgröße variiert.
Wenn in einem Pool alle Verbindungen verwendet werden, warten neue Clientanforderungen in einer Warteschlange. Wenn eine Serververbindung innerhalb von 2 Minuten nicht verfügbar wird, empfängt der Client einen Timeoutfehler.
Das Diagramm zeigt, wie mehrere Clientverbindungen von verschiedenen Benutzern durch separate PgBouncer-Pools (eine pro Benutzer-/Datenbankkombination) geleitet werden, die eine begrenzte Anzahl tatsächlicher Postgres-Verbindungen gemeinsam nutzen.
Verbindungsbeschränkungen
Drei Grenzwerte regeln die Verbindungspooling:
| Grenzwert | Wert | Was sie steuert |
|---|---|---|
Clientverbindungen (max_client_conn) |
10.000 | Maximale Verbindungen von Ihrer Anwendung zu PgBouncer |
Poolgröße (default_pool_size) |
~90% von max_connections |
Aktive Serververbindungen pro (Benutzer, Datenbank) Paar |
Direkte Verbindungen (max_connections) |
Variiert je nach Rechengröße | Maximale direkte Postgres-Verbindungen |
Der Grenzwert für direkte Verbindungen hängt von der Berechnungsgröße ab. Beispielsweise unterstützt ein 8 CU-Compute 1.678 direkte Verbindungen und eine 16 CU-Berechnung unterstützt 3.357. Die vollständige Liste finden Sie unter Computespezifikationen.
Der Grenzwert für 10.000 Clientverbindung bedeutet nicht 10.000 gleichzeitige Abfrageergebnisse. Sie stellt die maximale Anzahl von Clientverbindungen dar, die PgBouncer akzeptiert. Die Anzahl der gleichzeitigen aktiven Transaktionen wird durch die Poolgröße begrenzt, die ungefähr 90 % von max_connections beträgt.
Aktivieren von Verbindungspooling
Voraussetzungen
- Ihr Lakebase Autoscaling-Projekt muss aktiv sein.
- Sie müssen über eine systemeigene Postgres-Kennwortrolle im Projekt verfügen. Anweisungen finden Sie unter Erstellen einer systemeigenen Postgres-Kennwortrolle.
- Um Verbindungspooling mit schreibgeschützten Computeinstanzen zu verwenden, müssen Sie einen Endpunkt für hohe Verfügbarkeit haben, bei dem Zugriff auf schreibgeschützte Computeinstanzen zulassen aktiviert ist. Siehe Hohe Verfügbarkeit.
Steps
- Wechseln Sie in der Lakebase-App zu Ihrem Projekt, und klicken Sie auf "Verbinden".
- Wählen Sie den Zweig und den Rechner aus, mit dem Sie eine Verbindung herstellen möchten.
- Wählen Sie in der Dropdownliste "Rolle " eine systemeigene Postgres-Kennwortrolle aus. Der Verbindungspool-Switch ist nur sichtbar, wenn eine Kennwortrolle ausgewählt ist. Er ist für OAuth-Rollen ausgeblendet.
- Aktivieren Verbindungspooling.
- Kopieren Sie die Verbindungszeichenfolge, und verwenden Sie sie in Ihrer Anwendung.
Dialogfeld "Verbinden", in dem der Schalter "Verbindungspooling" für eine native Postgres-Kennwortrolle aktiviert ist.
Verbindungszeichenfolgenformate
Poolerverbindungszeichenfolgen verwenden einen anderen Hostnamen als direkte Datenbankverbindungen. Der Hostname enthält -pooler nach der Endpunkt-ID für die Berechnung mit Lese-/Schreibzugriff oder -ro-pooler für die schreibgeschützte Berechnung:
| Computetyp | Hostnamenformat | Wann verwenden |
|---|---|---|
| Rechenressourcen mit Lese-/Schreibzugriff | <endpoint-id>-pooler.<region>.<cloud>.databricks.com |
Gesamter Schreib- und Leseverkehr |
| Schreibgeschützter Compute | <endpoint-id>-ro-pooler.<region>.<cloud>.databricks.com |
Nur Leseverkehr. Erfordert einen Endpunkt mit hoher Verfügbarkeit mit aktiviertem Lesezugriff. |
Beide verwenden Port 5432.
Note
Kopieren Sie Ihren Pooler Verbindungszeichenfolge direkt aus dem Dialogfeld Connect in der Lakebase-App, um den richtigen Hostnamen für Ihren Endpunkt, Ihre Region und die Cloud abzurufen.
PgBouncer-Konfiguration
Lakebase verwaltet PgBouncer mit den folgenden Einstellungen. Diese Einstellungen sind festgelegt und können nicht angepasst werden.
[pgbouncer]
pool_mode=transaction
max_client_conn=10000
default_pool_size=0.9 * max_connections
max_prepared_statements=1000
query_wait_timeout=120
| Setting | Beschreibung |
|---|---|
pool_mode=transaction |
Serververbindungen kehren nach jeder Transaktion zum Pool zurück. Siehe Transaktionsmodus. |
max_client_conn=10000 |
Maximale Anzahl gleichzeitiger Client-Verbindungen, die PgBouncer akzeptiert. |
default_pool_size=0.9 * max_connections |
Aktive Serververbindungen pro (Benutzer, Datenbank) Paar. Variiert je nach Berechnungsgröße. |
max_prepared_statements=1000 |
Ermöglicht vorbereitete Anweisungen auf Protokollebene im Transaktionsmodus. Beschränkt nachverfolgte Anweisungen auf 1.000 pro Clientverbindung. |
query_wait_timeout=120 |
Sekunden, die ein Client auf eine Verbindung zum Server wartet, bevor ein Timeout-Fehler auftritt. |
Transaktionsmodus
Der Transaktionsmodus verbessert die Verbindungseffizienz, beschränkt jedoch bestimmte Postgres-Features, die eine dauerhafte Serververbindung erfordern. Die folgenden Features sind bei Verwendung des Verbindungspoolers nicht verfügbar:
Vorbereitete Anweisungen auf SQL-Ebene:
PREPAREundDEALLOCATEAnweisungen werden im Transaktionsmodus nicht unterstützt. Prepared Statements auf der Treiberebene (die intern von psycopg, node-postgres, JDBC und ähnlichen Bibliotheken verwendet werden) funktionieren dank der Unterstützung von PgBouncer auf Protokollebene korrekt. Wenn Fehler im Zusammenhang mit vorbereiteten Anweisungen angezeigt werden, sollten SieprepareThreshold=0festlegen, um das Zwischenspeichern von benannten serverseitigen vorbereiteten Anweisungen zu deaktivieren.Einstellungen auf Sitzungsebene:
SETBefehle werden nicht über Transaktionen hinweg beibehalten, da jede Transaktion möglicherweise eine andere Serververbindung verwendet. Beispiel:BEGIN; SET search_path TO myschema; SELECT * FROM mytable; -- works in this transaction COMMIT; -- connection returns to pool after COMMIT SELECT * FROM mytable; -- ERROR: relation "mytable" does not existUm eine Einstellung dauerhaft anzuwenden, verwenden Sie
ALTER ROLEstattdessen Folgendes:ALTER ROLE myrole SET search_path TO myschema, public;Temporäre Tabellen im Sitzungs-Speicher: Temporäre Tabellen, die über Transaktionen hinweg bestehen, sind nicht verfügbar. Eine an den Pool zurückgegebene Verbindung kann einem anderen Client in der nächsten Transaktion zugewiesen werden.
WITH HOLDCursor: Cursor, die mitWITH HOLDeine dauerhafte Verbindung erfordern, werden nicht unterstützt.Empfehlungssperren: PgBouncer unterstützt keine Empfehlungssperren. Empfehlungssperren erfordern eine dauerhafte Serververbindung, die im Transaktionsmodus nicht verfügbar ist.
LISTEN/NOTIFY: Nicht unterstützt. Verwenden Sie eine direkte (nicht poolierte) Verbindung für Anwendungen, für die pub/sub Messaging erforderlich ist.pg_dumpund Schemamigrationen: Verwenden Sie eine direkte Verbindung fürpg_dump, Schemamigrationen und andere Tools, die auf Sitzungsebene basieren.
Note
Verwenden Sie für Anwendungen, die Postgres-Funktionen auf Sitzungsebene erfordern, eine direkte Verbindungszeichenfolge aus dem Dialogfeld Connect, ohne den Schalter Verbindungspooling zu aktivieren.