🧚 Ascolta! Beekeeper Studio è una GUI per database veloce, moderna e open source Scarica
17 luglio 2024 Di Matthew Rathbone

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.

La versione Linux di Beekeeper è completa al 100%, senza tagli e senza compromessi sulle funzionalità.

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."
— Alex K., Database Developer
★★★★★
"Ho provato tante GUI per database, ma Beekeeper trova il perfetto equilibrio tra funzionalità e semplicità. Funziona e basta."
— Sarah M., Full Stack Engineer

Pronto a migliorare il tuo workflow SQL?

download Scarica gratis