Welche Anomalien können bei parallelen Transaktionen auftreten?
Antwort von AI
sobes.tech KI
Bei paralleler Ausführung von Transaktionen können folgende Anomalien auftreten:
-
Verlorenes Update (Lost Update): Eine Transaktion überschreibt Änderungen einer anderen Transaktion, bevor diese Änderungen bestätigt wurden.
Zeit Transaktion 1 Transaktion 2 t1 Liest den Saldo-Wert (z.B. 100) t2 Liest den Saldo-Wert (z.B. 100) t3 Erhöht den Saldo um 10 (Saldo = 110) t4 Erhöht den Saldo um 20 (Saldo = 120) t5 Bestätigt die Änderungen (Saldo wird 110) t6 Bestätigt die Änderungen (Saldo wird 120) Ergebnis: Trotz zweier Erhöhungen ist der Endwert des Saldos 120, nicht 130. Das Update von Transaktion 1 geht verloren.
-
Dirty Read (Schmutziges Lesen): Eine Transaktion liest unbestätigte Änderungen einer anderen Transaktion. Wenn die transaktion, die die Änderungen vorgenommen hat, zurückgesetzt wird, sind die gelesenen Daten ungültig.
Zeit Transaktion 1 Transaktion 2 t1 Beginnt, den Saldo zu ändern (100 -> 110) t2 Liest den Saldo (erhält 110) t3 Macht die Änderung rückgängig (Saldo kehrt zu 100) t4 Verwendet den Saldo = 110 in Berechnungen, obwohl der tatsächliche Wert 100 ist Ergebnis: Transaktion 2 basiert auf Daten, die letztlich nicht bestätigt wurden.
-
Nicht-wiederholbares Lesen (Non-Repeatable Read): Während einer Transaktion werden beim erneuten Lesen derselben Zeile unterschiedliche Werte gelesen, weil eine andere Transaktion Änderungen an dieser Zeile zwischen den Lesungen bestätigt hat.
Zeit Transaktion 1 Transaktion 2 t1 Liest den Saldo (erhält 100) t2 Ändert den Saldo auf 110 und bestätigt t3 Liest den Saldo erneut (erhält 110 statt 100) Ergebnis: Der Saldo hat sich innerhalb derselben Transaktion geändert, was zu inkorrekten Ergebnissen führen kann.
-
Phantom-Lesen (Phantom Read): Ähnlich wie nicht-wiederholbares Lesen, aber es betrifft das Hinzufügen oder Entfernen von Zeilen, die die Ergebnisse einer Abfrage mit Prädikat beeinflussen.
Zeit Transaktion 1 Transaktion 2 t1 Führt die Abfrage SELECT COUNT(*) FROM Orders WHERE Status = 'Pending'aus (erhält 5)t2 Fügt eine neue Bestellung mit Status 'Pending' hinzu und bestätigt t3 Führt SELECT COUNT(*) FROM Orders WHERE Status = 'Pending'erneut aus (erhält 6)Ergebnis: Bei erneuter Ausführung der Abfrage erscheinen "Phantom"-Zeilen, die beim ersten Lesen nicht vorhanden waren.
Diese Anomalien werden durch die Verwendung verschiedener Isolationsstufen von Transaktionen verhindert.