Dela via


PgBouncer i Azure Database for PostgreSQL – flexibel server

GÄLLER FÖR: Azure Database for PostgreSQL – flexibel server

Azure Database for PostgreSQL – flexibel server erbjuder PgBouncer som en inbyggd lösning för anslutningspooler. PgBouncer är en valfri funktion som du kan aktivera per databas-server. Det stöds på beräkningsnivåer för generell användning och minnesoptimerad i både offentliga och privata åtkomstnätverk.

PgBouncer körs på samma virtuella dator (VM) som databasservern för Azure Database for PostgreSQL – flexibel server. Postgres använder en processbaserad modell för anslutningar, så det är dyrt att underhålla många inaktiva anslutningar. Postgres stöter på resursbegränsningar när servern kör mer än några tusen anslutningar. Den främsta fördelen med PgBouncer är att förbättra inaktiva anslutningar och kortvariga anslutningar på databasservern.

PgBouncer använder en enkel modell som använder asynkron I/O. Den använder endast Postgres-anslutningar när det behövs, dvs. när en öppen transaktion eller när en fråga är aktiv. Den här modellen tillåter skalning till upp till 10 000 anslutningar med låg omkostnad.

PgBouncer körs på port 6432 på databasservern. Du kan ändra programmets databasanslutningskonfiguration så att den använder samma värdnamn, men ändra porten till 6432 för att börja använda PgBouncer och dra nytta av förbättrad skalning av inaktiva anslutningar.

PgBouncer i Azure Database for PostgreSQL – flexibel server stöder Microsoft Entra-autentisering (Azure AD).

Aktivera och konfigurera PgBouncer

Om du vill aktivera PgBouncer går du till fönstret Serverparametrar i Azure-portalen, söker efter PgBouncer och ändrar pgbouncer.enabled inställningen till true. Du behöver inte starta om servern.

Du kan konfigurera PgBouncer-inställningar med hjälp av dessa parametrar.

Kommentar

Följande lista över PgBouncer-serverparametrar visas endast i fönstret Serverparametrar om pgbouncer.enabled serverparametern är inställd truepå . Annars är de avsiktligt dolda.

Parameternamn beskrivning Standard
pgbouncer.default_pool_size Ange det här parametervärdet till antalet anslutningar per användar-/databaspar. 50
pgbouncer.ignore_startup_parameters Ange en kommaavgränsad lista med parametrar som PgBouncer kan ignorera. Du kan till exempel låta PgBouncer ignorera parametern extra_float_digits . Vissa parametrar är tillåtna. alla andra genererar ett fel. Den här möjligheten krävs för att tolerera överentusiastisk Java Database Connectivity (JDBC) som vill ställa in extra_float_digits=2 ovillkorligt i startpaket. Använd det här alternativet om biblioteket som du använder rapporterar fel som pq: unsupported startup parameter: extra_float_digits.
pgbouncer.max_client_conn Ange det här parametervärdet till det högsta antalet klientanslutningar till PgBouncer som du vill stödja. 5000
pgbouncer.max_prepared_statements När detta är inställt på ett icke-nollvärde spårar PgBouncer protokollnivå med namnet förberedda instruktioner relaterade kommandon som skickas av klienten i transaktions- och instruktionspoolläge. 0
pgbouncer.min_pool_size Lägg till fler serveranslutningar till poolen om det är under det här talet. 0
pgbouncer.pool_mode Ange det här parametervärdet till TRANSACTION för transaktionspooler (vilket är den rekommenderade inställningen för de flesta arbetsbelastningar). transaktion
pgbouncer.query_wait_timeout Maximal tid (i sekunder) för frågor som tillåts vänta på körning. Om frågan inte har tilldelats till en server under den tiden kopplas klienten från. 120
pgbouncer.server_idle_timeout Om en serveranslutning har varit inaktiv mer än så här många sekunder kommer den att tas bort. Om 0 inaktiveras tidsgränsen. 600
pgbouncer.stats_users Kommaavgränsad lista över databasanvändare som tillåts ansluta och köra skrivskyddade frågor i pgBouncer-konsolen.

Mer information om PgBouncer-konfigurationer finns i dokumentationen om pgbouncer.ini.

Version av PgBouncer

För närvarande är versionen av PgBouncer distribuerad på alla större versioner av motorn som stöds (16, 15, 14, 13, 12, 11) i Azure Database for PostgreSQL – flexibel server 1.22.1.

Förmåner

