Delen via


PgBouncer bij Azure Database voor PostgreSQL

Azure Database for PostgreSQL flexibele serverinstanties bieden PgBouncer als een ingebouwde oplossing voor verbindingspooling. PgBouncer is een optionele functie die u per databaseserver kunt inschakelen. Het wordt ondersteund in de rekenlagen Algemeen gebruik en Geoptimaliseerd voor geheugen in zowel openbare toegang als particuliere toegangsnetwerken.

PgBouncer wordt uitgevoerd op dezelfde virtuele machine (VM) als de databaseserver voor uw flexibele instantie van Azure Database voor PostgreSQL. Postgres maakt gebruik van een procesmodel voor verbindingen, dus het onderhouden van veel niet-actieve verbindingen is duur. Postgres wordt in resourcebeperkingen uitgevoerd wanneer de server meer dan een paar duizend verbindingen uitvoert. Het belangrijkste voordeel van PgBouncer is het verbeteren van niet-actieve verbindingen en kortdurende verbindingen op de databaseserver.

PgBouncer maakt gebruik van een lichtgewicht model dat gebruikmaakt van asynchrone I/O. Het maakt alleen gebruik van Postgres-verbindingen wanneer dat nodig is, dat wil gezegd, wanneer binnen een geopende transactie of wanneer een query actief is. Met dit model kunt u maximaal 10.000 verbindingen met lage overhead schalen.

PgBouncer wordt uitgevoerd op poort 6432 op uw databaseserver. U kunt de databaseverbindingsconfiguratie van uw toepassing wijzigen om dezelfde hostnaam te gebruiken, maar wijzig de poort in 6432 om PgBouncer te gebruiken en profiteer van verbeterde schaalaanpassing van niet-actieve verbindingen.

PgBouncer in Azure Database for PostgreSQL ondersteunt Microsoft Entra-verificatie (Azure AD).

Versie van PgBouncer

Momenteel is de versie van PgBouncer uitgerold op alle ondersteunde hoofdversies van de engine (18 (preview), 17, 16, 15, 14, 13, 12, 11), in Azure Database for PostgreSQL, 1.23.1.

PgBouncer inschakelen en configureren

PgBouncer is vooral handig in transactionele toepassingen waarbij frequent verbindingsverloop de prestaties kan verminderen. Deze is standaard ingeschakeld op poort 6432 en u kunt er verbinding mee maken met dezelfde hostnaam als uw PostgreSQL-server, maar met poort 6432 in plaats van de standaardpoort 5432.

Als u PgBouncer wilt inschakelen, gaat u naar het deelvenster Serverparameters in Azure Portal, zoekt u PgBouncer en wijzigt u de pgbouncer.enabled instelling in true. U hoeft de server niet opnieuw op te starten.

U kunt pgBouncer-instellingen configureren met behulp van deze parameters.

Notitie

De volgende lijst met PgBouncer-serverparameters is alleen zichtbaar in het deelvenster Serverparameters als de pgbouncer.enabled serverparameter is ingesteld op true. Anders worden ze opzettelijk verborgen.

Parameternaam Beschrijving Standaard
pgbouncer.default_pool_size Stel deze parameterwaarde in op het aantal verbindingen per gebruiker/databasepaar. 50
pgbouncer.ignore_startup_parameters Voer een door komma's gescheiden lijst met parameters in die PgBouncer kan negeren. U kunt bijvoorbeeld PgBouncer de extra_float_digits parameter laten negeren. Sommige parameters zijn toegestaan; alle anderen veroorzaken een fout. Deze mogelijkheid is nodig om overenthusiastic Java Database Connectivity (JDBC) te tolereren die onvoorwaardelijke instellingen willen instellen extra_float_digits=2 in opstartpakketten. Gebruik deze optie als de bibliotheek die u gebruikt fouten rapporteert, zoals pq: unsupported startup parameter: extra_float_digits.
pgbouncer.max_client_conn Stel deze parameterwaarde in op het maximum aantal clientverbindingen met PgBouncer dat u wilt ondersteunen. De standaardwaarde is 5000, met een toegestaan bereik van 1 tot 50.000 5.000
pgbouncer.max_prepared_statements Wanneer dit is ingesteld op een waarde die niet nul is, houdt PgBouncer protocolniveau benoemde instructies bij met betrekking tot opdrachten die door de client zijn verzonden in de transactie- en instructiepoolmodus. 0
pgbouncer.min_pool_size Voeg meer serververbindingen toe aan de pool als deze onder dit nummer wordt weergegeven. 0
pgbouncer.pool_mode Stel deze parameterwaarde in op TRANSACTION voor transactiepooling (dit is de aanbevolen instelling voor de meeste workloads). transactie
pgbouncer.query_wait_timeout Maximale tijd (in seconden) query's mogen wachten op uitvoering. Als de query gedurende die tijd niet is toegewezen aan een server, wordt de verbinding met de client verbroken. 120
pgbouncer.server_idle_timeout Als een serververbinding langer dan dit aantal seconden inactief is geweest, wordt deze verwijderd. Als 0 is time-out uitgeschakeld. 600
pgbouncer.stats_users Door komma's gescheiden lijst met databasegebruikers die verbinding mogen maken en alleen-lezenquery's mogen uitvoeren op de pgBouncer-console.

