Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Wenn Sie eine Abfrage ausführen, die zu lange dauert oder zu viele Ressourcen verbraucht, brechen Sie die Abfrage ab. Zum Beispiel: Erstellen Sie eine Liste von Ticketverkäufern, die die Namen der Verkäufer und die Anzahl der verkauften Tickets enthält. Die folgende Abfrage wählt Daten aus der SALES
-Tabelle und der USERS
-Tabelle aus und verbindet beide Tabellen durch den Abgleich von SELLERID und USERID in der WHERE-Klausel.
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
WHERE sales.sellerid = users.userid
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
Das Ergebnis sieht in etwa wie folgt aus.
sellerid | firstname | lastname | sum
----------+-----------+----------+------
48950 | Nayda | Hood | 184
19123 | Scott | Simmons | 164
20029 | Drew | Mcguire | 164
36791 | Emerson | Delacruz | 160
13567 | Imani | Adams | 156
9697 | Dorian | Ray | 156
41579 | Harrison | Durham | 156
15591 | Phyllis | Clay | 152
3008 | Lucas | Stanley | 148
44956 | Rachel |Villarreal| 148
Anmerkung
Dies ist eine komplexe Abfrage. Für dieses Tutorial müssen Sie sich über den Aufbau dieser Abfrage keine Gedanken machen.
Die vorherige Abfrage dauert wenige Sekunden und gibt 2 102 Zeilen aus.
Angenommen, Sie hätten die WHERE-Klausel vergessen.
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
Der Ergebnissatz enthält dann alle Zeilen in der SALES
-Tabelle, multipliziert mit allen Zeilen in der USERS
-Tabelle (49989*3766). Dies ist eine so genannte Cartesische Verbindung, die nicht zu empfehlen ist. Das Ergebnis sind mehr als 188 Millionen Zeichen, und die Verarbeitungszeit ist extrem lang.
Um eine laufende Abfrage abzubrechen, verwenden Sie den Befehl CANCEL mit der Sitzungs-ID der Abfrage. Mit dem Amazon Redshift Redshift-Abfrage-Editor v2 können Sie eine Abfrage abbrechen, indem Sie auf die Schaltfläche Abbrechen klicken, während die Abfrage ausgeführt wird.
Um die Sitzungs-ID zu finden, starten Sie eine neue Sitzung und fragen Sie die Tabelle STV_RECENTS ab, wie im vorherigen Schritt gezeigt. Das folgende Beispiel zeigt, wie Sie die Ergebnisse lesbarer machen können. Verwenden Sie dazu die TRIM-Funktion, um nachfolgende Leerzeichen abzuschneiden, und zeigen Sie nur die ersten 20 Zeichen der Abfragezeichenfolge an.
Führen Sie die folgende SELECT-Anweisung aus, um die Sitzungs-ID einer laufenden Abfrage zu ermitteln.
SELECT user_id, session_id, start_time, query_text
FROM sys_query_history
WHERE status='running';
Das Ergebnis sieht in etwa wie folgt aus.
user_id | session_id | start_time | query_text
---------+---------------+----------------------------+----------------------------------------------------------------
100 | 1073791534 | 2024-03-19 22:26:21.205739 | SELECT user_id, session_id, start_time, query_text FROM ...
Führen Sie den folgenden Befehl aus1073791534
, um die Abfrage mit der Sitzungs-ID abzubrechen.
CANCEL 1073791534;
Anmerkung
Der Befehl CANCEL stoppt eine Transaktion nicht. Um eine Transaktion zu stoppen oder rückgängig zu machen, müssen Sie den Befehl ABORT oder ROLLBACK verwenden. Um eine mit einer Transaktion verbundene Abfrage abzubrechen, brechen Sie zuerst die Abfrage ab und stoppen Sie dann die Transaktion.
Wenn die abgebrochene Abfrage mit einer Transaktion verbunden ist, verwenden Sie den Befehl ABORT oder ROLLBACK, um die Transaktion abzubrechen und alle an den Daten vorgenommen Änderungen zu verwerfen:
ABORT;
Sie können nur Ihre eigenen Abfragen abbrechen, sofern Sie nicht als Superuser angemeldet sind. Superuser können alle Abfragen abbrechen.
Wenn Ihr Abfragetool nicht die gleichzeitige Ausführung von Abfragen unterstützt, starten Sie zum Abbruch der Abfrage eine weitere Sitzung.
Weitere Informationen zum Stornieren einer Abfrage finden Sie unter CANCEL im Amazon Redshift Database Developer Guide.
Abbrechen einer Abfrage mit der Superuser-Warteschlange
Wenn in Ihrer aktuellen Sitzung zu viele Abfragen gleichzeitig ausgeführt werden, können Sie möglicherweise erst dann den CANCEL-Befehl ausführen, wenn eine andere Abfrage abgeschlossen ist. Führen Sie in diesem Fall den CANCEL-Befehl mit einer anderen Workload-Verwaltungs-Abfragewarteschlange aus.
Workload-Verwaltung ermöglicht Ihnen die Ausführung von Abfragen in verschiedenen Abfragewarteschlangen, so dass Sie nicht warten müssen, bis eine andere Abfrage abgeschlossen ist. Der Workload Manager erstellt eine separate Warteschlange mit der Bezeichnung „Superuser-Warteschlange“, die Sie für Fehlerbehebungszwecke verwenden können. Um die Superuser-Warteschlange verwenden zu können, melden Sie sich als Superuser an und setzen Sie die Abfragegruppe mit dem SET-Befehl auf „Superuser“. Setzen Sie nach der Ausführung Ihrer Befehle die Abfragegruppe mit dem RESET-Befehl wieder zurück.
Um eine Abfrage mithilfe der Superuser-Warteschlange abzubrechen, führen Sie diese Befehle aus.
SET query_group TO 'superuser';
CANCEL 1073791534;
RESET query_group;