Come uccidere le connessioni inattive in PostgreSQL

Come uccidere le connessioni inattive in PostgreSQL

Il primo passo per apportare modifiche o leggere alcune informazioni da un databank PostgreSQL è stabilire connessioni. D'altra parte, ogni collegamento ha generato spese generali di utilizzo e memoria. Ecco perché un dispositivo con risorse minime (lettura, archiviazione, hardware) può supportare l'aggregato limitato di connessioni. Una volta che l'aggregato limitato è andato ben oltre un punto, dovrebbe continuare a lanciare errori o negare le connessioni. All'interno di PostgreSQL.conf, Postgresql sta facendo un lavoro decente di collegamenti limitanti. In questo tutorial, esamineremo le diverse forme di Stati che i collegamenti PostgreSQL possono avere. Ti mostreremo come determinare se il collegamento è attivo o è stato inattivo per una lunga durata, in cui può essere disconnesso per liberare i collegamenti e le risorse.

Connettiti al server:

All'inizio, assicurati di avere PGADMIN4 che siano stati installati completamente sul sistema informatico. Aprilo dalle tue applicazioni. Devi collegarlo al localhost fornendo una password.

Dopo la connettività con la root localhost, collegarlo al server PostgreSQL. Digita la password per Postgresql 13 User 'Postgres per connettersi. Tocca il pulsante OK per procedere.

Ora sei stato connesso al server PostgreSQL 13. È possibile vedere un elenco di database risiedendo nel server come presentato nell'immagine aggiunta di seguito. Il database di Postgres è il database predefinito "creato al momento dell'installazione di PostgreSQL, mentre il database" Test "è stato creato da un utente in seguito l'installazione.

Connection States:

Se viene stabilito un collegamento PostgreSQL, può eseguire varie azioni che si traducono in transizioni statali. Si dovrebbe prendere una decisione razionale sul fatto che il collegamento funzioni o sia stato lasciato inattivo/inutilizzato a seconda dello stato e della durata che è stata in ogni stato. È importante notare che fino a quando l'applicazione chiude deliberatamente la connessione, continuerà a funzionare, sprecando risorse molto tempo dopo che il cliente è stato distaccato. Ci sono i 4 stati potenziali per una connessione:

  • Attivo: Questo significa che il collegamento è attivo e funzionante.
  • Oziare: Ciò significa che il collegamento è inattivo, quindi dobbiamo tenerne un registro a seconda di quanto tempo sono stati inattivi.
  • Inattivo (nella transazione): Ciò significa che il backend è impegnato in una query, anche se in realtà è inattivo e forse aspettarsi input dal client finale.
  • Idle in Transaction (aborted): Questa condizione è equivalente al minimo. Tuttavia, una delle dichiarazioni è culminata in un errore. Può essere monitorato a seconda di quanto tempo è stato inattivo.

Identifica gli stati di connessione:

Le tabelle del catalogo PostgreSQL forniscono una vista integrata "pg_stat_activity" per controllare le statistiche su ciò che fa un link o quanto tempo è stato in questa condizione. Per controllare tutte le statistiche relative a ogni database e ogni stato di connessione, aprire lo strumento di query ed eseguire la query di seguito:

>> Seleziona * da pg_stat_activity;

La query è stata implementata fruttuosamente e la nota di realizzazione è stata mostrata.

Quando si controlla il lato output dei dati, troverai una tabella con diverse colonne, come mostrato di seguito. È possibile controllare gli stati delle connessioni controllando i valori dello "stato".

Per semplificare l'output e avere una chiara idea di connessioni, loro stati, utenti e server su tali stati, è necessario eseguire la query sotto modificata nello strumento di query. Questa query mostra solo i 5 campi di record per connessioni e dati particolari che li riguardano. La colonna 'PID' sta per ID processo. Lo "stato" della colonna contiene gli stati dei processi. La colonna "Usename" identifica l'utente che ha lavorato sul processo particolare. La colonna 'DatName' ha specificato il nome del database su cui è stata eseguita la transazione. La colonna 'DatId' sta per ID database.

>> Seleziona PID, Stato, Usename DatName, Datid, da pg_stat_activity;

L'output ha un totale di 8 processi registrati. La colonna "stato" mostra che ci sono solo 3 processi che funzionano in questo momento. Uno è detenuto dal database predefinito 'Postgres e gli altri due sono detenuti dal database' test '. Allo stesso tempo, l'utente di Postgres ha eseguito questi processi.

Identifica le connessioni inattive:

Lo "stato" sembra essere l'unico valore che stiamo cercando all'interno dei risultati sopra menzionati. Useremo queste informazioni per determinare quali processi o domande sono in quali Stati e successivamente scavare più a fondo. Possiamo snagare i dettagli che stiamo cercando perfezionando la query, permettendoci di preparare un intervento su quella connessione specifica. Potremmo farlo scegliendo solo i PID inattivi usando la clausola Where e gli stati per quei PID. Dovremmo anche tenere traccia di quanto tempo il collegamento è stato inattivo e assicurarci di non avere collegamenti trascurati che sperperano le nostre risorse. Di conseguenza, utilizzeremo il comando di seguito per visualizzare solo i record pertinenti ai processi che sono attualmente inattivi:

>> Seleziona PID, Usename, usiSID, DatId, DatName, Application_Name, Backend_Start, State_Change, Stato da pg_stat_activity dove statale = 'inattivo';

La query ha ottenuto solo 2 record di dati in cui lo stato era "inattivo" usando la clausola Where. Il risultato sta mostrando i 2 processi inattivi con determinate informazioni su di loro.

Uccidi una connessione inattiva:

Dopo l'identificazione delle connessioni inattive, ora un momento per ucciderle. Una volta che abbiamo ridotto il processo in uno stato di attesa o inattivo per molto più tempo, potremmo usare il semplice comando per terminare facilmente il meccanismo di back-end senza interrompere le attività del server. Dobbiamo fornire il processo "ID" all'interno della query in una funzione di terminazione.

>> Seleziona pg_terminate_backend (7408);

Il processo è stato magnificamente ucciso.

Ora controlla i restanti connessioni inattivi dalla query apparita in basso.

>> Seleziona Datid, Usename, DatName, PID, Stato da PG_STAT_ACTIVITY WHERE STATE = 'IDLE';

L'output mostra solo 1 processo rimanente, che è inattivo.

Conclusione:

Assicurati di non perdere alcun passo per uccidere le connessioni inattive dal database PostgreSQL in modo efficiente.