Zie de documentatie pgbouncer.ini voor meer informatie over PgBouncer-configuraties.

Vergoedingen

Met behulp van de ingebouwde PgBouncer-functie bij uw flexibele Azure Database for PostgreSQL-serverexemplaar kunt u profiteren van de volgende voordelen:

  • Gemak van vereenvoudigde configuratie: Omdat PgBouncer is geïntegreerd met uw flexibele Azure Database for PostgreSQL-serverexemplaren, is er geen afzonderlijke installatie of complexe installatie nodig. U kunt deze rechtstreeks vanuit de serverparameters configureren.

  • Betrouwbaarheid van een beheerde service: PgBouncer biedt de voordelen van beheerde Azure-services. Azure beheert bijvoorbeeld updates van PgBouncer. Automatische updates elimineren de noodzaak van handmatig onderhoud en zorgen ervoor dat PgBouncer up-to-date blijft met de nieuwste functies en beveiligingspatches.

  • Ondersteuning voor verschillende verbindingstypen: PgBouncer in Azure Database for PostgreSQL biedt ondersteuning voor zowel openbare als privéverbindingen. U kunt deze gebruiken om beveiligde verbindingen tot stand te brengen via privénetwerken of extern verbinding te maken, afhankelijk van uw specifieke vereisten.

  • Hoge beschikbaarheid in failoverscenario's: Als een stand-byserver tijdens een failover wordt gepromoveerd naar de primaire rol, start PgBouncer naadloos opnieuw op de zojuist gepromoveerde stand-by. U hoeft geen wijzigingen aan te brengen in de toepassing verbindingsreeks. Deze mogelijkheid zorgt voor continue beschikbaarheid en minimaliseert onderbreking van de verbindingsgroep van de toepassing.

PgBouncer bewaken

Metrische gegevens

U kunt pgBouncer-metrische gegevens gebruiken om de prestaties van het PgBouncer-proces te bewaken, waaronder details voor actieve verbindingen, niet-actieve verbindingen, totale gegroepeerde verbindingen en het aantal verbindingsgroepen. Elke metrische waarde wordt verzonden met een interval van 1 minuut en heeft maximaal 93 dagen geschiedenis. Klanten kunnen waarschuwingen voor de metrische gegevens configureren en ook toegang krijgen tot de nieuwe dimensies voor metrische gegevens om metrische gegevens te splitsen en te filteren op databasenaam.

Hoe PgBouncer-metingen inschakelen

  • Als u metrische pgBouncer-gegevens wilt bewaken, moet u ervoor zorgen dat de functie pgbouncer is ingeschakeld via de serverparameter pgbouncer.enabled en de parameter metrics.pgbouncer_diagnostics voor metrische gegevens is ingeschakeld.
  • Deze parameters zijn dynamisch en vereisen geen opnieuw opstarten van het exemplaar.
  • PgBouncer-metrische gegevens zijn standaard uitgeschakeld.

Lijst met metrische gegevens van PgBouncer

Weergavenaam Metrische id Eenheid Beschrijving Dimensie Standaard ingeschakeld
Actieve clientverbindingen client_connections_active Tellen Verbindingen van clients die zijn gekoppeld aan een flexibele Azure Database for PostgreSQL-serververbinding. Databasenaam Nee
Wachtende clientverbindingen client_connections_waiting Tellen Verbindingen van clients die wachten op een flexibele Azure Database for PostgreSQL-serververbinding om ze te bedienen. Databasenaam Nee
Actieve serververbindingen server_connections_active Tellen Verbindingen met een flexibele Azure Database for PostgreSQL-server die worden gebruikt door een clientverbinding. Databasenaam Nee
Niet-actieve serververbindingen server_connections_idle Tellen Verbindingen met een flexibele Azure Database for PostgreSQL-server die niet actief zijn en gereed zijn om een nieuwe clientverbinding te onderhouden. Databasenaam Nee
Totaal aantal gegroepeerde verbindingen total_pooled_connections Tellen Huidig aantal gegroepeerde verbindingen. Databasenaam Nee
Aantal verbindingsgroepen num_pools Tellen Totaal aantal verbindingsgroepen. Databasenaam Nee

