Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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
- Ga in de Lakebase-app naar uw project en klik op Verbinden.
- Selecteer de vertakking en rekenkracht waarmee u verbinding wilt maken.
- 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.
- Schakel groepsgewijze verbindingen in.
- Kopieer de verbindingsreeks en gebruik deze in uw toepassing.
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:
PREPAREenDEALLOCATEinstructies 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 inprepareThreshold=0om het opslaan van voorbereide instructies aan de serverzijde uit te schakelen.Instellingen op sessieniveau:
SETopdrachten 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 existAls u een instelling permanent wilt toepassen, gebruikt u
ALTER ROLEin 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 HOLDcursors: Cursors die worden gedeclareerd metWITH HOLDvereisen 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_dumpen schemamigraties: Gebruik een directe verbinding voorpg_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.