Groepsgewijze verbindingen gebruiken

Important

Lakebase Autoscaling is de nieuwste versie van Lakebase, met automatisch schalen van rekenkracht, schaal-tot-nul, branching-functionaliteit en direct herstellen. Zie Beschikbaarheid van regio's voor ondersteunde regio's. Als u een door Lakebase ingericht gebruiker bent, raadpleegt u Lakebase Ingericht.

Lakebase bevat een ingebouwde PgBouncer-verbindingspooler die een groep serververbindingen onderhoudt en deze deelt via veel clientverbindingen. De pooler ondersteunt maximaal 10.000 gelijktijdige verbindingen, waardoor deze geschikt is voor serverloze functies, web-API's en andere toepassingen die veel kortdurende verbindingen openen.

Voor groepsgewijze verbindingen is systeemeigen Postgres-wachtwoordverificatie vereist. Het is niet beschikbaar voor OAuth- of Azure Databricks identiteitsrollen.

Hoe groepsgewijze verbindingen werken

Elke Postgres-verbinding verbruikt serverbronnen omdat Postgres een afzonderlijk proces voor elke client maakt. Toepassingen die veel kortdurende verbindingen openen, zoals web-API's en serverloze functies, kunnen de verbindingslimiet van de server snel uitputten.

De verbindingspooler bevindt zich tussen uw toepassing en Postgres. Clients maken verbinding met de pooler en de pooler stuurt query's door naar een kleinere groep werkelijke serververbindingen. Wanneer een transactie is voltooid, retourneert de pooler de serververbinding met de pool, waardoor deze beschikbaar is voor de volgende client.

Lakebase voert PgBouncer uit in de transactiemodus. In de transactiemodus wordt een serververbinding bewaard voor de duur van één transactie en vervolgens geretourneerd aan de pool. Hierdoor kunnen veel clients een kleine groep serververbindingen delen.

De transactiemodus verbetert de efficiëntie van de verbinding, maar beperkt bepaalde Postgres-functies waarvoor een permanente serververbinding is vereist. Zie beperkingen voor de transactiemodus.

Verbindingsgroepen

PgBouncer maakt een afzonderlijke pool voor elke database en combinatie van gebruikers. Twee gebruikers die verbinding maken met dezelfde database, krijgen onafhankelijke pools. De grootte van elke pool is ongeveer 90% van de limiet voor directe verbindingen van de berekening.

Wanneer alle verbindingen in een pool worden gebruikt, wachten nieuwe clientaanvragen in een wachtrij. Als een serververbinding niet binnen 2 minuten beschikbaar is, ontvangt de client een time-outfout.

Verbindingslimieten

Drie limieten zijn van toepassing op groepsgewijze verbindingen:

Limiet Waarde Wat het bestuurt
Clientverbindingen (max_client_conn) 10.000 Maximum aantal verbindingen van uw toepassing naar PgBouncer
Poolgrootte (default_pool_size) ~90% van max_connections Actieve serververbindingen per paar (gebruiker, database)
Directe verbindingen (max_connections) Verschilt per berekeningseenheid Maximum aantal directe Postgres-verbindingen

De limiet voor directe verbindingen is afhankelijk van uw rekenkracht. Een 8 CU-rekenproces ondersteunt bijvoorbeeld 1678 directe verbindingen en een 16 CU-rekenkracht ondersteunt 3.357. Zie Compute-specificaties voor de volledige lijst.

Met groepsgewijze verbindingen kan uw toepassing veel meer gelijktijdige gebruikers ondersteunen dan alleen de limiet voor directe verbindingen zou toestaan.

Prerequisites

  • Uw Lakebase Autoscaling-project moet actief zijn.
  • U moet een systeemeigen Postgres-wachtwoordrol hebben in het project. Zie Een systeemeigen Postgres-wachtwoordrol maken voor instructies.
  • Als u de pooler met het kenmerk Alleen-lezen wilt gebruiken, moet u een eindpunt met hoge beschikbaarheid hebben met toegang tot alleen-lezen rekeninstanties ingeschakeld. Zie Hoge beschikbaarheid.