Overwegingen voor het gebruik van de pgBouncer-metrische gegevens

  • Metrische pgBouncer-gegevens die gebruikmaken van de dimensie DatabaseName hebben een limiet van 30 databases .
  • Op de Burstable SKU is de limiet 10 databases die de dimensie DatabaseName hebben.
  • De dimensielimiet DatabaseName wordt toegepast op de OID-kolom, die de volgorde van het maken van de database weerspiegelt.

Zie metrische gegevens van PgBouncer voor meer informatie.

Beheerconsole

PgBouncer biedt ook een interne database met de naam pgbouncer. Wanneer u verbinding maakt met die database, kunt u opdrachten uitvoeren SHOW die informatie geven over de huidige status van PgBouncer.

Verbinding maken met de pgbouncer database:

  1. Stel de pgBouncer.stats_users parameter in op de naam van een bestaande gebruiker (bijvoorbeeld myUser) en pas de wijzigingen toe.

  2. Maak verbinding met de pgbouncer database als deze gebruiker en stel de poort in als 6432:

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=<password> sslmode=require"
    

Nadat u verbinding hebt gemaakt met de database, gebruikt SHOW u opdrachten om PgBouncer-statistieken weer te geven:

  • SHOW HELP: Alle beschikbare SHOW opdrachten weergeven.
  • SHOW POOLS: Het aantal verbindingen in elke status voor elke pool weergeven.
  • SHOW DATABASES: De huidige toegepaste verbindingslimieten voor elke database weergeven.
  • SHOW STATS: Statistieken weergeven over aanvragen en verkeer voor elke database.

Zie de beheerconsole voor meer informatie over de PgBouncer-opdrachten.SHOW

Uw toepassing overschakelen naar PgBouncer

Volg deze stappen om PgBouncer te gaan gebruiken:

  1. Maak verbinding maken met databaseserver, maar gebruik poort 6432 in plaats van de reguliere poort 5432. Controleer of deze verbinding werkt.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=<password> sslmode=require"
    
  2. Test uw toepassing in een QA-omgeving met PgBouncer om ervoor te zorgen dat u geen compatibiliteitsproblemen hebt. Het PgBouncer-project biedt een compatibiliteitsmatrix en we raden transactiepooling aan voor de meeste gebruikers.

  3. Wijzig uw productietoepassing om verbinding te maken met poort 6432 in plaats van 5432. Controleer op eventuele fouten aan de toepassingszijde die mogelijk verwijzen naar compatibiliteitsproblemen.

PgBouncer in zone-redundante hoge beschikbaarheid

Op zone-redundante hoge beschikbaarheidsservers (HA) wordt PgBouncer uitgevoerd op de primaire server. U kunt via poort 6432 verbinding maken met PgBouncer op de primaire server. Na een failover wordt PgBouncer opnieuw opgestart op de zojuist gepromoveerde stand-by, die nu de primaire server is. Uw toepassing verbindingsreeks dus hetzelfde blijven na een failover.

PgBouncer met elastische clusters (voorbeeldweergave)

PgBouncer is ook beschikbaar voor elastische clusters. Elk knooppunt in een elastisch cluster heeft een eigen exemplaar van PgBouncer. Nadat de poort 6432 is ingeschakeld, wordt PgBouncer uitgevoerd op het momenteel aangewezen coördinatorknooppunt. U kunt ook poort 8432 gebruiken om uw verbindingen te load balanceren over PgBouncer-instanties die op alle knooppunten in het cluster draaien.

PgBouncer gebruiken met andere verbindingsgroepen

In sommige gevallen hebt u mogelijk al een verbindingsgroep aan de toepassingszijde of hebt u PgBouncer ingesteld aan de toepassingszijde (bijvoorbeeld een sidecar van Azure Kubernetes Service). In deze gevallen kan de ingebouwde PgBouncer-functie nog steeds nuttig zijn omdat het de voordelen biedt van niet-actieve schaalaanpassing van verbindingen.

Het gebruik van een pool aan de toepassingszijde samen met PgBouncer op de databaseserver kan nuttig zijn. Hier biedt de pool aan de toepassingszijde het voordeel van een verminderde initiële verbindingslatentie (omdat de roundtrip voor het initialiseren van de verbinding veel sneller is) en de PgBouncer aan de databasezijde niet-actieve verbindingsschalen biedt.

