🧚 Hör mal! Beekeeper Studio ist eine schnelle, moderne und Open-Source-Datenbank-GUI Download
17. Juli 2024 Von Matthew Rathbone

Mit der Funktion pg_terminate_backend kannst du eine problematische Session beenden.

SELECT pg_terminate_backend(PID);

Lang laufende Abfragen finden

Bevor du eine Session in PostgreSQL beendest, musst du wissen, welche Session betroffen ist. Um lang laufende Abfragen zu finden, kannst du die View pg_stat_activity nutzen und nach den Spalten state und query_start filtern.

SELECT pid, usename, state, query, now() - query_start AS duration
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC;

Erwartete Ausgabe:

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

Eine Session beenden

Sobald du die problematische Session gefunden hast, kannst du sie mit der Funktion pg_terminate_backend beenden.

SELECT pg_terminate_backend(1236);

Dieser Befehl beendet die Verbindung zum Backend zwangsweise. Er sendet ein SIGTERM-Signal an den Prozess und lässt ihn sauber beenden, sodass er vorher noch aufräumen kann. Prüfe vor dem Ausführen dieses Befehls genau, welche Abfragen gerade laufen, und berücksichtige die Ausgabe.

Beenden von Sessions automatisieren

In Umgebungen, in denen häufig Probleme mit Sessions auftreten, kannst du das Beenden mit einem Skript automatisieren. Hier ist ein einfaches Beispielskript, das lang laufende Abfragen beendet:

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 $$;

Dieses Skript beendet jede aktive Session, die länger als 10 Minuten läuft.

Die Funktion pg_cancel_backend verwenden

Manchmal willst du nicht die ganze Session beenden, sondern nur die Abfrage abbrechen, die sie gerade ausführt. Dafür kannst du die Funktion pg_cancel_backend verwenden.

SELECT pg_cancel_backend(PID);

Ersetze PID durch die Prozess-ID der Session mit der Abfrage, die du abbrechen willst.

Dieser Befehl sendet ein SIGINT an den Prozess, um die Abfrage abzubrechen. Das ist weniger brachial als pg_terminate_backend: Die Session selbst bleibt bestehen, nur die laufende Abfrage wird abgebrochen.

Denk daran, dass sowohl pg_cancel_backend als auch pg_terminate_backend Superuser-Rechte voraussetzen. Gehört die Session, die du beenden oder abbrechen willst, einem Superuser, brauchst du Superuser-Rechte, um diese Befehle erfolgreich auszuführen.

Fazit

Jetzt weißt du, wie du Sessions in PostgreSQL beendest. Sessions zu verwalten ist eine wichtige Fähigkeit für Datenbankadministratoren. Wenn du problematische Sessions zuverlässig findest und beendest, kannst du Performance und Zuverlässigkeit deiner PostgreSQL-Datenbanken besser sicherstellen. Setze diese Befehle aber mit Bedacht ein, denn falsch verwendet können sie wichtige Datenverarbeitungsschritte unterbrechen und die Integrität deiner PostgreSQL-Datenbanken gefährden.

Weitere Beiträge, die dir gefallen könnten:

Beekeeper Studio ist eine kostenlose & quelloffene Datenbank-GUI

Das beste SQL-Abfrage- & Editor-Tool, das ich je benutzt habe. Es bietet alles, was ich zum Verwalten meiner Datenbank brauche. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio ist schnell, intuitiv und einfach zu bedienen. Beekeeper unterstützt jede Menge Datenbanken und läuft hervorragend auf Windows, Mac und Linux.

Die Linux-Version von Beekeeper hat 100% des Funktionsumfangs, ohne Abstriche und ohne Kompromisse.

Was Nutzer über Beekeeper Studio sagen

★★★★★
„Beekeeper Studio hat meinen alten SQL-Workflow komplett ersetzt. Es ist schnell, intuitiv und macht die Arbeit mit Datenbanken wieder angenehm.“
— Alex K., Datenbankentwickler
★★★★★
„Ich habe viele Datenbank-GUIs ausprobiert, aber Beekeeper trifft die perfekte Balance zwischen Funktionsumfang und Einfachheit. Es funktioniert einfach.“
— Sarah M., Full Stack Engineer

Bereit, deinen SQL-Workflow zu verbessern?

download Kostenlos herunterladen