Eine Abfrage beenden
Bevor du eine Abfrage beenden kannst, musst du herausfinden, welche Abfragen Probleme verursachen. Mit folgendem SQL listest du alle laufenden Abfragen samt ihrer Laufzeit auf:
SELECT
pid,
user_name,
starttime,
query,
elapsed
FROM
stv_recents
WHERE
state = 'Running'
ORDER BY
elapsed DESC;
Erwartete Ausgabe:
| pid | user_name | starttime | query | elapsed |
|---|---|---|---|---|
| 123 | admin | 2023-10-01 10:00:00 | SELECT * FROM ? | 01:20:15 |
| 456 | analyst | 2023-10-01 10:45:00 | UPDATE table ? | 00:35:10 |
| … | … | … | … | … |
Die Spalte elapsed zeigt, wie lange die Abfrage schon läuft.
Sobald du die problematische Abfrage gefunden hast (über die pid aus der Liste oben), kannst du sie beenden. Verwende dazu folgenden Befehl:
CANCEL pid;
Beispiel:
CANCEL 123;
Das Beenden der Abfrage überprüfen
Um sicherzugehen, dass die Abfrage beendet wurde, führe die erste Abfrage erneut aus:
SELECT
pid,
user_name,
starttime,
query,
elapsed
FROM
stv_recents
WHERE
state = 'Running'
ORDER BY
elapsed DESC;
Die beendete Abfrage sollte nicht mehr in den Ergebnissen auftauchen.
Blockierte Abfragen behandeln
Manchmal werden Abfragen blockiert und müssen beendet werden, um Ressourcen freizugeben. Blockierte Abfragen findest du über die Tabelle STV_BLOCKED.
SELECT
b.pid,
b.user_name,
b.db,
b.query,
l.pid AS blocked_by_pid,
l.user_name AS blocked_by_user
FROM
stv_blocked b
JOIN
stv_locks l
ON
b.lock_owner_pid = l.pid;
Erwartete Ausgabe:
| pid | user_name | db | query | blocked_by_pid | blocked_by_user |
|---|---|---|---|---|---|
| 5678 | analytics | reporting | SELECT count(*) FROM ?; | 9101 | Admin |
Um eine blockierte Abfrage zu beenden, nutze wie oben gezeigt den Befehl CANCEL:
CANCEL 5678;
Das Beenden von Abfragen automatisieren
Bei Datenbanken mit hohen Performance-Anforderungen kann es sich lohnen, das Erkennen und Beenden lang laufender Abfragen zu automatisieren. Hier ist eine Beispielprozedur, die Abfragen beendet, die länger als ein festgelegter Schwellenwert laufen:
DO $$
DECLARE
long_running_query RECORD;
BEGIN
FOR long_running_query IN
SELECT pid
FROM stv_recents
WHERE state = 'Running'
AND elapsed > interval '00:30:00' -- Replace with desired threshold
LOOP
EXECUTE 'CANCEL ' || long_running_query.pid;
END LOOP;
END;
$$;
Wichtige Hinweise
- Berechtigungen: Nur Benutzer mit den passenden Berechtigungen können Abfragen abbrechen.
- Auswirkungen: Das Beenden einer Abfrage kann die Performance der Anwendung beeinträchtigen oder bei falscher Durchführung zu inkonsistenten Daten führen.
- Monitoring: Regelmäßiges Überwachen der Abfrage-Performance hilft, Probleme früh zu erkennen.
Fazit
Wenn du lang laufende Abfragen effektiv verwaltest, sorgst du für optimale Performance deines Amazon-Redshift-Clusters. Mit diesen Schritten kannst du problematische Abfragen schnell finden und beenden. Automatisierte Lösungen für regelmäßiges Monitoring und das Beenden von Abfragen helfen zusätzlich, die Performance zu halten.
Teste alle Befehle und Skripte in einer Nicht-Produktionsumgebung, bevor du sie in Produktion einsetzt, um ungewollte Ausfälle zu vermeiden.
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.
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 zum Vergnügen.“
„Ich habe viele Datenbank-GUIs ausprobiert, aber Beekeeper trifft genau die richtige Balance zwischen Funktionsumfang und Einfachheit. Es funktioniert einfach.“