Gestione delle connessioni interrotte in PostgreSQL - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Gestione delle connessioni interrotte in PostgreSQL

Le connessioni interrotte si verificano quando una sessione di database rimane attiva sul server nonostante l'applicazione client sia stata abbandonata o terminata in modo anomalo. Questa situazione si verifica in genere quando i processi client si bloccano o si interrompono in modo imprevisto senza chiudere correttamente le connessioni al database o annullare le richieste in corso.

PostgreSQL identifica e ripulisce in modo efficiente le connessioni interrotte quando i processi del server sono inattivi o tentano di inviare dati ai client. Tuttavia, il rilevamento è difficile per le sessioni inattive, in attesa dell'input del client o che eseguono attivamente le query. Per gestire questi scenari, PostgreSQL fornisce tcp_keepalives_* e parametri. tcp_user_timeout client_connection_check_interval

Comprendere TCP keepalive

TCP Keepalive è un meccanismo a livello di protocollo che aiuta a mantenere e verificare l'integrità della connessione. Ogni connessione TCP mantiene le impostazioni a livello di kernel che regolano il comportamento di keepalive. Quando il timer keepalive scade, il sistema esegue le seguenti operazioni:

  • Invia un pacchetto di sonda senza dati e con il flag ACK impostato.

  • Prevede una risposta dall'endpoint remoto in base alle specifiche. TCP/IP

  • Gestisce lo stato della connessione in base alla risposta o alla sua mancanza.

Parametro Descrizione Valori predefiniti
tcp_keepalives_idle Speciifica il numero di secondi di inattività prima dell'invio del messaggio keepalive. 300
tcp_keepalives_interval Speciifica il numero di secondi tra le ritrasmissioni di messaggi keepalive non riconosciuti. 30
tcp_keepalives_count Numero massimo di messaggi keepalive persi prima di dichiarare interrotta la connessione 2
tcp_user_timeout Speciifica per quanto tempo (in millisecondi) possono rimanere i dati non riconosciuti prima della chiusura forzata della connessione. 0
client_connection_check_interval Imposta l'intervallo (in millisecondi) per il controllo dello stato della connessione del client durante le query di lunga durata. Ciò garantisce un rilevamento più rapido delle connessioni chiuse. 0

Casi d'uso per le impostazioni TCP keepalive

Mantenere attive le sessioni inattive

Per evitare che le connessioni inattive vengano interrotte da firewall o router a causa dell'inattività:

  • Configura tcp_keepalives_idle per inviare pacchetti keepalive a intervalli regolari.

Rilevamento di connessioni interrotte

Per rilevare tempestivamente le connessioni interrotte:

  • Regola tcp_keepalives_idletcp_keepalives_interval, e. tcp_keepalives_count Ad esempio, con le impostazioni predefinite di Aurora PostgreSQL, è necessario circa un minuto (2 sonde × 30 secondi) per rilevare una connessione interrotta. La riduzione di questi valori può velocizzare il rilevamento.

  • tcp_user_timeoutDa utilizzare per specificare il tempo massimo di attesa per un riconoscimento.

Le impostazioni TCP keepalive aiutano il kernel a rilevare le connessioni interrotte, ma PostgreSQL potrebbe non agire finché non viene utilizzato il socket. Se una sessione esegue una query lunga, le connessioni interrotte potrebbero essere rilevate solo dopo il completamento della query. In PostgreSQL 14 e versioni successiveclient_connection_check_interval, può accelerare il rilevamento delle connessioni interrotte interrogando periodicamente il socket durante l'esecuzione della query.

Best practice

  • Imposta intervalli keepalive ragionevoli: ottimizza e bilancia la velocità di rilevamento tcp_keepalives_count e tcp_user_timeout tcp_keepalives_interval l'tcp_keepalives_idleuso delle risorse.

  • Ottimizza per il tuo ambiente: allinea le impostazioni al comportamento della rete, alle politiche del firewall e alle esigenze delle sessioni.

  • Sfrutta le funzionalità di PostgreSQL: client_connection_check_interval utilizzalo in PostgreSQL 14 e versioni successive per controlli di connessione efficienti.