Beispiele für gleichzeitige Schreibvorgänge - Amazon Redshift

Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting.

Beispiele für gleichzeitige Schreibvorgänge

In den folgenden Pseudocode-Beispielen wird gezeigt, wie Transaktionen entweder fortgesetzt werden oder warten, wenn sie gleichzeitig ausgeführt werden.

Beispiele für gleichzeitige Schreiboperationen

Gleichzeitige COPY-Operationen für dieselbe Tabelle mit serialisierbarer Isolierung

Transaktion 1 kopiert Zeilen in die Tabelle LISTING:

begin; copy listing from ...; end;

Transaktion 2 wird gleichzeitig in einer getrennten Sitzung gestartet und versucht, mehr Zeilen in die Tabelle LISTING zu kopieren. Transaktion 2 muss warten, bis Transaktion 1 die Schreibsperre für die Tabelle LISTING aufhebt. Anschließend kann sie fortgesetzt werden.

begin; [waits] copy listing from ; end;

Dasselbe Verhalten würde auftreten, wenn eine oder beide Transaktionen anstelle eines COPY-Befehls einen INSERT-Befehl enthalten.

Gleichzeitige DELETE-Operationen aus derselben Tabelle mit serialisierbarer Isolierung

Transaktion 1 löscht Zeilen aus einer Tabelle:

begin; delete from listing where ...; end;

Transaktion 2 wird gleichzeitig gestartet und versucht, in derselben Tabelle Zeilen zu löschen. Die Transaktion ist erfolgreich, da sie auf den Abschluss von Transaktion 1 wartet, bevor sie versucht, Zeilen zu löschen.

begin [waits] delete from listing where ; end;

Dasselbe Verhalten würde auftreten, wenn eine oder beide Transaktionen anstelle eines DELETE-Befehls einen UPDATE-Befehl für dieselbe Tabelle enthalten.

Gleichzeitige Transaktionen mit einer Mischung aus Lese- und Schreiboperationen mit serialisierbarer Isolierung

In diesem Beispiel löscht Transaktion 1 Zeilen aus der Tabelle USERS, lädt die Tabelle neu und führt eine COUNT(*)-Abfrage und anschließend ANALYZE aus, bevor sie einen Commit ausführt:

begin; delete one row from USERS table; copy ; select count(*) from users; analyze ; end;

In der Zwischenzeit wird Transaktion 2 gestartet. Diese Transaktion versucht, zusätzliche Zeilen in die Tabelle USERS zu kopieren, die Tabelle zu analysieren und anschließend dieselbe COUNT(*)-Abfrage wie die erste Transaktion auszuführen:

begin; [waits] copy users from ...; select count(*) from users; analyze; end;

Die zweite Transaktion ist erfolgreich, da sie auf den Abschluss der ersten Transaktion warten muss. Die COUNT-Abfrage gibt die Zahl basierend auf dem abgeschlossenen Ladevorgang zurück.

Beispiele für gleichzeitige Schreiboperationen mit Snapshot-Isolierung

Gleichzeitige COPY-Operationen für dieselbe Tabelle mit Snapshot-Isolierung

Transaktion 1 kopiert Zeilen in die Tabelle LISTING:

begin; copy listing from ...; end;

Transaktion 2 wird gleichzeitig in einer getrennten Sitzung gestartet und versucht, mehr Zeilen in die Tabelle LISTING zu kopieren. Transaktion 2 kann gleichzeitig ausgeführt werden, bis eine der Transaktionen Daten in die Zieltabelle listing schreiben muss. Danach werden sie sequenziell ausgeführt.

begin; //When the COPY statement from T1 needs to write data to the table, the COPY statement from T2 waits. copy listing from ...; end;

Dasselbe Verhalten würde auftreten, wenn eine oder beide Transaktionen anstelle eines COPY-Befehls einen INSERT-Befehl enthalten.

Gleichzeitige DELETE-Operationen für dieselbe Tabelle mit Snapshot-Isolierung

Gleichzeitige DELETE- oder UPDATE-Operationen aus derselben Tabelle mit Snapshot-Isolierung werden wie Operationen mit serialisierbarer Isolierung ausgeführt.

Gleichzeitige Transaktionen mit einer Mischung aus Lese- und Schreiboperationen mit Snapshot-Isolierung

Gleichzeitige Transaktionen, die mit gemischten Operationen mit Snapshot-Isolierung ausgeführt werden, werden wie Transaktionen mit gemischten Operationen ausgeführt, die mit serialisierbarer Isolierung ausgeführt werden.