Share via


PgBouncer in Database di Azure per PostgreSQL - Server flessibile

SI APPLICA A: Database di Azure per PostgreSQL - Server flessibile

Database di Azure per PostgreSQL offerte di server flessibiliPgBouncer come soluzione di pool di connessioni predefinita. PgBouncer è una funzionalità facoltativa che è possibile abilitare per ogni server di database. È supportato nei livelli di calcolo per utilizzo generico e ottimizzato per la memoria sia nelle reti di accesso pubblico che in reti di accesso privato.

PgBouncer viene eseguito nella stessa macchina virtuale (VM) del server di database per Database di Azure per PostgreSQL server flessibile. Postgres usa un modello basato su processi per le connessioni, quindi la gestione di molte connessioni inattive è costosa. Postgres viene eseguito in vincoli di risorse quando il server esegue più di poche migliaia di connessioni. Il vantaggio principale di PgBouncer consiste nel migliorare le connessioni inattive e le connessioni di breve durata nel server di database.

PgBouncer usa un modello leggero che usa operazioni di I/O asincrone. Usa le connessioni Postgres solo quando necessario, ovvero quando si trova all'interno di una transazione aperta o quando una query è attiva. Questo modello consente il ridimensionamento fino a 10.000 connessioni con sovraccarico ridotto.

PgBouncer viene eseguito sulla porta 6432 nel server di database. È possibile modificare la configurazione della connessione al database dell'applicazione in modo da usare lo stesso nome host, ma impostare la porta su 6432 per iniziare a usare PgBouncer e trarre vantaggio dal miglioramento del ridimensionamento delle connessioni inattive.

PgBouncer in Database di Azure per PostgreSQL server flessibile supporta l'autenticazione Di Microsoft Entra.

Abilitazione e configurazione di PgBouncer

Per abilitare PgBouncer, passare al riquadro Parametri del server nel portale di Azure, cercare PgBouncer e modificare l'impostazione pgbouncer.enabled su true . Non è necessario riavviare il server.

È possibile configurare le impostazioni di PgBouncer usando questi parametri.

Nota

L'elenco seguente dei parametri del server PgBouncer è visibile nel riquadro Parametri server solo se il parametro del pgbouncer.enabled server è impostato su true. In caso contrario, sono deliberatamente nascosti.

Nome parametro Descrizione Default
pgbouncer.default_pool_size Impostare questo valore del parametro sul numero di connessioni per coppia utente/database. 50
pgbouncer.ignore_startup_parameters Immettere un elenco delimitato da virgole di parametri che PgBouncer può ignorare. Ad esempio, è possibile consentire a PgBouncer di ignorare il extra_float_digits parametro. Alcuni parametri sono consentiti; tutti gli altri generano un errore. Questa capacità è necessaria per tollerare un database Java eccessivamente entusiasta Connessione ivity (JDBC) che vuole impostare extra_float_digits=2 in modo incondizionato nei pacchetti di avvio. Usare questa opzione se la libreria utilizzata segnala errori, pq: unsupported startup parameter: extra_float_digitsad esempio .
pgbouncer.max_client_conn Impostare questo valore del parametro sul numero massimo di connessioni client a PgBouncer che si vuole supportare. 5000
pgbouncer.max_prepared_statements Quando questo valore è impostato su un valore diverso da zero PgBouncer tiene traccia dei comandi correlati a livello di protocollo denominati preparati inviati dal client in modalità di pool di transazioni e istruzioni. 0
pgbouncer.min_pool_size Aggiungere altre connessioni server al pool se al di sotto di questo numero. 0
pgbouncer.pool_mode Impostare questo valore del parametro su TRANSACTION per il pool di transazioni, ovvero l'impostazione consigliata per la maggior parte dei carichi di lavoro. transazione
pgbouncer.query_wait_timeout Le query con tempo massimo (in secondi) possono trascorrere in attesa dell'esecuzione. Se la query non viene assegnata a un server durante tale periodo, il client viene disconnesso. 120
pgbouncer.server_idle_timeout Se una connessione al server è inattiva più di questo numero di secondi, verrà eliminata. Se 0, il timeout è disabilitato. 600
pgbouncer.stats_users Elenco delimitato da virgole di utenti di database autorizzati a connettersi ed eseguire query di sola lettura nella console pgBouncer.

Per altre informazioni sulle configurazioni di PgBouncer, vedere la documentazione pgbouncer.ini.

La tabella seguente illustra le versioni di PgBouncer attualmente distribuite, insieme a ogni versione principale di PostgreSQL:

