Puoi terminare una sessione problematica usando la funzione pg_terminate_backend.
SELECT pg_terminate_backend(PID);
Individuare le query di lunga durata
Prima di terminare una sessione in PostgreSQL, devi sapere quale sessione colpire. Per trovare le query di lunga durata, puoi usare la vista pg_stat_activity e filtrare in base alle colonne state e query_start.
SELECT pid, usename, state, query, now() - query_start AS duration
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC;
Output previsto:
| pid | usename | state | query | duration |
|---|---|---|---|---|
| 1236 | appuser | active | UPDATE orders SET status=’paid’; | 00:20:34 |
| 1234 | postgres | active | SELECT * FROM users; | 00:05:12 |
Terminare una sessione
Una volta individuata la sessione problematica, puoi terminarla usando la funzione pg_terminate_backend.
SELECT pg_terminate_backend(1236);
Questo comando termina forzatamente la connessione al backend. Invia un segnale SIGTERM al processo e gli permette di chiudersi in modo sicuro, offrendogli un'ultima occasione per fare pulizia prima di terminare. Prima di eseguire questo comando, controlla la natura delle query in esecuzione e valuta l'output.
Automatizzare la terminazione delle sessioni
Negli ambienti in cui i problemi con le sessioni sono frequenti, puoi automatizzare la terminazione delle sessioni con uno script. Ecco un esempio di script base per terminare le query di lunga durata:
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN
SELECT pid
FROM pg_stat_activity
WHERE state = 'active'
AND now() - query_start > interval '10 minutes'
LOOP
PERFORM pg_terminate_backend(r.pid);
END LOOP;
END $$;
Questo script terminerà qualsiasi sessione attiva in esecuzione da più di 10 minuti.
Usare la funzione pg_cancel_backend
A volte non conviene terminare una sessione, ma semplicemente annullare la query che sta eseguendo. In questi casi, puoi usare la funzione pg_cancel_backend.
SELECT pg_cancel_backend(PID);
Sostituisci PID con l'ID del processo della sessione che esegue la query da annullare.
Questo comando invia un SIGINT al processo per annullare la query. È meno brutale rispetto a pg_terminate_backend e permette alla sessione di restare attiva, anche se la query in esecuzione viene annullata.
Ricorda che sia pg_cancel_backend sia pg_terminate_backend richiedono l'accesso da superuser. Se la sessione che vuoi terminare o annullare appartiene a un superuser, ti serviranno i privilegi di superuser per eseguire correttamente questi comandi.
Conclusione
Ora sai come terminare le sessioni in PostgreSQL. Gestire le sessioni in PostgreSQL è una competenza importante per gli amministratori di database. Individuando e terminando in modo efficace le sessioni problematiche, puoi mantenere meglio le prestazioni e l'affidabilità dei tuoi database PostgreSQL. Usa questi comandi con giudizio: un uso improprio può interrompere passaggi importanti di elaborazione dei dati e compromettere l'integrità dei tuoi database PostgreSQL.
Altri articoli che potrebbero piacerti:
Beekeeper Studio è una GUI per database gratuita & open source
Il miglior strumento per query & editor SQL che abbia mai usato. Offre tutto ciò che mi serve per gestire il mio database. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio è veloce, intuitivo e facile da usare. Beekeeper supporta tantissimi database e funziona alla grande su Windows, Mac e Linux.
Cosa dicono gli utenti di Beekeeper Studio
"Beekeeper Studio ha sostituito completamente il mio vecchio workflow SQL. È veloce, intuitivo e rende di nuovo piacevole lavorare con i database."
"Ho provato tante GUI per database, ma Beekeeper trova il perfetto equilibrio tra funzionalità e semplicità. Funziona e basta."