Genom att använda den inbyggda PgBouncer-funktionen med en flexibel Azure Database for PostgreSQL-server kan du få följande fördelar:

  • Förenklad konfiguration: Eftersom PgBouncer är integrerad med en flexibel Azure Database for PostgreSQL-server behöver du ingen separat installation eller komplex installation. Du kan konfigurera den direkt från serverparametrarna.

  • Tillförlitlighet för en hanterad tjänst: PgBouncer erbjuder fördelarna med Azure-hanterade tjänster. Azure hanterar till exempel uppdateringar av PgBouncer. Automatiska uppdateringar eliminerar behovet av manuellt underhåll och ser till att PgBouncer håller sig uppdaterad med de senaste funktionerna och säkerhetskorrigeringarna.

  • Stöd för olika anslutningstyper: PgBouncer i Azure Database for PostgreSQL – flexibel server ger stöd för både offentliga och privata anslutningar. Du kan använda den för att upprätta säkra anslutningar via privata nätverk eller ansluta externt, beroende på dina specifika krav.

  • Hög tillgänglighet i redundansscenarier: Om en väntelägesserver befordras till den primära rollen under en redundansväxling startas PgBouncer sömlöst om i det nyligen upphöjda vänteläget. Du behöver inte göra några ändringar i programmet niska veze. Den här möjligheten hjälper till att säkerställa kontinuerlig tillgänglighet och minimerar störningar i programmets anslutningspool.

Övervaka PgBouncer

Mått

Azure Database for PostgreSQL – flexibel server innehåller sex mått för övervakning av PgBouncer-anslutningspooler:

Visningsnamn Mått-ID Enhet description Dimension Standard aktiverat
Aktiva klientanslutningar (förhandsversion) client_connections_active Antal Anslutningar från klienter som är associerade med en flexibel Azure Database for PostgreSQL-serveranslutning DatabaseName Nej
Väntande klientanslutningar (förhandsversion) client_connections_waiting Antal Anslutningar från klienter som väntar på en flexibel Serveranslutning för Azure Database for PostgreSQL för att betjäna dem DatabaseName Nej
Aktiva serveranslutningar (förhandsversion) server_connections_active Antal Anslutningar till en flexibel Azure Database for PostgreSQL-server som en klientanslutning använder DatabaseName Nej
Inaktiva serveranslutningar (förhandsversion) server_connections_idle Antal Anslutningar till en flexibel Azure Database for PostgreSQL-server som är inaktiv och redo att betjäna en ny klientanslutning DatabaseName Nej
Totalt antal poolanslutningar (förhandsversion) total_pooled_connections Antal Aktuellt antal poolanslutningar DatabaseName Nej
Antal anslutningspooler (förhandsversion) num_pools Antal Totalt antal anslutningspooler DatabaseName Nej

Mer information finns i PgBouncer-mått.

Administratörskonsol

PgBouncer tillhandahåller också en intern databas med namnet pgbouncer. När du ansluter till databasen kan du köra SHOW kommandon som ger information om det aktuella tillståndet för PgBouncer.

Så här ansluter du till pgbouncer databasen:

  1. Ange parametern pgBouncer.stats_users till namnet på en befintlig användare (till exempel myUser) och tillämpa ändringarna.

  2. Anslut till pgbouncer databasen som den här användaren och ange porten som 6432:

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

När du är ansluten till databasen använder du SHOW kommandon för att visa PgBouncer-statistik:

  • SHOW HELP: Visa en lista över alla tillgängliga SHOW kommandon.
  • SHOW POOLS: Visa antalet anslutningar i varje tillstånd för varje pool.
  • SHOW DATABASES: Visa de aktuella tillämpade anslutningsgränserna för varje databas.
  • SHOW STATS: Visa statistik över begäranden och trafik för varje databas.

Mer information om PgBouncer-kommandona SHOW finns i Administratörskonsol.

Växla ditt program så att det använder PgBouncer

Följ dessa steg för att börja använda PgBouncer:

  1. Anslut till databasservern, men använd port 6432 i stället för den vanliga 5432-porten. Kontrollera att den här anslutningen fungerar.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
    
  2. Testa ditt program i en QA-miljö mot PgBouncer för att se till att du inte har några kompatibilitetsproblem. PgBouncer-projektet tillhandahåller en kompatibilitetsmatris och vi rekommenderar transaktionspooler för de flesta användare.

  3. Ändra ditt produktionsprogram så att det ansluter till port 6432 i stället för 5432. Övervaka eventuella fel på programsidan som kan peka på kompatibilitetsproblem.

PgBouncer i zonredundant hög tillgänglighet

I zonredundanta servrar med hög tillgänglighet (HA) kör den primära servern PgBouncer. Du kan ansluta till PgBouncer på den primära servern via port 6432. Efter en redundansväxling startas PgBouncer om i det nyligen upphöjda vänteläget, som nu är den primära servern. Så ditt program niska veze förblir detsamma efter redundansväxlingen.

Använda PgBouncer med andra anslutningspooler

