Comprendere la gestione delle connessioni

Completato

Postgres usa un modello di connessione basato su processi. Per stabilire una connessione, è necessario coinvolgere il sistema operativo e allocare 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:

  • active: connessioni attive che attualmente eseguono query.
  • idle: connessioni aperte non in uso.
  • idle in transaction: una connessione in attesa, che non esegue alcuna operazione. Usare pg_stat_activity per sapere quali sono le operazioni in corso in una connessione e da quanto tempo si trova in questo stato.
  • idle in transaction (aborted): connessioni che in precedenza erano idle in transaction, ma che ora sono interrotte.

Il modello di connessione basata su processi rende costoso mantenere 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 all'utente con privilegi avanzati per garantire l'integrità del database. Questa prenotazione in genere corrisponde al 15% del valore max_connections.

Database di Azure per PostgreSQL è una soluzione gestita e riserva automaticamente tre connessioni per monitorare un server flessibile.

Nota

Non esiste un parametro del server per gestire superuser_reserved_connections in Database di Azure per PostgreSQL.

Pool di connessioni

Nelle applicazioni client che spesso aprono e chiudono le connessioni può verificarsi una latenza della connessione, con conseguente riduzione delle transazioni al secondo e un aumento generale della latenza dell'applicazione.

Database di Azure per PostgreSQL consiglia di creare un pool di connessioni invece che di aprire e chiudere di frequente le connessioni. I pool di connessioni riutilizzano le connessioni esistenti, invece di chiuderle e ricrearle. Questo processo riduce la latenza delle connessioni e consente di aumentare il numero di transazioni di database al secondo per i database sul server.

I pool di connessioni stabiliscono un set fisso di connessioni all'avvio del server e queste connessioni vengono quindi mantenute. I pool di connessioni consentono anche di ridurre la frammentazione della memoria causata dalla creazione continua di nuove connessioni sul server.

PGBouncer è una soluzione per la creazione di un pool di connessioni integrata in Database di Azure per PostgreSQL. Per abilitare pgBouncer:

  1. Nel portale di Azure passare al server di Database di Azure per PostgreSQL.
  2. Scegliere Parametri del server dal menu a sinistra.
  3. Nella barra di ricerca cercare PgBouncer.
  4. Impostare il valore di pgbouncer.enabled su true per abilitare PgBouncer. Questa impostazione non richiede un riavvio del server.
  5. Impostare pgbouncer.default_pool_size sul numero necessario di connessioni per coppia utenti/database. Il valore predefinito è 50.
  6. Impostare il parametro pgBouncer.pool_mode su TRANSACTION.

Nota

PgBouncer è supportato nei livelli di calcolo Per utilizzo generico e Ottimizzata per la memoria nelle reti con accesso sia pubblico che privato. PgBouncer non è supportato nel livello di calcolo Possibilità di burst. Quando il livello di calcolo passa da Per utilizzo generico o Ottimizzata per la memoria a Possibilità di burst, la funzionalità PGBouncer viene persa.