Phantomproblem

Phantomproblem

In der Informatik ist das Phantomproblem (inconsistent read) ein Fehler, der bei mehreren parallelen Datenbankzugriffen auftreten kann. Werden während einer Transaktion, die sich auf mehrere Datensätze mit einer angegebenen Eigenschaft bezieht, in einer gleichzeitig ablaufenden Transaktion neue Datensätze mit dieser Eigenschaft eingefügt, kann dies inkonsistente Daten der ersten Transaktion zur Folge haben.

Inhaltsverzeichnis

Beispiele für das Phantomproblem

Über eine komplette Spalte soll eine Verknüpfung berechnet werden

Konkret kann das beispielsweise die Bildung des Mittelwertes einer Spalte sein. Transaktion 1 ermittelt zunächst die Anzahl der Datensätze in der Tabelle; danach fügt Transaktion 2 einen neuen Datensatz hinzu. Wenn Transaktion 1 die Summe über die Spalte bildet, um sie danach durch die vorher ermittelte Anzahl der Datensätze zu teilen, wird diese Summe über mehr Datensätze gebildet, als gezählt wurden. Der Mittelwert wird verfälscht.

Zeitpunkt Transaktion 1 Transaktion 2
1 SELECT SUM(anzahl) FROM lagerbestand;

Ergebnis: Anzahl Waren im Lager insgesamt, z.B. bei zwei unterschiedlichen Artikeln mit je einem Exemplar der Wert 2.

2 INSERT INTO lagerbestand (artikel, anzahl) VALUES ('Wikipedia: Das Buch', 3);
3 SELECT COUNT(*) FROM lagerbestand;

Ergebnis: Anzahl unterschiedlicher Artikel im Lager. Nach dem parallel laufenden INSERT ist der zurückgegebene Wert 3. Wird das Ergebnis von vorhin durch diesen Wert geteilt, um die durchschnittliche Anzahl von Exemplaren zu ermitteln, wird nicht das korrekte Ergebnis (5/3) errechnet, sondern ein zu niedriger Wert (2/3).

Vermeidung

Am einfachsten kann dieses Problem vermieden werden, wenn bei einer für das Phantomproblem anfälligen Transaktion die komplette Tabelle gesperrt wird. Es genügt jedoch, Modifikationen der betroffenen Spalte bei den betroffenen Datensätzen zu verhindern, wenn gleichzeitig sichergestellt werden kann, dass keine neuen Einträge hinzugefügt werden können oder bestehende Einträge entfernt werden können, die ebenfalls später in der Transaktion erfasst würden.

Datenbanken kennen die der Isolationsebene serializable des SQL-Standards entsprechende Möglichkeit der Serialisierung von parallelen Transaktionen. Wird diese Isolationsebene eingesetzt, müssen Anwendungen, die auf die Datenbank zugreifen, mit hierdurch entstehenden, fehlgeschlagenen Zugriffen (Serialisierungsfehlern) umgehen können.

Fallstricke

Viele Datenbanken haben die Fähigkeit des wiederholbaren Lesens entsprechend der Isolationsebene repeatable read des SQL-Standards. Das bedeutet, dass bei Änderung eines Datensatzes der Zeitpunkt der Änderung mit abgelegt wird. Eine Transaktion, die vor dieser Änderung begonnen hat, "sieht" die Änderung dann nicht. Dies bezieht sich jedoch oft nicht auf neu angelegte Datensätze, sondern garantiert nur, dass ein erneuter Lesevorgang auf bereits gelesene Daten innerhalb einer Transaktion dasselbe Ergebnis hat.

Siehe auch

Weblinks


Wikimedia Foundation.

См. также в других словарях:

  • ACID (Informatik) — ACID, deutsch auch AKID, ist ein Akronym in der Informatik. Es beschreibt erwünschte Eigenschaften von Transaktionen in Datenbankmanagementsystemen (DBMS) und verteilten Systemen. Es steht für atomicity, consistency, isolation und durability. Man …   Deutsch Wikipedia

  • Dirty Read — Ein Schreib Lese Konflikt (auch Dirty Read) tritt in der Informatik auf, wenn von zwei gleichzeitig ablaufenden Transaktionen die eine Daten liest, die von der anderen geschrieben werden, jedoch noch nicht bestätigt (committed) sind. Beispiel Die …   Deutsch Wikipedia

  • Lost Update — Verlorenes Update (auch engl. Lost Update) bezeichnet in der Informatik einen Fehler, der bei mehreren parallelen Schreibzugriffen auf eine gemeinsam genutzte Information auftreten kann. Wenn zwei Transaktionen dieselbe Information verändern,… …   Deutsch Wikipedia

  • Non-Repeatable Read — Nichtwiederholbares Lesen oder Non Repeatable Read bezeichnet in der Informatik ein Problem, das auftritt, wenn innerhalb einer Transaktion dieselbe Leseoperation nacheinander unterschiedliche Ergebnisse liefert. Beispiel Diese Transaktion könnte …   Deutsch Wikipedia

  • Verlorene Updates — Verlorenes Update (auch engl. Lost Update) bezeichnet in der Informatik einen Fehler, der bei mehreren parallelen Schreibzugriffen auf eine gemeinsam genutzte Information auftreten kann. Wenn zwei Transaktionen dieselbe Information verändern,… …   Deutsch Wikipedia

  • ACID — ACID, deutsch auch AKID, ist eine Abkürzung in der Informatik. Es beschreibt erwünschte Eigenschaften von Verarbeitungsschritten in Datenbankmanagementsystemen (DBMS) und verteilten Systemen. Es steht für Atomicity, Consistency, Isolation und… …   Deutsch Wikipedia

  • Nichtwiederholbares Lesen — oder Non Repeatable Read bezeichnet in der Informatik ein Problem, das auftritt, wenn innerhalb einer Transaktion dieselbe Leseoperation nacheinander unterschiedliche Ergebnisse liefert. Beispiel Diese Transaktion könnte bei einem Wiki dazu… …   Deutsch Wikipedia

  • Schreib-Lese-Konflikt — Ein Schreib Lese Konflikt (auch Dirty Read) tritt in der Informatik auf, wenn von zwei gleichzeitig ablaufenden Transaktionen die eine Daten liest, die von der anderen geschrieben werden, jedoch noch nicht bestätigt (committed) sind. Beispiel Die …   Deutsch Wikipedia

  • Verlorenes Update — (auch engl. Lost Update) bezeichnet in der Informatik einen Fehler, der bei mehreren parallelen Schreibzugriffen auf eine gemeinsam genutzte Information auftreten kann. Wenn zwei Transaktionen dieselbe Information verändern, dann können die… …   Deutsch Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»