Sobes.tech
Middle+
209

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.