PostgreSQL 16 PostgreSQL 15 PostgreSQL 14 PostgreSQL 13 PostgreSQL 12 PostgreSQL 11
1.22.1 1.22.1 1.22.1 1.22.1 1.22.1 1.22.1

Vantaggi

Usando la funzionalità PgBouncer predefinita con Database di Azure per PostgreSQL server flessibile, è possibile ottenere questi vantaggi:

  • Praticità della configurazione semplificata: poiché PgBouncer è integrato con Database di Azure per PostgreSQL server flessibile, non è necessario un'installazione separata o una configurazione complessa. È possibile configurarlo direttamente dai parametri del server.

  • Affidabilità di un servizio gestito: PgBouncer offre i vantaggi dei servizi gestiti di Azure. Ad esempio, Azure gestisce gli aggiornamenti di PgBouncer. Gli aggiornamenti automatici eliminano la necessità di manutenzione manuale e assicurano che PgBouncer rimanga aggiornato con le funzionalità e le patch di sicurezza più recenti.

  • Supporto per vari tipi di connessione: PgBouncer in Database di Azure per PostgreSQL server flessibile offre supporto per le connessioni pubbliche e private. È possibile usarlo per stabilire connessioni sicure su reti private o connettersi esternamente, a seconda dei requisiti specifici.

  • Disponibilità elevata negli scenari di failover: se un server di standby viene alzato di livello al ruolo primario durante un failover, PgBouncer viene riavviato senza problemi nello standby appena alzato di livello. Non è necessario apportare modifiche all'applicazione stringa di connessione. Questa funzionalità consente di garantire la disponibilità continua e ridurre al minimo le interruzioni del pool di connessioni dell'applicazione.

Monitoraggio di PgBouncer

Metrica

Database di Azure per PostgreSQL server flessibile fornisce sei metriche per il monitoraggio del pool di connessioni PgBouncer:

Nome visualizzato ID metrica Unità description Dimensione Impostazione predefinita abilitata
Connessioni client attive (anteprima) client_connections_active Conteggio Connessione ions dai client associati a una connessione server flessibile Database di Azure per PostgreSQL DatabaseName No
Connessioni client in attesa (anteprima) client_connections_waiting Conteggio Connessione dai client in attesa di una connessione server flessibile Database di Azure per PostgreSQL per gestirli DatabaseName No
Connessioni server attive (anteprima) server_connections_active Conteggio Connessione ions per Database di Azure per PostgreSQL server flessibile usato da una connessione client DatabaseName No
Connessioni server inattive (anteprima) server_connections_idle Conteggio Connessione ions per Database di Azure per PostgreSQL server flessibile inattiva e pronto per il servizio di una nuova connessione client DatabaseName No
Totale connessioni in pool (anteprima) total_pooled_connections Conteggio Numero corrente di connessioni in pool DatabaseName No
Numero di pool di connessioni (anteprima) num_pools Conteggio Numero totale di pool di connessioni DatabaseName No

Per altre informazioni, vedere Metriche PgBouncer.

Console di amministrazione

PgBouncer fornisce anche un database interno denominato pgbouncer. Quando ci si connette a tale database, è possibile eseguire SHOW comandi che forniscono informazioni sullo stato corrente di PgBouncer.

Per connettersi al pgbouncer database:

  1. Impostare il pgBouncer.stats_users parametro sul nome di un utente esistente ,ad esempio myUser, e applicare le modifiche.

  2. Connessione al pgbouncer database come utente e impostare la porta come 6432:

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

Dopo aver eseguito la connessione al database, usare SHOW i comandi per visualizzare le statistiche di PgBouncer:

  • SHOW HELP: elenca tutti i comandi disponibili SHOW .
  • SHOW POOLS: mostra il numero di connessioni in ogni stato per ogni pool.
  • SHOW DATABASES: mostra i limiti di connessione applicati correnti per ogni database.
  • SHOW STATS: mostra statistiche sulle richieste e sul traffico per ogni database.

Per altre informazioni sui comandi PgBouncerSHOW, vedere Amministrazione console.

Passaggio dell'applicazione all'uso di PgBouncer

Per iniziare a usare PgBouncer, seguire questa procedura:

  1. Connettersi al server di database, ma usare la porta 6432 anziché la normale porta 5432. Verificare che la connessione funzioni.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
    
  2. Testare l'applicazione in un ambiente qa con PgBouncer per assicurarsi di non avere problemi di compatibilità. Il progetto PgBouncer fornisce una matrice di compatibilità ed è consigliabile eseguire il pool di transazioni per la maggior parte degli utenti.

  3. Modificare l'applicazione di produzione per connettersi alla porta 6432 anziché alla porta 5432. Monitorare eventuali errori sul lato applicazione che potrebbero puntare a problemi di compatibilità.

