Verwenden von Verbindungspooling

Von Bedeutung

Lakebase Autoscaling ist die neueste Version von Lakebase mit automatischer Berechnung, Skalierung bis Null, Verzweigung und sofortiger Wiederherstellung. Unterstützte Regionen finden Sie unter "Verfügbarkeit der Region". Wenn Sie ein Lakebase Provisioned-Benutzer sind, lesen Sie Lakebase Provisioned.

Lakebase enthält einen integrierten PgBouncer-Verbindungspooler, der einen Pool mit Serververbindungen verwaltet und diese zwischen vielen Clientverbindungen teilt. Der Pooler unterstützt bis zu 10.000 gleichzeitige Verbindungen 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. Sie ist für OAuth- oder Azure Databricks Identitätsrollen nicht verfügbar.

Funktionsweise von Verbindungspooling

Jede Postgres-Verbindung verbraucht Serverressourcen, da Postgres für jeden Client einen separaten Prozess erstellt. Anwendungen, die viele kurzlebige Verbindungen wie Web-APIs und serverlose Funktionen öffnen, können 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. Wenn eine Transaktion abgeschlossen ist, gibt der Pooler die Serververbindung mit dem Pool zurück und stellt sie für den nächsten Client zur Verfügung.

Lakebase führt PgBouncer im Transaktionsmodus aus. Im Transaktionsmodus wird eine Serververbindung für die Dauer einer einzelnen Transaktion gehalten und dann an den Pool zurückgegeben. Auf diese Weise können viele Clients einen kleinen Pool mit Serververbindungen gemeinsam nutzen.

Der Transaktionsmodus verbessert die Verbindungseffizienz, beschränkt jedoch bestimmte Postgres-Features, die eine dauerhafte Serververbindung erfordern. Siehe Einschränkungen des Transaktionsmodus.

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% des Direkten Verbindungslimits der Berechnung.

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.

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.

Durch das Verbindungspooling kann Ihre Anwendung weit mehr gleichzeitige Benutzer unterstützen, als die direkte Verbindungsgrenze allein zulässt.

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 den schreibgeschützten Pooler verwenden zu können, benötigen Sie einen hochverfügbaren Endpunkt mit aktiviertem Zugriff auf schreibgeschützte Computeinstanzen. Siehe Hohe Verfügbarkeit.

Aktivieren von Verbindungspooling

  1. Wechseln Sie in der Lakebase-App zu Ihrem Projekt, und klicken Sie auf "Verbinden".
  2. Wählen Sie den Zweig und den Rechner aus, mit dem Sie eine Verbindung herstellen möchten.
  3. Wählen Sie in der Dropdownliste "Rolle " eine systemeigene Postgres-Kennwortrolle aus. Die Umschaltfläche Verbindungspooling ist nur sichtbar, wenn eine Passwortrolle ausgewählt ist. Es ist für OAuth- und Identitätsrollen von Azure Databricks ausgeblendet.
  4. Aktivieren Verbindungspooling.
  5. 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

Pooler-Verbindungszeichenfolgen verwenden einen anderen Hostnamen als direkte Datenbankverbindungen:

Typ Hostnamenformat Wann verwenden
Lese-/Schreib-Pooler <endpoint-id>-pooler.<region>.<cloud>.databricks.com Aller Lese- und Schreibverkehr wird über den Pooler weitergeleitet.
Nur-lesbarer Pooler <endpoint-id>-ro-pooler.<region>.<cloud>.databricks.com Nur Leseverkehr. Erfordert einen Endpunkt mit hoher Verfügbarkeit mit aktiviertem Lesezugriff.

Beide Poolertypen 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.

Einschränkungen des Transaktionsmodus

Die folgenden Postgres-Features sind bei Verwendung des Verbindungspoolers nicht verfügbar:

  • Vorbereitete Anweisungen auf SQL-Ebene: PREPARE und DEALLOCATE Anweisungen werden im Transaktionsmodus nicht unterstützt. Vorbereitete Anweisungen auf Treiberebene (intern von psycopg2, node-postgres, JDBC und ähnlichen Bibliotheken) funktionieren ordnungsgemäß über die Unterstützung auf Protokollebene von PgBouncer. Wenn Fehler im Zusammenhang mit vorbereiteten Anweisungen angezeigt werden, sollten Sie prepareThreshold=0 festlegen, um das Zwischenspeichern von benannten serverseitigen vorbereiteten Anweisungen zu deaktivieren.

  • Einstellungen auf Sitzungsebene: SET Befehle 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 exist
    

    Um eine Einstellung dauerhaft anzuwenden, verwenden Sie ALTER ROLE stattdessen 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 HOLD Cursor: Cursor, die mit WITH HOLD eine 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_dump und Schemamigrationen: Verwenden Sie eine direkte Verbindung für pg_dump, Schemamigrationen und andere Tools, die auf Sitzungsebene basieren.

Note

Verwenden Sie für Anwendungen, die Funktionen auf Sitzungsebene erfordern, eine direkte Verbindungszeichenfolge aus dem Dialogfeld Connect, ohne die Umschaltfläche für Verbindungs-Pooling zu aktivieren.

Nächste Schritte