Groepsgewijze verbindingen inschakelen

  1. Ga in de Lakebase-app naar uw project en klik op Verbinden.
  2. Selecteer de vertakking en rekenkracht waarmee u verbinding wilt maken.
  3. Selecteer in de vervolgkeuzelijst Rol een systeemeigen Postgres-wachtwoordrol. De wisselknop Verbindingspooling is alleen zichtbaar wanneer een wachtwoordrol is geselecteerd. Het is verborgen voor OAuth- en Azure Databricks identiteitsrollen.
  4. Schakel groepsgewijze verbindingen in.
  5. Kopieer de verbindingsreeks en gebruik deze in uw toepassing.

Dialoogvenster verbinding met de schakelaar Pooled connections ingeschakeld voor een native Postgres-wachtwoordrol.

Indelingen van verbindingsstrings

Pooler-verbindingsreeksen gebruiken een andere hostnaam dan directe databaseverbindingen:

Typ Hostnaamindeling Wanneer te gebruiken
Lees/schrijfpooler <endpoint-id>-pooler.<region>.<cloud>.databricks.com Al het schrijf- en leesverkeer dat wordt gerouteerd via de pooler
Pooler met het kenmerk Alleen-lezen <endpoint-id>-ro-pooler.<region>.<cloud>.databricks.com Alleen verkeer lezen. Vereist een eindpunt voor hoge beschikbaarheid waarvoor leestoegang is ingeschakeld.

Beide poolertypen gebruiken poort 5432.

Opmerking

Kopieer de pooler verbindingsreeks rechtstreeks vanuit het dialoogvenster Connect in de Lakebase-app om de juiste hostnaam op te halen voor uw eindpunt, regio en cloud.

Beperkingen voor transactiemodus

De volgende Postgres-functies zijn niet beschikbaar wanneer u de verbindingspooler gebruikt:

  • Voorbereide instructies op SQL-niveau: PREPARE en DEALLOCATE instructies worden niet ondersteund in de transactiemodus. Voorbereide instructies op stuurprogrammaniveau (intern gebruikt door psycopg2, node-postgres, JDBC en vergelijkbare bibliotheken) werken correct via ondersteuning op protocolniveau van PgBouncer. Als u voor JDBC fouten ziet met betrekking tot voorbereide instructies, stelt u deze in prepareThreshold=0 om het opslaan van voorbereide instructies aan de serverzijde uit te schakelen.

  • Instellingen op sessieniveau: SET opdrachten blijven niet behouden tussen transacties, omdat elke transactie een andere serververbinding kan gebruiken. Voorbeeld:

    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
    

    Als u een instelling permanent wilt toepassen, gebruikt u ALTER ROLE in plaats daarvan:

    ALTER ROLE myrole SET search_path TO myschema, public;
    
  • Tijdelijke tabellen die in een sessie worden bewaard: tijdelijke tabellen die tussen transacties blijven bestaan, zijn niet beschikbaar. In de volgende transactie kan een verbinding die aan de pool wordt geretourneerd, worden toegewezen aan een andere client.

  • WITH HOLD cursors: Cursors die worden gedeclareerd met WITH HOLD vereisen een permanente verbinding en worden niet ondersteund.

  • Adviesvergrendelingen: PgBouncer biedt geen ondersteuning voor adviesvergrendelingen. Adviesvergrendelingen vereisen een permanente serververbinding, die niet beschikbaar is in de transactiemodus.

  • LISTEN/NOTIFY: Niet ondersteund. Gebruik een directe (niet-pool)verbinding voor toepassingen waarvoor pub-/subberichten zijn vereist.

  • pg_dump en schemamigraties: Gebruik een directe verbinding voor pg_dumpschemamigraties en andere hulpprogramma's die afhankelijk zijn van de status op sessieniveau.

Opmerking

Voor toepassingen waarvoor Postgres-functies op sessieniveau zijn vereist, gebruikt u een directe verbindingsreeks vanuit het dialoogvenster Connect zonder de wisselknop Connection-pooling in te schakelen.

Volgende stappen 

  • Verbindingsreeksen: Referentie voor verbindingsreeksformaten voor directe verbindingen. Zie Verbindingsreeksen.
  • Postgres-rollen maken: systeemeigen Postgres-wachtwoordrollen maken die vereist zijn voor groepsgewijze verbindingen. Zie Postgres-rollen maken.
  • Over verificatie: Vergelijking van OAuth- en wachtwoordverificatiemethoden. Zie Over authenticatie.