Warum hat sich der Status meiner Amazon Redshift-Abfrage von „Abgeschlossen“ in „Abgebrochen“ geändert, obwohl keine Änderungen vorgenommen wurden?

Lesedauer: 3 Minute
0

Die Amazon Redshift-Konsole zeigt an, dass der Abfragestatus „Abgeschlossen“ lautet, der Status ändert sich dann aber zu „Abgebrochen“. Es wurden jedoch keine Aktualisierungen an der Tabelle vorgenommen, als ich die Ergebnisse einer vorherigen Sitzung oder Transaktion abfragte.

Kurzbeschreibung

SQL-Anweisungen, die Daten manipulieren oder Datenbankobjekte erstellen, sind erst dauerhaft, wenn die Transaktion bestätigt wird. Dies gilt nicht für ABSCHNEIDEN-Anweisungen, die implizit ein BEGEHEN ausführen.

Die Amazon Redshift-Konsole zeigt, dass der Abfragestatus für eine SQL-Anweisung „Abgeschlossen“ lautet, wenn sie sich noch in einer offenen Transaktion befindet. Der Status ändert sich in „Abgebrochen“, wenn die Transaktion rückgängig gemacht wird. Die Systemtabelle STL_QUERY zeigt auch, dass die SQL-Anweisung erfolgreich abgeschlossen wurde, wenn der Wert der abgebrochenen Spalte 0 ist.

Wenn die Transaktion später bestätigt wird, werden die Änderungen angezeigt. Wenn die Transaktion jedoch nicht bestätigt werden kann, zeigt die Amazon Redshift-Konsole an, dass die Abfrage abgebrochen wurde. Um den Grund zu ermitteln, warum Ihre Transaktion nicht bestätigt werden kann, überprüfen Sie die STL-Systemtabellen.

Auflösung

Um zu überprüfen, ob eine Transaktion bestätigt oder rückgängig gemacht wurde, verwenden Sie die Ausgabe der folgenden Abfrage in der Systemtabelle SVL_TEXTDERAUSSAGE. Filtern Sie dann nach der Transaktions-ID (xid) der SQL-Anweisung:

SELECT *
FROM SVL_STATEMENTTEXT
WHERE xid IN (SELECT xid FROM STL_QUERY WHERE query = [Query ID]) ORDER BY starttime, sequence;

In der Ausgabe der Abfrage wird die Anweisung „1 Transaktionen rückgängig machen“ für die rückgängig gemachte Transaktion angezeigt.

Wenn eine Transaktion mit einer BEGIN-Anweisung beginnt, wurde die Anweisung explizit vom Benutzer oder der Anwendung geöffnet. Die Aussage muss auch ausdrücklich bestätigt werden. Transaktionen, die nicht mit einer BEGIN-Anweisung initiiert wurden, werden normalerweise vom SQL-Client oder der AUTOMATISCHE BEGEHEN-Option des Treibers automatisch übernommen. Wenn die Option deaktiviert ist, muss der Benutzer explizit ein BEGEHEN senden.

Wenn eine Transaktion ordnungsgemäß bestätigt wurde, sind die Änderungen der Transaktion dauerhaft (persistent) und können anhand anderer XIDs erkannt werden, die nach der BEGEHEN-Aussage initiiert wurden. Weitere Informationen finden Sie unter Serialisierbare Isolation.

Wenn in der Systemtabelle SVL_TEXTDERAUSSAGE keine ENDE-, BEGEHEN- oder „1 Transaktionen rückgängig machen“- Meldung erscheint, ist die XID möglicherweise immer noch geöffnet. Verwenden Sie die SVV_TRANSAKTIONEN-Ansicht, um offene Transaktionen und SCHLEUSE-Konflikte zu identifizieren.

Die Systemtabellen STL_BEGEHEN_STATISTIKEN und STL_ABGEBUNDEN können auch verwendet werden, um zu bestätigen, ob eine Transaktion mit einem BEGEHEN oder einer WIEDERHOLUNG beendet wurde.

Führen Sie die folgende Abfrage aus, um herauszufinden, ob die Änderungen übernommen wurden:

SELECT q.query, q.xid, NVL2 (cs.endtime, cs.endtime::text, 'NO COMMIT') AS commit_endtime
FROM STL_QUERY q LEFT JOIN STL_COMMIT_STATS cs ON q.xid = cs.xid AND cs.node = -1
WHERE q.query = [QUERY ID];

Führen Sie die folgende Abfrage aus, um herauszufinden, ob die Änderungen rückgängig gemacht wurden:

SELECT *
FROM STL_UNDONE
WHERE xact_id_undone IN (SELECT xid from STL_QUERY where query = [QUERY ID]);

Transaktionsänderungen werden aufgrund eines expliziten ROLLBACK-Befehls oder wenn er erst nach Abschluss ausgeführt wird, nicht beibehalten. Explizite WIEDERHOLUNGEN können nicht auftreten, wenn eine serialisierbare Isolationsverletzung vorliegt. Sie können auch nicht auftreten, wenn ein Administrator eine Sitzung BEENDET oder eine Abfrage ABBRICHT. Auszeit in einer Netzwerkverbindung können auch verhindern, dass Transaktionsänderungen bestehen.

Wenn eine Wiederholung stattfindet, erhält der Client eine Fehlermeldung mit weiteren Details. Es empfiehlt sich, Ihren Client so zu konfigurieren, dass er Fehler protokolliert. Weitere Informationen finden Sie unter Konfigurieren der Protokollierung (JDBC) oder LogEbene (ODBC).

Ähnliche Informationen

STL_DDLTEXT

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren