Parallele Datenbankzugriffe in der Praxis
Datenbanken und Datenbanksysteme sind für einen Mehrbenutzerbetrieb entwickelt worden und können Anfragen bzw. Transaktionen von Anwendern oder Systemprozessen quasi parallel verarbeiten.Dies kann zu Problemen und inkonsistenten Datenbeständen führen, wenn mehrere Benutzer bzw. Prozesse gleichzeitig auf denselben Datenbestand zugreifen.
Dabei treten vier unterschiedliche Phänomene, wie das inkonsistente Lesen, die sogenannten Dirty Reads und das Phantom-Problem sowie verlorengegangene Änderungen (Lost Updates), auf.
1. Problem - Lesen inkonsistenter Datenbestände
Beim Lesen inkonsistenter Daten, auch als Non-repeatable Read bezeichnet, lesen mindestens zwei Transaktionen (Prozesse) die gleichen Datenobjekte aus.
Zum Zeitpunkt des Lesezugriffes haben beide Transaktionen einen gültigen Datenstand.
Verändert bspw. Transaktion 1 den Wert und schreibt diesen in die Datenbank, verwendet die Transaktion 2 einen veralteten Wert. Wird die Leseoperation wiederholt, ergibt sich ein anderer Wert.
2. Problem - Dirty Read
Als schmutziges Lesen oder Dirty Read wird ein Vorgang einer Transaktion bezeichnet, der auf noch nicht gültige Daten zugreift.
Ein Dirty Read tritt auf, wenn eine Transaktion 2 von einer Transaktion 1 ein Zwischenergebnis liest, dieses aber noch nicht commited (bestätigt) ist. Bricht die Transaktion 1 aufgrund eines Fehlers oder manuellen Eingriffes ab, sind die Zwischenergebnisse nicht mehr gültig.
Zu diesem Zweitpunkt hat die Transaktion 2 diesen Wert aber bereits gelesen und in die Verarbeitung eingebunden. Dieses Problem kann verhindert werden, wenn die Transaktionen gegenseitig auf ein Commit und damit eine Freigabe der Ergebnisse warten. Dies muss das Transaktionsmanagement des Datenbanksystems gewährleisten.
3. Problem - Phantom-Problem
Phantome treten auf, wenn während eines Datenbankzugriffes der Datenbestand geändert wird, z. B. durch Löschen oder Hinzufügen von Daten. Ein Lesezugriff liefert dann nicht alle vorhandenen Daten oder zu viele.
Dies kann auch in modernen Systemen nicht verhindert werden, da durch Sperren, die für Änderungen oder Löschungen gesetzt werden, die Objekte nicht freigegeben sind.
Eine Lösung wäre das Sperren ganzer Tabellen oder Datenbanken, dies ist aber nicht im Sinne paralleler Transaktionsverarbeitung, da diese hierdurch verhindert wird.
4. Problem - Lost Update
Gehen Veränderungen an Daten aufgrund paralleler Schreibzugriffe verloren, spricht man von Lost Update.
Da die Transaktionen in letzter Konsequenz doch sequentiell verarbeitet werden, gewinnt bei Schreiboperationen die Transaktion die das gemeinsam verwendete Objekt als letztes in die Datenbank schreibt.
Die Änderungen aller anderen Transaktionen werden unbeachtet überschrieben. Dieses Problem lässt sich durch die Verwendung von Sperren oder Zeitmarken lösen und muss seitens des Datenbanksystems zur Verfügung gestellt werden.