Beispiele für gleichzeitige Schreibvorgänge - Amazon Redshift

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.

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.

Gleichzeitige COPY-Operationen für dieselbe Tabelle

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 für dieselbe Tabelle

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

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.