PgBouncer nella disponibilità elevata con ridondanza della zona

Nei server con ridondanza della zona e disponibilità elevata, il server primario esegue PgBouncer. È possibile connettersi a PgBouncer nel server primario sulla porta 6432. Dopo un failover, PgBouncer viene riavviato nello standby appena alzato di livello, che è ora il server primario. Pertanto, l'applicazione stringa di connessione rimane invariata dopo il failover.

Uso di PgBouncer con altri pool di connessioni

In alcuni casi, potrebbe essere già presente un pool di connessioni sul lato applicazione o configurare PgBouncer sul lato applicazione, ad esempio un servizio Azure Kubernetes sidecar. In questi casi, la funzionalità PgBouncer predefinita può comunque essere utile perché offre i vantaggi del ridimensionamento delle connessioni inattive.

L'uso di un pool sul lato applicazione insieme a PgBouncer nel server di database può essere utile. In questo caso, il pool sul lato applicazione offre il vantaggio di ridurre la latenza di connessione iniziale (perché il round trip per inizializzare la connessione è molto più veloce) e PgBouncer sul lato database offre il ridimensionamento della connessione inattiva.

Limiti

  • La funzionalità PgBouncer non è attualmente supportata con il livello di calcolo del server burstable. Se si modifica il livello di calcolo da Utilizzo generico o Ottimizzato per la memoria a Burstable, si perde la funzionalità PgBouncer predefinita.

  • Ogni volta che il server viene riavviato durante le operazioni di scalabilità, il failover a disponibilità elevata o un riavvio, PgBouncer e la macchina virtuale vengono riavviati. È quindi necessario ristabilire le connessioni esistenti.

  • Il portale non mostra tutti i parametri PgBouncer. Dopo aver abilitato PgBouncer e salvato i parametri, è necessario chiudere il riquadro Parametri server (ad esempio, selezionare Panoramica) e quindi tornare al riquadro Parametri del server.

  • Non è possibile usare le modalità del pool di transazioni e istruzioni insieme alle istruzioni preparate. Per verificare altre limitazioni della modalità pool scelta, vedere la documentazione di PgBouncer.

  • Se PgBouncer viene distribuito come funzionalità, diventa un singolo punto di errore potenziale. Se la funzionalità PgBouncer è inattiva, può interrompere l'intero pool di connessioni del database e causare tempi di inattività per l'applicazione. Per attenuare il singolo punto di errore, è possibile configurare più istanze di PgBouncer dietro un servizio di bilanciamento del carico per la disponibilità elevata nelle macchine virtuali di Azure.

  • PgBouncer è un'applicazione leggera che usa un'architettura a thread singolo. Questa progettazione è ideale per la maggior parte dei carichi di lavoro dell'applicazione. Nelle applicazioni che creano un numero elevato di connessioni di breve durata, tuttavia, questa progettazione potrebbe influire sulle prestazioni di pgBouncer e limitare la capacità di ridimensionare l'applicazione. Potrebbe essere necessario provare uno di questi approcci:

    • Distribuire il carico di connessione tra più istanze di PgBouncer nelle macchine virtuali di Azure.
    • Prendere in considerazione soluzioni alternative, tra cui soluzioni multithreading come PgCat, nelle macchine virtuali di Azure.

Importante

Il parametro pgbouncer.client_tls_sslmode per la funzionalità PgBouncer predefinita è stato deprecato in Database di Azure per PostgreSQL server flessibile.

Quando TLS/SSL per le connessioni a Database di Azure per PostgreSQL server flessibile viene applicato tramite l'impostazione del parametro del require_secure_transport server su ON, TLS/SSL viene applicato automaticamente per le connessioni alla funzionalità PgBouncer predefinita. Questa impostazione è attivata per impostazione predefinita quando si crea una nuova istanza del server flessibile Database di Azure per PostgreSQL e si abilita la funzionalità PgBouncer predefinita. Per altre informazioni, vedere Panoramica della rete per Database di Azure per PostgreSQL - Server flessibile con accesso privato.

Per i clienti che vogliono una gestione semplificata, disponibilità elevata predefinita, connettività semplice con applicazioni in contenitori e la possibilità di usare i parametri di configurazione più diffusi, la funzionalità PgBouncer predefinita è una buona scelta. Per i clienti che vogliono la scalabilità multithreading, il controllo completo di tutti i parametri e un'esperienza di debug, la configurazione di PgBouncer nelle macchine virtuali di Azure potrebbe essere un'alternativa.

Passaggi successivi