Beperkingen

  • De functie PgBouncer wordt momenteel niet ondersteund met de compute-laag Burstable-server. Als u de rekenlaag wijzigt van Algemeen gebruik of Geoptimaliseerd voor geheugen naar Burstable, verliest u de ingebouwde PgBouncer-mogelijkheid.
  • Wanneer de server opnieuw wordt opgestart tijdens schaalbewerkingen, ha-failover of opnieuw opstarten, worden PgBouncer en de virtuele machine ook opnieuw opgestart. Vervolgens moet u de bestaande verbindingen opnieuw tot stand brengen.
  • In de portal worden niet alle PgBouncer-parameters weergegeven. Nadat u PgBouncer hebt ingeschakeld en de parameters hebt opgeslagen, moet u het deelvenster Serverparameters sluiten (bijvoorbeeld Overzicht selecteren) en teruggaan naar het deelvenster Serverparameters.
  • U kunt geen instructiegroepmodi gebruiken, samen met voorbereide instructies. De huidige versie van PgBouncer heeft ondersteuning toegevoegd voor voorbereide instructies in de transactiemodus. Deze ondersteuning kan worden ingeschakeld en geconfigureerd via max_prepared_statements parameter. Als u deze parameter instelt boven de standaardwaarde 0, wordt ondersteuning voor voorbereide instructies ingeschakeld. Deze ondersteuning is alleen van toepassing op voorbereide instructies op protocolniveau. Voor de meeste programmeertalen betekent dit dat we de libpq-functie PQprepare op de client gebruiken, waarbij opdrachten op protocolniveau worden verzonden die PgBouncer kan onderscheppen, in plaats van een dynamische SQL-opdracht uit te geven die vergelijkbaar is met PREPARE proc AS, waardoor tekst wordt verzonden die PgBouncer niet correct interpreteert. Raadpleeg de pgBouncer-documentatie om andere beperkingen van de door u gekozen poolmodus te controleren.
  • Als PgBouncer wordt geïmplementeerd als een functie, wordt het een potentieel single point of failure. Als de functie PgBouncer niet beschikbaar is, kan deze de hele databaseverbindingsgroep verstoren en downtime voor de toepassing veroorzaken. Als u het single point of failure wilt beperken, kunt u meerdere PgBouncer-exemplaren instellen achter een load balancer voor hoge beschikbaarheid op Virtuele Azure-machines.
  • Beperking tokengrootte met Azure AD-verificatie: gebruikers met een groot aantal groepslidmaatschappen kunnen geen verbinding maken via PgBouncer vanwege een beperking van de tokengrootte. Toepassingen, services en gebruikers met een klein aantal groepen werken.
  • PgBouncer is een lichtgewicht toepassing die gebruikmaakt van een architectuur met één thread. Dit ontwerp is ideaal voor de meeste toepassingsworkloads. Maar in toepassingen die een groot aantal kortdurende verbindingen maken, kan dit ontwerp van invloed zijn op de prestaties van pgBouncer en de mogelijkheid om uw toepassing te schalen beperken. Mogelijk moet u een van de volgende methoden proberen:
    • Distribueer de verbindingsbelasting over meerdere PgBouncer-exemplaren op Azure-VM's.
    • Overweeg alternatieve oplossingen, waaronder multithreaded-oplossingen zoals PgCat, op Azure-VM's.

Belangrijk

De parameter pgbouncer.client_tls_sslmode voor de ingebouwde PgBouncer-functie is afgeschaft in Azure Database for PostgreSQL.

Wanneer TLS/SSL voor verbindingen met een flexibele server-instantie van Azure Database for PostgreSQL wordt afgedwongen via het instellen van de require_secure_transport serverparameter ON, wordt TLS/SSL automatisch afgedwongen voor verbindingen met de ingebouwde PgBouncer-functie. Deze instelling is standaard ingeschakeld wanneer u een nieuw exemplaar van een flexibele Azure Database for PostgreSQL-server maakt en de ingebouwde PgBouncer-functie inschakelt. Zie Beveiligde connectiviteit met TLS in Azure Database for PostgreSQL voor meer informatie.

Voor klanten die vereenvoudigd beheer, ingebouwde hoge beschikbaarheid, eenvoudige connectiviteit met containertoepassingen en de mogelijkheid om de populairste configuratieparameters te gebruiken, is de ingebouwde PgBouncer-functie een goede keuze. Voor klanten die multithreaded schaalbaarheid willen, volledige controle over alle parameters en een foutopsporingservaring, is het instellen van PgBouncer op Azure-VM's mogelijk een alternatief.