I vissa fall kanske du redan har en anslutningspool på programsidan eller har PgBouncer konfigurerat på programsidan (till exempel en Azure Kubernetes Service-sidovagn). I dessa fall kan den inbyggda PgBouncer-funktionen fortfarande vara användbar eftersom den ger fördelarna med inaktiv anslutningsskalning.

Det kan vara fördelaktigt att använda en pool på programsidan tillsammans med PgBouncer på databasservern. Här medför programpoolen fördelen med kortare inledande anslutningsfördröjning (eftersom tur och retur för att initiera anslutningen är mycket snabbare) och PgBouncer på databassidan ger inaktiv anslutningsskalning.

Begränsningar

  • PgBouncer-funktionen stöds för närvarande inte med nivån Burstable-serverberäkning. Om du ändrar beräkningsnivån från Generell användning eller Minnesoptimerad till Burstable förlorar du den inbyggda PgBouncer-funktionen.

  • När servern startas om under skalningsåtgärder, ha-redundans eller en omstart startas även PgBouncer och den virtuella datorn om. Sedan måste du återupprätta de befintliga anslutningarna.

  • Portalen visar inte alla PgBouncer-parametrar. När du har aktiverat PgBouncer och sparat parametrarna måste du stänga fönstret Serverparametrar (till exempel välj Översikt) och sedan gå tillbaka till fönstret Serverparametrar .

  • Du kan inte använda lägen för instruktionspooler tillsammans med förberedda instruktioner. Den aktuella versionen av PgBouncer har lagt till stöd för förberedda instruktioner i transaktionsläget. Det här stödet kan aktiveras och konfigureras via max_prepared_statements parameter. Om du anger den här parametern ovanför standardvärdet 0 aktiveras stöd för förberedda instruktioner. Det här stödet gäller endast för förberedda instruktioner på protokollnivå. För de flesta programmeringsspråk innebär det att vi använder funktionen libpq PQprepare på klienten och skickar protokollnivåkommandon som PgBouncer kan avlyssna i stället för att utfärda ett dynamiskt SQL-kommando som liknar PREPARE proc AS, som skickar text som PgBouncer inte tolkar korrekt. Om du vill kontrollera andra begränsningar i det valda poolläget läser du PgBouncer-dokumentationen.

  • Om PgBouncer distribueras som en funktion blir det en potentiell felpunkt. Om PgBouncer-funktionen är nere kan den störa hela databasanslutningspoolen och orsaka driftstopp för programmet. För att undvika den enskilda felpunkten kan du konfigurera flera PgBouncer-instanser bakom en lastbalanserare för hög tillgänglighet på virtuella Azure-datorer.

  • Begränsning av tokenstorlek med AAD-autentisering – Användare med ett stort antal gruppmedlemskap kommer inte att kunna ansluta via PgBouncer på grund av en begränsning av tokenstorleken. Program, tjänster och användare med ett litet antal grupper fungerar.

  • PgBouncer är ett lättviktsprogram som använder en enkeltrådad arkitektur. Den här designen passar bra för de flesta programarbetsbelastningar. Men i program som skapar ett stort antal kortvariga anslutningar kan den här designen påverka pgBouncer-prestanda och begränsa din möjlighet att skala ditt program. Du kan behöva prova någon av följande metoder:

    • Distribuera anslutningsbelastningen över flera PgBouncer-instanser på virtuella Azure-datorer.
    • Överväg alternativa lösningar, inklusive flertrådade lösningar som PgCat, på virtuella Azure-datorer.

Viktigt!

Parametern pgbouncer.client_tls_sslmode för den inbyggda PgBouncer-funktionen har blivit inaktuell i Azure Database for PostgreSQL – flexibel server.

När TLS/SSL för anslutningar till Azure Database for PostgreSQL – flexibel server tillämpas genom att ange require_secure_transport serverparametern till ONtillämpas TLS/SSL automatiskt för anslutningar till den inbyggda PgBouncer-funktionen. Den här inställningen är aktiverad som standard när du skapar en ny flexibel Azure Database for PostgreSQL-serverinstans och aktiverar den inbyggda PgBouncer-funktionen. Mer information finns i Nätverksöversikt för Azure Database for PostgreSQL – flexibel server med privat åtkomst.

För kunder som vill ha förenklad hantering, inbyggd hög tillgänglighet, enkel anslutning med containerbaserade program och möjligheten att använda de mest populära konfigurationsparametrarna är den inbyggda PgBouncer-funktionen ett bra val. För kunder som vill ha flertrådad skalbarhet, fullständig kontroll över alla parametrar och en felsökningsupplevelse kan det vara ett alternativ att konfigurera PgBouncer på virtuella Azure-datorer.

Nästa steg