Erforderliche Eigenschaften von Transaktionen:
1. Atomicity: Eine Transaktion ist eine elementarer Prozeß. Er wird entweder vollständig oder gar nicht durchgeführt.
2. Konsistenzkriterium: Eine korrekte Durchführung einer Transaktion muß die Datenbank wieder in einen konsistenten Zustand versetzt
3. Dauerhaftigkeit: Wurden von einer Transaktion Änderungen durchgeführt und bestätigt, so gehen diese auch durch einen späteren Fehler nicht mehr verloren.
4. Isolation: Alle Änderungen während einer Transaktion dürfen für andere Transaktionen erst nach der Bestätigung sichtbar werden.
5. Serialisierbarkeit: Man spricht von serialisierbaren Transaktionen, wenn ein Datenbankzustand, der durch parallel arbeitende Transaktionen erreicht wurde, auch durch die serielle Abarbeitung der gleichen Transaktionen erreicht würde.
Es wird vorausgesetzt, daß die einzelnen Transaktionen voneinander unabhängig sind. Eine Abhängigkeit wäre gegeben, wenn z.B. eine Transaktion A vor einer Transaktion B unbedingt laufen müßte. Damit ist zwar keine beliebige Hintereinanderausführung mehr möglich, aber es ist ein bestimmter, zeitlicher Ablauf gegeben.
Punkt 1 und 2 sind in der Definition der Transaktion enthalten. Punkt 3 wird durch Recovery Techniken im Falle eines Fehlers gewährleistet.
Zur Einhalten der im Punkt 4 und 5 geforderten Serialisierbarkeit wird das Two-Phase-Locking Protokoll eingesetzt
1.6.1 Two Phase Locking
Wenn eine Transaktion einen gesperrten Datensatz wieder frei gibt, aber ihn danach noch einmal benötigt und ihn somit wieder sperren muß, muß erwartet werden das die Daten schon von einer anderen Transaktion geändert wurden. Um die daraus resultierenden Probleme (uncommitted dependency) zu vermeiden, werden folgende Forderungen aufgestellt:
. Vor jeder Bearbeitung eines Datensatzes wird dieser gesperrt
. Dieser Datensatz wird erst wieder freigegeben, wenn er für die restliche Transaktion nicht mehr benötigt wird.
Eine Transaktion, die beiden Regeln entspricht, arbeitet nach dem \"two Phase Locking Protocol (2PL)\", und erfüllt die Forderung der Serialisierbarkeit.
1.6.2 Zeitmarkenverfahren (Timestamp technique)
Jede Transaktion erhält bei ihrem Start einen Zeitstempel. Die Abarbeitung erfolgt streng noch dem Prinzip First in - First out (FIFO), d.h. streng nach der Startreihenfolge. Tritt ein Konflikt auf, so wird jene Transaktion neu gestartet die den Konflikt auslöste. Ein Konflikt entsteht z.B. wenn eine "ältere" Transaktion eine Leseanforderung für einen bestimmten Datensatz absetzt, der durch eine "jüngere" verändert werden soll. Dadurch erhält der Benutzer immer die aktuellen und geänderten Daten. Dieses Verfahren dient unter anderem zur Vermeidung von Deadlocks.
1.6.3 Transaktion Retry
Nach Erkennung eines Deadlocks muß eine der Transaktionen abgebrochen und zu einem späteren Zeitpunkt neu gestartet werden. Für die Entscheidung welche der Transaktionen abzubrechen ist gibt es verschiedene Verfahren:
. Wait Die Protokoll
. Wound Wait Protokoll
Bei beiden Verfahren wird jeweils die \"jüngere\" Transaktion zurückgenommen und zu einem späteren Zeitpunkt ausgeführt. Dazu ist erforderlich, daß jede Transaktion einen eindeutigen Zeitstempel, am Beginn erhält.
Wenn die Transaktion A einen von der Transaktion B bereits gesperrten Datensatz sperren will, passiert folgendes:
. Wait Die: falls A älter ist als B wartet A, sonst wird A zurückgenommen
. Wound Wait: falls A jünger ist als B wartet A, sonst wird B zurückgenommen
Es ergibt sich folgende Wertetabelle:
B hat Satz gesperrt, A fordert Satz an
Wait-Die Wound-Wait
A B A B
A älter als B wartet - - zurückgenommen
B älter als A zurückgenommen - wartet -
-: arbeitet
Bei diesem System ist sichergestellt, daß kein Deadlock entstehen kann, da jede Transaktion in einer endlichen Zeit und nach endlich vielen Wiederholungen ausgeführt wird. Das Schlimmste was passieren kann, ist daß der Rechner zu langsam ist und jede neu ankommende Transaktion länger abläuft als ihr Vorgänger.
|