Comprendere la gestione delle connessioni
Postgres usa un modello di connessione basato su processi. Stabilire una connessione comporta il sistema operativo e l'allocazione di una piccola quantità di memoria. Ogni query SQL viene eseguita usando una connessione corrente.
Stati di connessione
Una connessione può trovarsi in uno dei quattro stati seguenti:
- attivo: connessioni attive, che attualmente eseguono query.
- inattivo - connessioni aperte non in uso.
- inattiva nella transazione - una connessione in attesa, senza eseguire alcuna operazione. Usare pg_stat_activity per capire cosa sta facendo una connessione e per quanto tempo si trova in questo stato.
- inattiva nella transazione (abbandonata) - connessioni che erano precedentemente inattive nella transazione ma che ora sono abbandonate.
Il modello di connessione basato su processo rende costoso gestire molte connessioni inattive.
Numero massimo di connessioni
PostgreSQL limita il numero massimo di connessioni simultanee al server in qualsiasi momento usando un parametro del server denominato max_connections. In Database di Azure per PostgreSQL, l'impostazione predefinita dipende dal livello di calcolo. Il valore consentito è compreso tra 25 e 5000.
Un'implementazione locale di PostgreSQL riserva alcune connessioni per consentire all'utente con privilegi avanzati di mantenere l'integrità del database. Questa prenotazione in genere corrisponde a 15% del valore di max_connections.
Database di Azure per PostgreSQL è una soluzione gestita e riserva automaticamente tre connessioni per monitorare un server flessibile.
Nota
Non esiste alcun parametro del server per gestire superuser_reserved_connections in Database di Azure per PostgreSQL.
Pool di connessioni
Le applicazioni client che spesso aprono e chiudono le connessioni possono riscontrare la latenza di connessione, con conseguente riduzione delle transazioni al secondo e una latenza complessiva più elevata dell'applicazione.
Azure Database per PostgreSQL consiglia la connessione tramite pool anziché aprire e chiudere frequentemente le connessioni. Il pool di connessioni riutilizza le connessioni esistenti, anziché chiudere e ricreare le connessioni. Questo processo riduce la latenza di connessione e consente transazioni di database superiori al secondo per i database nel server.
Il pool di connessioni stabilisce un set fisso di connessioni all'avvio del server e queste connessioni vengono quindi mantenute. Il pool di connessioni consente anche di ridurre la frammentazione della memoria causata da nuove connessioni create costantemente nel server.
PGBouncer
è una soluzione di pool di connessioni integrata in Database di Azure per PostgreSQL. Per abilitare pgBouncer:
- Nel portale di Azure, naviga al server di Azure Database per PostgreSQL.
- Nel menu a sinistra selezionare Parametri del server.
- Nella barra di ricerca cercare PgBouncer.
- Impostare l'impostazione pgbouncer.enabled su true per abilitare PgBouncer. Questa impostazione non richiede un riavvio del server.
- Impostare pgbouncer.default_pool_size sul numero di connessioni per coppia utente/database richiesta. Il valore predefinito è 50.
- Impostare il parametro pgBouncer.pool_mode su TRANSACTION.
Nota
PgBouncer è supportato nei livelli di calcolo per utilizzo generico e ottimizzato per la memoria sia nell'accesso pubblico che nella rete di accesso privato. PgBouncer non è supportato nel livello di calcolo burstable. Quando il livello di calcolo viene modificato da Utilizzo generico o Ottimizzato per la memoria a Burstable, la funzionalità PGBouncer viene persa.