4 Transaktionen und Recovery

Werbung
Vorlesung Datenbanken
4
Wintersemester 2013/14
Transaktionen und Recovery
Zur Unterstützung des Mehrbenutzerbetriebs und der Datensicherheit,
speziell für länger andauernde Transaktionen:
1. In einem Reisebüro könnte ein Kunde eine Kette von Flügen (mit
Zwischenstops) buchen wollen, wobei er bereits reservierte Flüge
solange blockiert, bis er sich für eine komplette Reise entschieden hat.
Gleichzeitig wollen viele andere Kunden und Reisebüros auf dieselbe
Datenbank zugreifen.
2. In einer CAD–Datenbank werden komplexe Objekte verwaltet,
die oft über einen längeren Zeitraum von verschiedenen Benutzern
gleichzeitig – aber an unterschiedlichen Stellen – bearbeitet werden.
In beiden Fällen soll jede Transaktion nur einen möglichst kleinen Teil der
Datenbank blockieren.
Prof. Dr. Dietmar Seipel
440
Vorlesung Datenbanken
Wintersemester 2013/14
4.1 Transaktionsverwaltung
Eine Transaktion ist ein Programm, welches auf den Inhalt der Datenbank
zugreift oder diesen verändert.
Wir wollen die verschränkte Ausführung von Transaktionen und die dabei
auftretenden Probleme untersuchen.
Dabei sind vor allem die von einer Transaktion Ti ausgeführten Lese– und
Schreiboperationen auf der Datenbank von Interesse.
• ri (X) liest das Datenobjekt X in die Programmvariable X.
• wi (X) schreibt den Wert der Programmvariablen X auf das
Datenobjekt X.
Prof. Dr. Dietmar Seipel
441
Vorlesung Datenbanken
Wintersemester 2013/14
4.1.1 Das Synchronisationsproblem
Wir betrachten eine Flugdatenbank, in der ein Datenobjekt X die Anzahl der
reservierten Plätze in Flug X enthält.
Transaktion T1 storniert N Plätze von Flug X und bucht dafür N
Plätze von Flug Y . Transaktion T2 bucht M Plätze von Flug X.
Für die beiden Transaktionen
T1 = r1 (X); X := X − N ; w1 (X); r1 (Y ); Y := Y + N ; w1 (Y )
T2 = r2 (X); X := X + M ; w2 (X)
erledigen die beiden seriellen Schedules s1,2 = T1 ; T2 und s2,1 = T2 ; T1 die
Aufgabe korrekt.
Prof. Dr. Dietmar Seipel
442
Vorlesung Datenbanken
Wintersemester 2013/14
Verschränkte Schedules wie s1 und s2 können zu Problemen führen:
s2 :
s1 :
T1
T2
T1
r1 (X);
r1 (X);
X := X − N ;
X := X − N ;
w1 (X);
r2 (X);
r2 (X);
X := X + M ;
X := X + M ;
w1 (X);
w2 (X);
r1 (Y );
r1 (Y );
Prof. Dr. Dietmar Seipel
T2
w2 (X);
Y := Y + N ;
Y := Y + N ;
w1 (Y );
w1 (Y );
443
Vorlesung Datenbanken
Wintersemester 2013/14
Dynamische Situation bei der Verarbeitung von Transaktionen.
1. Das Phantom– oder Unrepeatable Read–Problem besteht darin,
daß eine Transaktion ein Datenobjekt zweimal liest, und daß dieses in
der Zwischenzeit von einer anderen Transaktion verändert wird.
2. Das Lost Update–Problem tritt auf, wenn die Operationen zweier
Transaktionen, welche dasselbe Datenobjekt betreffen, verschränkt
ausgeführt werden.
Dann kann unter Umständen der Wert eines Datenobjekts hinterher
falsch sein, da einzelne Update–Operationen verloren gehen.
In s2 hat X nach der Ausführung keinen vernünftigen Wert, weil T2 den
Update von T1 überschreibt, obwohl T2 den Wert von X vor dem Update
durch T1 gelesen hat.
Prof. Dr. Dietmar Seipel
444
Vorlesung Datenbanken
Wintersemester 2013/14
3. Das Temporary Update– oder Dirty Read–Problem tritt auf,
wenn eine Transaktion ein Datenobjekt verändert und danach aus
irgendeinem Grund abgebrochen werden muß.
Dann kann es sein, daß eine andere Transaktion auf diesen temporären
Update zugreift, bevor das Datenobjekt auf seinen alten Wert
zurückgesetzt wurde.
Der temporäre neue Wert wird als dirty data bezeichnet.
Falls Transaktion T1 in s1 nach r1 (Y ) scheitert, so muß der alte Wert
von X wiederhergestellt werden.
Inzwischen hat allerdings T2 schon den temporären, falschen Wert von
X gelesen.
Prof. Dr. Dietmar Seipel
445
Vorlesung Datenbanken
Wintersemester 2013/14
4. Das Incorrect Summary–Problem (fehlerhafte Zusammenfassung) tritt
auf, wenn eine Transaktion eine Aggregatsfunktion berechnet, während
andere Transaktionen gleichzeitig die Datenbank verändern.
Dann kann es sein, daß die Aggregatsfunktion auf manche Tupel vor
dem Update zugreift und auf manche nach dem Update.
Das berechnete Resultat der Aggregatsfunktion entspricht dann keinem
vernünftigen Datenbankzustand.
Im folgenden Schedule s3 berechnet die Transaktion T3 die Summe der
Werte A, . . . , Z, und liest dabei
• X, nachdem dieses von T1 um N verringert wurde, und
• Y , bevor dieses um denselben Betrag N erhöht wurde,
woraus eine um N zu niedrige Summe resultiert.
Prof. Dr. Dietmar Seipel
446
Vorlesung Datenbanken
Wintersemester 2013/14
T1
T3
sum := 0;
r3 (A);
sum := sum + A;
.
..
r1 (X);
X := X − N ;
w1 (X);
r3 (X);
sum := sum + X;
r3 (Y );
sum := sum + Y ;
r1 (Y );
Y := Y + N ;
w1 (Y );
Prof. Dr. Dietmar Seipel
447
Vorlesung Datenbanken
Wintersemester 2013/14
Die Transaktion T1 könnte folgenden S QL–Statements entsprechen,
welche 10 Reservierungen eines Flugs auf einen anderen Flug tauschen:
U PDATE
FLIGHTS
S ET
AVAILABLE = AVAILABLE – 10
W HERE
NUMBER = ’DL 003’ A ND DATE = ’2007–12–04’;
U PDATE
FLIGHTS
S ET
AVAILABLE = AVAILABLE + 10
W HERE
NUMBER = ’LH 007’ A ND DATE = ’2007–12–04’;
Die Transaktion T3 könnte ein Teil der Berechnung des folgenden
S QL–Statements sein, welches die Anzahl der freien Flüge pro Tag ermittelt:
Prof. Dr. Dietmar Seipel
S ELECT
DATE, S UM (AVAILABLE)
F ROM
FLIGHTS
G ROUP B Y
DATE
448
Vorlesung Datenbanken
Wintersemester 2013/14
Ähnliche Probleme können in der C OMPANY–Datenbank entstehen,
wenn die Transaktion T1 Gehaltserhöhungen in E MPLOYEE durchführt,
während die Transaktion T2 die Summe der Löhne pro Abteilung ermittelt.
T1 könnte folgendem S QL–Statement entsprechen:
U PDATE
EMPLOYEE
S ET
SALARY = SALARY * 1.1
W HERE
BDATE > ’1975–12–24’
T2 entspricht folgendem S QL–Statement:
Prof. Dr. Dietmar Seipel
S ELECT
DNO, S UM (SALARY)
F ROM
EMPLOYEE
G ROUP B Y
DNO
449
Vorlesung Datenbanken
Wintersemester 2013/14
4.1.2 Operationen, Log–Buch
Das System protokolliert im Log–Buch alle Operationen, welche die Werte
von Datenobjekten betreffen (d.h. Lese– und Schreiboperationen).
Dadurch kann man bei Transaktionsfehlern immer noch zu einem korrekten
Datenbankzustand gelangen (→ Recovery).
Das Log–Buch wird auf der Festplatte gehalten, und es ist somit gegen fast
alle Systemfehler resistent.
Darüberhinaus wird das Log–Buch auch regelmäßig auf externe
Speichermedien gesichert, um noch besser vor Datenverlust gefeit zu sein.
Prof. Dr. Dietmar Seipel
450
Vorlesung Datenbanken
Wintersemester 2013/14
Folgende Einträge ins Log–Buch sind möglich:
start_transaction(T ): vermerkt den Start der Ausführung der
Transaktion T
write_item(T, X, Vold , Vnew ): vermerkt, daß Transaktion T den Wert des
Datenobjekts X von Vold auf Vnew verändert hat.
read_item(T, X): vermerkt, daß Transaktion T den Wert des
Datenobjekts X gelesen hat.
commit(T ): vermerkt, daß die Transaktion T erfolgreich beendet wurde,
und daß damit der Effekt von T auf die Datenbank permanent gemacht
werden kann.
abort(T ): vermerkt den Abbruch von Transaktion T.
Prof. Dr. Dietmar Seipel
451
Vorlesung Datenbanken
Wintersemester 2013/14
Wir nehmen an, daß Transaktionen nicht geschachtelt werden können.
Bei einem Systemzusammenbruch können wir aufgrund des Log–Buches
einen konsistenten Datenbank–Zustand herstellen:
• Falls eine Transaktion abgebrochen werden soll,
so kann man die Schreib–Operationen dieser Transaktion im Log–Buch
rückwärts verfolgen und einzeln zurücknehmen (undo),
indem man die Datenobjekte wieder auf ihre alten Werte setzt.
• Falls eine Transaktion weiterlaufen soll,
so kann man die Schreiboperationen dieser Transaktion im Log–Buch
vorwärts verfolgen und einzeln wiederholen (redo),
indem man die Datenobjekte auf ihre neuen Werte setzt.
Prof. Dr. Dietmar Seipel
452
Vorlesung Datenbanken
Wintersemester 2013/14
Transaktionen
T5
noch nicht
freigegeben
T
4
T3
T2
T1
checkpoint
T1 : irrelevant
Prof. Dr. Dietmar Seipel
T2 , T3 : restaurieren
crash
Zeit
T4 , T5 : zurücksetzen
453
Vorlesung Datenbanken
Wintersemester 2013/14
Der Commit–Punkt einer Transaktion
Eine Transaktion T erreicht ihren Commit–Punkt, sobald alle ihre
Zugriffsoperationen auf die Datenbank erfolgreich ausgeführt wurden
(und der Effekt der Operationen im Log–Buch protokolliert ist).
Danach heißt T freigegeben (committed), und ihr Effekt wird als permanent
angenommen. T schreibt einen Eintrag commit(T ) ins Log–Buch.
Falls ein Systemfehler auftritt, so wird im Log–Buch rückwärts nach allen
Transaktionen gesucht, welche ihr start_transaction(T ) eingetragen haben.
• Diejenigen Transaktionen darunter, welche noch kein commit(T )
eingetragen haben, müssen während des Recovery rückgängig gemacht
werden (roll–back) mittels undo–Operationen.
• Die Transaktionen mit commit(T )–Eintrag können mittels redo der
Schreib–Operationen aus dem Log–Buch wiederholt werden.
Prof. Dr. Dietmar Seipel
454
Vorlesung Datenbanken
Wintersemester 2013/14
Vor dem Commit einer Transaktion T müssen alle ihre Log–Buch–Einträge
auf Platte gesichert werden (force writing).
Bei einem Systemzusammenbruch können nur diese Teile des Log–Buches
zum Recovery verwendet werden.
Checkpoints
Regelmäßig wird auch ein checkpoint–Eintrag ins Log–Buch geschrieben.
Zu diesem Zeitpunkt werden die Updates von freigegebenen Transaktionen
in der Datenbank auf Platte durchgeführt – und das Log–Buch wird ebenfalls
auf Platte gesichert (Sicherungshierarchie).
Folglich müssen alle Transaktionen, welche ihren commit(T )–Eintrag vor
dem checkpoint–Eintrag im Log haben, bei einem Systemzusammenbruch
nicht wiederholt werden.
Prof. Dr. Dietmar Seipel
455
Vorlesung Datenbanken
Wintersemester 2013/14
Crashes
Bei einem Crash müssen alle laufenden, und noch nicht freigegebenen
Transaktionen zurückgesetzt werden. Dies ist unabhängig davon, ob die
Transaktionen vor (T4 ) oder nach (T5 ) dem letzten Checkpoint gestartet
wurden.
Die vor dem letzten Checkpoint bereits freigegebenen Transaktionen (T1 )
leiden nicht unter dem Crash, da ihre Effekte und Log–Buch–Einträge bereits
auf Platte gesichert wurden – sie sind für unsere Betrachtung hier also
irrelevant.
Nur die zwischem dem letzten Checkpoint und dem aktuellen Crash
freigegebenen Transaktionen müssen restauriert werden. Dies ist unabhängig
davon, ob die Transaktionen vor (T2 ) oder nach (T3 ) dem letzten Checkpoint
gestartet wurden.
Prof. Dr. Dietmar Seipel
456
Vorlesung Datenbanken
Wintersemester 2013/14
Transaktions–Status–Diagramm
BEGIN
TRANSACTION
READ,
WRITE
ACTIVE
END
TRANSACTION
PARTIALLY
COMMITTED
COMMIT
COMMITTED
ABORT
ABORT
FAILED
TERMINATED
Sobald eine Transaktion T alle Datenzugriffe erfolgreich durchgeführt hat,
ist sie partially committed.
Vor dem endgültigen commit müssen Concurrency Control– und Recovery
Control–Checks sicherstellen, daß T keine unerwünschten
Wechselwirkungen mit anderen Transaktionen hatte.
Dieses würde, genau wie ein Fehler bei den Datenzugriffen, zu einem
Abbruch (abort) führen, und T wäre fehlgeschlagen.
Prof. Dr. Dietmar Seipel
457
Vorlesung Datenbanken
Wintersemester 2013/14
4.1.3 Das ACID–Prinzip
Zum Zwecke einer korrekten Synchronisation und der Gewährleistung von
Fehlertoleranz muß die Transaktionsverwaltung folgende vier Eigenschaften
sicherstellen:
Atomarität (Atomicity)
Eine Transaktion wird aus der Sicht des Benutzers vollständig oder gar
nicht ausgeführt. Wird eine Ausführung vor ihrem eigentlichen Ende
abgebrochen, so erscheint die Datenbank hinterher so, als wäre diese
Ausführung nie gestartet worden.
Konsistenz (Consistency)
Alle Integritätsbedingungen der Datenbank werden eingehalten,
d.h. eine Transaktion hinterläßt stets einen konsistenten Zustand,
falls sie in einem solchen gestartet wurde.
Prof. Dr. Dietmar Seipel
458
Vorlesung Datenbanken
Wintersemester 2013/14
Isolation
Jede Transaktion läuft isoliert von anderen Transaktionen ab.
Sie ist aber nicht nur hinsichtlich der Behandlung des
Datenbankpuffer–Bereichs, sondern auch hinsichtlich ihrer
Datenbankbehandlung von anderen Transaktionen unabhängig.
Persistenz (Durability)
Falls die Transaktion dem Benutzer als erfolgreich beendet gemeldet
wird, so überleben die von ihr in der Datenbank erzeugten Effekte jeden
danach auftretenden Hardware– (Hauptspeicher) oder Softwarefehler,
und zwar sogar dann, wenn sie sich zum Zeitpunkt des Fehlers noch im
Datenbankpuffer (und nicht schon in der Datenbank selbst) befinden.
Prof. Dr. Dietmar Seipel
459
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (ACID)
1. Vor und nach einer Transaktion T müssen alle Integritätsbedingungen
(Primär– und Fremdschlüssel–Bedingungen) erfüllt sein. Während der
Transaktion können einzelne Updates von T diese zeitweise verletzen.
2. Der folgende Schedule s entspricht keiner isolierten Ausführung der
beiden Transaktionen T1 und T2 , denn T2 liest das Resultat “X − 1” von
T1 , und T1 liest das Resultat “2 · Y ” von T2 .
s erzeugt in jedem Falle eine Resultats–Datenbank,
welche die Integritätsbedingung “X + Y = 0” verletzt,
auch wenn die Ausgangs–Datenbank diese Bedingung erfüllt.
Für die neuen Werte X ′ und Y ′ gilt nämlich X ′ = 2 · (X − 1) und
Y ′ = 2 · Y + 1. Falls X + Y = 0 gilt, so folgt daraus
X ′ + Y ′ = 2 · (X − 1) + 2 · Y + 1 = 2 · (X + Y ) + 1 = 1.
Prof. Dr. Dietmar Seipel
460
Vorlesung Datenbanken
Wintersemester 2013/14
T1
T2
r1 (X);
X := X − 1;
w1 (X);
r2 (X);
X := 2 · X;
.
.
.
w2 (X);
.
.
.
r2 (Y );
Y := 2 · Y ;
w2 (Y );
r1 (Y );
Y := Y + 1;
w1 (Y );
Prof. Dr. Dietmar Seipel
461
Vorlesung Datenbanken
Wintersemester 2013/14
Transaktionen und Schedules
1. Zeitlich verzahnte Ausführungsreihenfolgen von Operationen (read,
write) verschiedener Transaktionen werden modelliert durch Schedules.
2. Es liegt eine dynamische Situation vor:
Die zu verarbeitenden Transaktionen sind dem DBMS a priori nicht
bekannt; es muß jederzeit bereit sein, neu eintreffende Operationen zu
verarbeiten und insbesondere mit bereits laufenden zu synchronisieren.
p1,1 p1,2 ...
←−−−−−−−
DB
p1,1 q2,1 o3,1 o3,2 p1,2 q2,2 ...
←−−−−−−−−−−−−−−−−
Scheduler
q2,1 q2,2 ...
←−−−−−−−
o3,1 o3,2 ...
←−−−−−−−
Wenn man die Transaktionen wie die Spuren einer Autobahn bei einer Streckenverengung auf
eine einzige Spur und die Aktionen wie die Fahrzeuge betrachtet, dann regelt der Scheduler das
Einfädeln lassen. Dabei müssen nicht immer alle Spuren gleichmäßig zum Zuge kommen.
Prof. Dr. Dietmar Seipel
462
Vorlesung Datenbanken
Wintersemester 2013/14
3. Wir interessieren uns für Bedingungen, unter denen ein solcher Schedule
als korrekt bezeichnet werden kann.
Diese Bedingungen sollen leicht testbar sein.
Die Theorie der Korrektheit von Schedules soll außerdem ohne die
Kenntniss semantischer Information auskommen.
3. Zur Analyse der Korrektheit von Operationenfolgen werden nur
syntaktische Kriterien herangezogen,
nämlich die Folge der Lese– und Schreiboperationen.
Die Korrektheit eines Schedules hängt mit der Äquivalenz zu einem
seriellen Schedule zusammen.
Diese garantiert dann die korrekte Synchronisation beliebiger
Operationenfolgen.
Prof. Dr. Dietmar Seipel
463
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (Semantische Äquivalenz)
1. Die beiden Schedules s1 , s2 liefern unterschiedliche Ergebnisse
(X − 1 bzw. X − 2) und sind semantisch nicht äquivalent:
s2 :
s1 :
T1
T2
r1 (X);
T2
r1 (X);
r2 (X);
X := X − 1;
X := X − 1;
w1 (X);
w1 (X);
Prof. Dr. Dietmar Seipel
T1
r2 (X);
X := X − 1;
X := X − 1;
w2 (X);
w2 (X);
464
Vorlesung Datenbanken
Wintersemester 2013/14
2. Die beiden Schedules s′1 , s′2 liefern dasselbe Ergebnis und sind
semantisch äquivalent für boolesche Werte X ∈ {0, 1}, denn
X − 1 = X 2 − 1 ⇔ X ∈ {0, 1},
sonst liefern sie unterschiedliche Ergebnisse.
s′2 :
s′1 :
T1
T2
r1 (X);
T1
T2
r1 (X);
r2 (X);
X := X 2 ;
X := X 2 ;
w1 (X);
w1 (X);
r2 (X);
X := X − 1;
X := X − 1;
w2 (X);
w2 (X);
Nur die Datenoperationen unterscheiden sich im Vergleich zu 1.
Prof. Dr. Dietmar Seipel
465
Vorlesung Datenbanken
Wintersemester 2013/14
s′1 :
s′2 :
T1
T2
r1 (X);
T1
T2
r1 (X);
r2 (X);
X := X 2 ;
X := X 2 ;
w1 (X);
w1 (X);
r2 (X);
X := X − 1;
X := X − 1;
w2 (X);
w2 (X);
Zur Analyse der Korrektheit von Schedules werden nur syntaktische Kriterien
basierend auf der Folge der Lese– und Schreib–Operationen herangezogen.
s1 =
ˆ s′1 =
ˆ r1 (X) r2 (X) w1 (X) w2 (X),
ˆ r1 (X) w1 (X) r2 (X) w2 (X).
s2 =
ˆ s′2 =
Prof. Dr. Dietmar Seipel
466
Vorlesung Datenbanken
Wintersemester 2013/14
4.1.4 Transaktionen, Schedules und Serialisierbarkeit
Im Folgenden sei eine Datenbank eine Menge D = { x, y, z, . . . } von
unteilbaren und disjunkten Objekten (z.B. Datenseiten),
welche in einem Schritt zwischen Sekundär– und Hauptspeicher bzw.
Datenbankpuffer transportiert werden können.
Für die korrekte Synchronisation parallel auszuführender Benutzeraufträge
an eine Datenbank ist es wichtig, deren
• lesende (read, r) und
• schreibende (write, w) Datenzugriffe
zu kontrollieren.
Prof. Dr. Dietmar Seipel
467
Vorlesung Datenbanken
Wintersemester 2013/14
Definition (Transaktion)
Eine Transaktion ist eine endliche Folge
ti = p1 . . . pn
von n ∈ IN Lese– und Schreib–Operationen
pj ∈ { ri (Xj ), wi (Xj ) }, mit Xj ∈ D, für 1 ≤ j ≤ n.
Wir machen die Annahme, daß in jeder Transaktion jedes Datenobjekt
höchstens einmal gelesen oder geschrieben wird.
In Gegenwart mehrerer Transaktionen t1 , . . . , tm kann man die Schritte der
verschiedenen Transaktionen durch ihren Index eindeutig zuordnen.
Beispiel (Transaktion)
t1 = r1 (X) w1 (X) r1 (Y ) w1 (Y )
Prof. Dr. Dietmar Seipel
468
Vorlesung Datenbanken
Wintersemester 2013/14
Definition (Schedule)
Sei T = { t1 , . . . , tn } eine (endliche) Menge von Transaktionen.
1. Das Shuffle–Produkt shuffle(T ) von T ist die Menge aller Folgen
s = p1 . . . pm von Schritten, welche folgende Bedingungen erfüllen:
• die Folgen ti ∈ T kommen in s als Teilfolgen vor,
• sonst kommen in s keine weiteren Schritte vor.
2. Ein vollständiger Schedule s für T entsteht aus einer Folge
s′ ∈ shuffle(T ) durch Hinzunahme der Pseudo–Schritte ci (commit) und
ai (abort) für jede Transaktion ti ∈ T nach folgenden Regeln:
• entweder ci oder ai ist in s, aber nicht beide: ci ∈ s ⇔ ai ∈
/ s,
• ci bzw. ai steht in s irgendwo hinter dem letzten Schritt von ti .
Prof. Dr. Dietmar Seipel
469
Vorlesung Datenbanken
Wintersemester 2013/14
3. shuffle ac (T ) bezeichnet die Menge aller vollständigen Schedules für T .
4. Ein Schedule ist ein Präfix eines vollständigen Schedules.
5. Ein vollständiger Schedule heißt seriell, falls
s = tπ(1) pπ(1) . . . tπ(n) pπ(n)
gilt für eine Permutation π : h 1, n i −→ h 1, n i und für
Pseudo–Schritte pi ∈ {ci , ai }, für 1 ≤ i ≤ n.
Das englische to give the cards a shuffle bedeutet im Deutschen die Karten
mischen. Dabei werden zwei Kartenstapel – diese entsprechen den
Transaktionen – unter Beibehaltung ihrer relativen Reihenfolge verschränkt.
Prof. Dr. Dietmar Seipel
470
Vorlesung Datenbanken
Wintersemester 2013/14
Permutationen sind bijektive Abbildungen
π : h 1, n i −→ h 1, n i.
Man kann sie durch ihren Funktionsgraphen (Wertetabelle) veranschaulichen:
i
1
2 3
π(i)
3
1 2
Die zweite Zeile enthält eine Permutation des Intervalls h 1, n i.
Für die Transaktionsmenge T = { t1 , t2 , t3 } und die Pseudo–Schritte
c1 , a2 , c3 erhalten wir den seriellen Schedule
s = tπ(1) pπ(1) tπ(2) pπ(2) tπ(3) pπ(3) = t3 c3 t1 c1 t2 a2 .
Da es n! Permutation des Intervalls h 1, n i gibt, gibt es für vorgegebene
Pseudo–Schritte genauso viele mögliche serielle Schedules zu T .
Prof. Dr. Dietmar Seipel
471
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (Schedule)
Gegeben sei die Menge T = { t1 , t2 } von Transaktionen:
t1 = r1 (X) w1 (X) r1 (Y ) w1 (Y ),
t2 = r2 (X) w2 (X).
1. s1 = r1 (X) w1 (X) r2 (X) w2 (X) r1 (Y ) w1 (Y ) a1 c2
ist ein vollständiger Schedule.
2. Das Präfix s2 = r1 (X) w1 (X) r2 (X) w2 (X) r1 (Y ) w1 (Y )
von s1 ist ein Schedule.
3. s3 = t1 a1 t2 c2 und s4 = t2 c2 t1 a1 sind serielle Schedules.
Prof. Dr. Dietmar Seipel
472
Vorlesung Datenbanken
Wintersemester 2013/14
Der Status einer Transaktion ergibt sich aus einem Schedule.
Definition (Transaktionsstatus)
1. trans(s) enthält alle an einem Schedule s beteiligten Transaktionen,
commit(s) alle bereits freigegebenen, abort(s) alle abgebrochenen,
und active(s) alle noch aktiven Transaktionen:
trans(s)
= { ti | s enthält Schritte von ti },
commit(s) = { ti ∈ trans(s) | s enhält ci },
abort(s)
= { ti ∈ trans(s) | s enhält ai },
active(s)
= trans(s) \ (commit(s) ∪ abort(s)).
2. Die Menge aller in s vorkommenden Schritte (einschließlich der Schritte
ai und ci ) wird mit op(s) bezeichnet.
Prof. Dr. Dietmar Seipel
473
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (Transaktionen, Schedules)
Gegeben sei die Menge T = { t1 , t2 , t3 } von Transaktionen:
t1 = r1 (X) w1 (X) r1 (Y ) w1 (Y ),
t2 = r2 (Z) w2 (X) w2 (Z),
t3 = r3 (X) r3 (Y ) w3 (Z).
1. Dann gilt:
s1 = r1 (X) r2 (Z) r3 (X) w2 (X) w1 (X) r3 (Y )
r1 (Y ) w1 (Y ) w2 (Z) w3 (Z) ∈ shuffle(T ),
s2 = s1 c1 c2 a3 ∈ shuffle ac (T ),
s3 = r1 (X) r2 (Z) r3 (X) ist ein Schedule.
s4 = t1 c1 t3 a3 t2 c2 ist ein serieller Schedule.
Prof. Dr. Dietmar Seipel
474
Vorlesung Datenbanken
Wintersemester 2013/14
2. Für den vollständigen Schedule s = s2 und den seriellen Schedule
s = s4 gilt:
trans(s) =
commit(s) =
abort(s) =
active(s) =
op(s) =
=
{ t1 , t2 , t3 },
{ t1 , t2 },
{ t3 },
∅,
op(t1 ) ∪ op(t2 ) ∪ op(t3 ) ∪ { c1 , c2 , a3 } =
{ r1 (X), w1 (X), r1 (Y ), w1 (Y ),
r2 (Z), w2 (X), w2 (Z),
r3 (X), r3 (Y ), w3 (Z),
c1 , c2 , a3 }.
Prof. Dr. Dietmar Seipel
475
Vorlesung Datenbanken
Wintersemester 2013/14
Definition (Abschluß und Projektion eines Schedules)
Sei s ein Schedule.
1. Sei t0 eine Transaktion, welche alle in s angesprochenen Datenobjekte –
in der Reihenfolge des Auftretens in s jedes Datenobjekt genau einmal –
liest und dann freigegeben wird.
Dann heißt der Schedule s̄ = s t0 c0 der Abschluß von s.
2. Die Projektion ΠT (s) von s auf T ⊆ trans(s) ist der Schedule, der
entsteht, wenn man aus s alle Schritte zu den Transaktionen aus
trans(s) \ T entfernt.
3. Die freigegebene Projektion (committed projection) von s ist
CP (s) = Πcommit (s) (s).
4. Der bereinigte Schedule s∗ = Πcommit (s)∪active(s) (s) entsteht aus s,
indem man alle Operationen zu abgebrochenen Transaktionen wegläßt.
Prof. Dr. Dietmar Seipel
476
Vorlesung Datenbanken
Wintersemester 2013/14
Die Transaktion t0 in s̄ liest den am Ende von s aktuellen Datenbankzustand.
Beispiel (Abschluß und Projektion eines Schedules)
Wir betrachten den Schedule
s = w1 (X) r2 (X) w2 (Y ) r1 (Y ) w1 (Y ) w3 (X) w3 (Y ) c1 a2 .
1. Der Abschluß von s ist s̄ = s t0 c0 , wobei t0 = r0 (X) r0 (Y ).
2. Für T = { t1 , t2 } gilt commit(s) = { t1 }, active(s) = { t3 }, und:
ΠT (s) = w1 (X) r2 (X) w2 (Y ) r1 (Y ) w1 (Y ) c1 a2 ,
CP (s) = w1 (X) r1 (Y ) w1 (Y ) c1 ,
s∗
= w1 (X) r1 (Y ) w1 (Y ) w3 (X) w3 (Y ) c1 .
Für einen vollständigen Schedule s gilt active(s) = ∅, und folglich
s∗ = CP (s).
Prof. Dr. Dietmar Seipel
477
Vorlesung Datenbanken
Wintersemester 2013/14
Serialisierbarkeit
Äquivalenz zu einem seriellen Schedule.
Definition (Relationen <s und →s )
Sei s ein Schedule.
1. Steht in s ein Schritt p vor einem Schritt q, so schreiben wir p <s q.
2. Seien ri (X) und wj (X) zwei Operationen von unterschiedlichen
Transaktionen ti bzw. tj in s, die auf demselben Datenobjekt X
operieren.
ri (X) liest X in s von wj (X), falls wj (X) die letzte Schreiboperation
in s vor ri (X) ist, so daß tj vor ri (X) nicht abgebrochen ist.
X
3. Dann schreiben wir wj →s ri .
Prof. Dr. Dietmar Seipel
478
Vorlesung Datenbanken
Wintersemester 2013/14
Die folgende Relation RF (reads from) basiert auf dem Abschluß eines
Schedules, um zusätzlich zu berücksichtigen, welche Schreiboperationen den
resultierenden Datenbankzustand ausmachen.
Definition (Liest–Von–Relation)
Sei s ein Schedule.
1. Die Liest–Von–Relation von s ist
X
X
RF (s) = { wj → ri | wj →s̄ ri }.
2. Die bereinigte Liest–Von–Relation von s ist RF ∗ (s) = RF (s∗ ).
Für einen Schedule s und ti 6= tj ∈ trans(s) gilt:
X
X
wj → ri ∈ RF (s) ⇐⇒ wj →s̄ ri ⇐⇒
wj (X) <s̄ ri (X) ∧ aj 6<s̄ ri (X)∧
( wj (X) <s̄ wk (X) <s̄ ri (X) ⇒ ak <s̄ ri (X) )
Prof. Dr. Dietmar Seipel
479
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (Liest–Von–Relation)
1. Für die Schedules s1,2 = w1 (X) w2 (X) und s2,1 = w2 (X) w1 (X) gilt
s1,2 = w1 (X) w2 (X) r0 (X) c0 , s2,1 = w2 (X) w1 (X) r0 (X) c0 ,
und da es keine abgebrochenen Transaktionen gibt
X
RF ∗ (s1,2 ) = RF (s1,2 ) = { w2 → r0 }.
X
RF ∗ (s2,1 ) = RF (s2,1 ) = { w1 → r0 }.
Der Netto–Effekt des Schedules wird von w2 (X) bzw. w1 (X) bewirkt.
2. Unter dem Schutze einer weiteren, abschließenden Schreiboperation
w3 (X) haben beide Schedules denselben Netto–Effekt:
s1,2,3 = w1 (X) w2 (X) w3 (X), s2,1,3 = w2 (X) w1 (X) w3 (X),
X
RF ∗ (s1,2,3 ) = RF ∗ (s2,1,3 ) = { w3 → r0 }.
Der Netto–Effekt beider Schedules wird von w3 (X) bewirkt.
Prof. Dr. Dietmar Seipel
480
Vorlesung Datenbanken
Wintersemester 2013/14
3. Für die Schedules
s1 = w1 (X) r2 (X),
s2 = w1 (X) r2 (X) a1 ,
s3 = w1 (X) a1 r2 (X),
gilt:
X
X
RF (s1 ) = { w1 → r2 , w1 → r0 }.
X
RF (s2 ) = { w1 → r2 }.
RF (s3 ) = ∅.
In s2 und s3 hat w1 (X) keinen Netto–Effekt, da die Transaktion t1
X
abgebrochen wird; der Konflikt w1 → r0 existiert hier nicht.
In s3 wird die Transaktion t1 sogar vor r2 (X) abgebrochen;
X
deswegen existiert auch der Konflikt w1 → r2 hier nicht.
Die bereinigten Liest–Von–Relationen von s2 und s3 sind beide ∅,
da hierfür der Zeitpunkt des Abbruchs von t1 keine Rolle spielt.
Prof. Dr. Dietmar Seipel
481
Vorlesung Datenbanken
Wintersemester 2013/14
4. Für s = r1 (X) r2 (Y ) w1 (Y ) w2 (Y ) und die Schedules
s1 = s c1 c2 , s2 = s c1 a2 , s3 = r1 (X) w1 (Y ) c1 r2 (Y ) w2 (Y ) c2 ,
gilt s¯i = si r0 (X) r0 (Y ) c0 .
Y
Y
a) In s¯1 gilt w2 →s¯1 r0 . In s¯2 gilt wegen a2 hingegen w1 →s¯2 r0 .
Y
Y
b) In s¯3 gilt w2 →s¯3 r0 und zusätzlich w1 →s¯3 r2 .
c) Wir erhalten die folgenden Relationen:
Y
RF ∗ (s1 ) = RF (s1 ) = { w2 → r0 },
Y
RF ∗ (s2 ) = RF (s2 ) = { w1 → r0 },
Y
Y
RF ∗ (s3 ) = RF (s3 ) = { w1 → r2 , w2 → r0 }.
X
5. Für s = w1 (X) r2 (X) a1 sind RF ∗ (s) = ∅ und RF (s) = { w1 → r2 }
unterschiedlich, da der Abbruch a1 erst nach r2 (X) erfolgt.
X
w1 →s̄ r0 gilt aber nicht, da in s̄ der Abbruch a1 vor r0 (X) erfolgt.
Prof. Dr. Dietmar Seipel
482
Vorlesung Datenbanken
Wintersemester 2013/14
Definition (View–Äquivalenz, View–Serialisierbarkeit)
1. Zwei Schedules s, s′ heißen view–äquivalent, in Zeichen s ≈v s′ ,
falls op(s) = op(s′ ) und RF ∗ (s) = RF ∗ (s′ ) gilt.
2. Ein vollständiger Schedule s heißt view–serialisierbar, falls er
view–äquivalent ist zu einem seriellen Schedule s′ (d.h. s ≈v s′ ).
3. VSR ist die Klasse der view–serialisierbaren Schedules.
Satz (Test auf View–Äquivalenz und –Serialisierbarkeit)
1. Das Problem zu entscheiden, ob zwei gegebene Schedules s, s′
view–äquivalent sind, ist in Linearzeit lösbar.
2. Das Problem zu entscheiden, ob ein gegebener Schedule s
view–serialisierbar ist, ist N P–vollständig.
Die Verfahren zur Erzeugung view–serialisierbarer Schedules vermeiden diesen
Test – genau wie die 3NF–Synthese den N P–vollständigen 3NF–Test vermeidet.
Prof. Dr. Dietmar Seipel
483
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (View–Serialisierbarkeit)
1. Wir betrachten die drei Schedules
s
= r1 (X) r2 (Y ) w1 (Y ) w2 (Y ) c1 c2 ,
s1,2 = r1 (X) w1 (Y ) c1 r2 (Y ) w2 (Y ) c2 ,
s2,1 = r2 (Y ) w2 (Y ) c2 r1 (X) w1 (Y ) c1 .
Dann gilt op(s) = op(s1,2 ) = op(s2,1 ), aber
RF ∗ (s) = RF (s)
Y
= { w2 → r0 },
Y
Y
RF ∗ (s1,2 ) = RF (s1,2 ) = { w1 → r2 , w2 → r0 },
Y
RF ∗ (s2,1 ) = RF (s1,2 ) = { w1 → r0 }.
Folglich ist s zu keinem der beiden möglichen Serialisierungen s1,2 und
s2,1 view–äquivalent und damit nicht view–serialisierbar.
Prof. Dr. Dietmar Seipel
484
Vorlesung Datenbanken
Wintersemester 2013/14
2. Wir betrachten die drei leicht variierten Schedules
s
= r1 (X) r2 (Y ) w1 (Y ) w2 (Y ) a1 c2 ,
s1,2 = r1 (X) w1 (Y ) a1 r2 (Y ) w2 (Y ) c2 ,
s2,1 = r2 (Y ) w2 (Y ) c2 r1 (X) w1 (Y ) a1 ,
in denen die Transaktion t1 abgebrochen wird.
Dann gilt op(s) = op(s1,2 ) = op(s2,1 ) und
RF (s) = RF (s1,2 ) = RF (s2,1 ) =
Y
RF ∗ (s) = RF ∗ (s1,2 ) = RF ∗ (s2,1 ) = { w2 → r0 }.
Also ist s view–äquivalent zu s1,2 und zu s2,1 und damit
view–serialisierbar. Die Aktionen der abgebrochenen Transaktion t1
spielen dafür keine Rolle.
Prof. Dr. Dietmar Seipel
485
Vorlesung Datenbanken
Wintersemester 2013/14
Definition (Konfliktrelation)
Sei s ein Schedule und t, t′ ∈ trans(s), mit t 6= t′ .
1. Zwei Operationen p(X) ∈ t und q(X) ∈ t′ stehen in s in Konflikt,
falls
a) sie auf demselben Datenobjekt X operieren und
b) mindestens eine von ihnen schreibt, d.h. p = wi oder q = wj .
2. Die Konfliktrelation C(s) von s ist definiert durch
X
C(s) = { p → q | p(X) <s q(X) und
p(X) und q(X) stehen in s in Konflikt }.
3. Die bereinigte Konfliktrelation von s ist C ∗ (s) = C(s∗ ).
Prof. Dr. Dietmar Seipel
486
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (Konfliktrelation)
1. Für den Schedule s = w1 (X) erhalten wir C ∗ (s) = C(s) = ∅ und
X
RF ∗ (s) = RF (s) = { w1 → r0 }.
2. Für den Schedule
s = w1 (X) r2 (X) w2 (Y ) r1 (Y ) w1 (Y ) w3 (X) w3 (Y ) c1 a2
erhalten wir folgende Konfliktrelationen:
X
Y
Y
C ∗ (s)
=
{ w1 → w3 , r1 → w3 , w1 → w3 },
C(s)
=
C ∗ (s) ∪ { w1 → r2 , r2 → w3 , w2 → r1 , w2 → w1 , w2 → w3 }.
X
X
Y
Y
Y
Die abgebrochene Transaktion t2 wird in C ∗ (s) nicht berücksichtigt.
C(s) enthält transitive Verknüpfungen wie z.B.
X
X
X
w1 → r2 , r2 → w3 und w1 → w3 .
Prof. Dr. Dietmar Seipel
487
Vorlesung Datenbanken
Wintersemester 2013/14
RF (s) und RF ∗ (s) vs. C(s) und C ∗ (s)
rj
Die Konfliktrelation C(s) berücksichtigt alle Konflikte
X
X
◦
ri
X
wi
wi → rj , wi → wj , ri → wj ,
wj
◦
◦
X
während die Liest–Von–Relation RF (s) nur Konflikte wi → rj
berücksichtigt, bei denen ti vor rj (X) nicht abgebrochen wurde.
Abgebrochene Transaktionen
1. werden in RF ∗ (s) und in C ∗ (s) überhaupt nicht berücksichtigt,
2. während sie in RF (s) nur dann nicht berücksichtigt werden,
wenn der Abbruch vor rj (X) erfolgte.
Für jedes Datenobjekt X erkennt man die letzte wirksame Schreib–Operation
X
wi (X), mit ti 6∈ abort(s), an wi → r0 ∈ RF (s) bzw. an den am weitesten
X
X
rechts stehenden Konflikten wi → p oder p → wi ∈ C ∗ (s), an denen X
beteiligt ist (falls es solche gibt).
Prof. Dr. Dietmar Seipel
488
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (RF (s) und RF ∗ (s) vs. C(s) und C ∗ (s))
1. Für den Schedule s1 = w1 (X) w2 (X) r3 (X) erhalten wir
X
X
RF (s1 ) = { w2 → r3 , w2 → r0 } = RF ∗ (s1 ),
C(s1 )
X
X
X
= { w1 → w2 , w1 → r3 , w2 → r3 } = C ∗ (s1 ).
2. Für s2 = w1 (X) w2 (X) a2 r3 (X) und s3 = w1 (X) w2 (X) r3 (X) a2 erhalten
wir C(s1 ) = C(s2 ) = C(s3 ), aber
X
X
X
X
RF (s2 ) = { w1 → r3 , w1 → r0 },
RF (s3 ) = { w2 → r3 , w1 → r0 },
da der Abbruch a2 bei C gar nicht und bei RF erst für nachfolgende
Lese–Operationen wirksam ist.
X
3. RF ∗ (s2 ) = RF ∗ (s3 ) = RF (s2 ) und C ∗ (s2 ) = C ∗ (s3 ) = { w1 → r3 }
berücksichtigen a2 dagegen gleich.
Prof. Dr. Dietmar Seipel
489
Vorlesung Datenbanken
Wintersemester 2013/14
Definition (Konflikt–Äquivalenz, Konflikt–Serialisierbarkeit)
1. Zwei Schedules s und s′ heißen konflikt–äquivalent,
in Zeichen s ≈c s′ , falls op(s) = op(s′ ) und C ∗ (s) = C ∗ (s′ ).
2. Ein vollständiger Schedule s heißt konflikt–serialisierbar,
falls er konflikt–äquivalent ist zu einem seriellen Schedule s′
(d.h. s ≈c s′ ).
3. CSR ist die Klasse der konflikt–serialisierbaren Schedules.
Satz (View– vs. Konflikt–Serialisierbarkeit)
1. Jeder konflikt–serialisierbare Schedule ist auch view–serialisierbar.
2. Es gibt view–serialisierbare Schedules,
die nicht konflikt–serialisierbar sind.
3. Es gilt also CSR ( VSR.
Prof. Dr. Dietmar Seipel
490
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (Konflikt–Serialisierbarkeit)
Wir betrachten die folgenden Schedules:
s
=
r1 (X) r1 (Y ) w2 (X) w1 (Y ) r2 (Z) w1 (X) w2 (Y ),
s′
=
r1 (Y ) r1 (X) w1 (Y ) w2 (X) w1 (X) r2 (Z) w2 (Y ).
s′ entstand aus s durch paarweise Vertauschungen von nicht in Konflikt
stehenden Operationen. Dann gilt op(s) = op(s′ ) und
X
Y
X
Y
C ∗ (s) = C ∗ (s′ ) = { r1 → w2 , r1 → w2 , w2 → w1 , w1 → w2 },
und folglich s ≈c s′ . Hier gilt
X
Y
RF ∗ (s) = RF ∗ (s′ ) = { w1 → r0 , w2 → r0 },
und folglich s ≈v s′ .
Prof. Dr. Dietmar Seipel
491
Vorlesung Datenbanken
Wintersemester 2013/14
Definition (Konfliktgraph)
Der Konfliktgraph G(s) = (V, E) eines Schedules s ist definiert durch
V = commit(s) und
X
E = { (t, t′ ) ∈ V 2 | ∃ p(X) ∈ t, q(X) ∈ t′ : p → q ∈ C ∗ (s) }.
Beispiel (Konfliktgraph)
Der vollständige Schedule
s = r1 (X) r2 (X) w1 (X) r3 (X) w3 (X) w2 (Y ) c3 c2 w1 (Y ) c1
hat den azyklischen Konfliktgraphen G(s) und
∗
X
X
X
C (s) = { r1 → w3 , r2 → w1 , r2 → w3 ,
X
X
t1
t
2
Y
w1 → r3 , w1 → w3 , w2 → w1 }.
′
s ≈c s = t2 c2 t1 c1 t3 c3 .
Prof. Dr. Dietmar Seipel
t
3
492
Vorlesung Datenbanken
Wintersemester 2013/14
Eigenschaften von Konfliktgraphen
Lemma (Konfliktgraphen)
Zwei konflikt–äquivalente Schedules s und s′ haben denselben
Konfliktgraphen:
s ≈c s′ =⇒ G(s) = G(s′ ).
Beweis.
Sei G(s) = (V, E) und G(s′ ) = (V ′ , E ′ ).
Nach Definition der Konflikt–Äquivalenz s ≈c s′ gilt:
• op(s) = op(s′ ),
• C ∗ (s) = C ∗ (s′ ).
Aus dem ersten folgt V = commit(s) = commit(s′ ) = V ′ , und aus dem
zweitem folgt E = E ′ . Also ist G(s) = G(s′ ).
Prof. Dr. Dietmar Seipel
493
Vorlesung Datenbanken
Wintersemester 2013/14
Lemma (Konfliktgraphen)
Der Konfliktgraph G(s) eines seriellen Schedules s ist azyklisch.
Beweis.
Sei s = t1 p1 . . . tn pn .
X
• Für jede Kante (ti , tj ) ∈ E gibt es p → q ∈ C ∗ (s) mit Operationen
p(X) ∈ ti und q(X) ∈ tj .
• Deshalb gilt i < j.
• Also kann G(s) nach aufsteigenden Indizes topologisch sortiert werden.
• Damit ist G(s) azyklisch.
Prof. Dr. Dietmar Seipel
494
Vorlesung Datenbanken
Wintersemester 2013/14
Konflikt–neutrale Vertauschungen
Die Relationen RF ∗ (s) und C ∗ (s) sind invariant gegenüber gewissen
Vertauschungen der Operationen von s:
s
=
r1 (Y ) r3 (V ) r2 (Y ) w1 (Y ) w1 (X) w2 (X) w2 (Z) w3 (X) c1 c2 c3 ,
↓
s′
=
r2 (Y ) r1 (Y ) w1 (Y ) w1 (X) w2 (X) w2 (Z) r3 (V ) w3 (X) c1 c2 c3
s′ ≈c s, s′ ≈v s
↓
s′′
=
r2 (Y ) w2 (X) w2 (Z) c2 r1 (Y ) w1 (Y ) w1 (X) c1 r3 (V ) w3 (X) c3
s′′ ≈v s, s′′ 6≈c s
Die Leseoperationen r1 (Y ) und r2 (Y ) können vertauscht werden ohne
RF ∗ (s) oder C ∗ (s) zu ändern.
Prof. Dr. Dietmar Seipel
495
Vorlesung Datenbanken
Wintersemester 2013/14
Unter dem Schutze von w3 (X) können w1 (X) und w2 (X) vertauscht
werden, ohne RF ∗ (s) zu ändern; dabei ändert sich aber C ∗ (s).
Aktionen unterschiedlicher Transaktionen, die auf unterschiedliche
Datenobjekte zugreifen, können natürlich vertauscht werden,
ohne RF ∗ (s) oder C ∗ (s) zu ändern:
• Da V sonst nicht vorkommt, kann r3 (V ) nach hinten wandern.
• w2 (X) kann über w1 (Y ) und r1 (Y ) hinweg nach vorne wandern.
Schließlich können auch die Pseudo–Schritte ci and ai (hier nicht vorhanden)
mit Aktionen anderer Transaktionen sowie mit anderen Pseudo–Schritten
vertauscht werden – natürlich können sie aber nicht über Aktionen ihrer
eigenen Transaktion hinweg wandern.
Der Schedule s ist offensichtlich view–serialisierbar, da s zu dem seriellen
Schedule s′′ view–äquivalent ist. Wir werden später sehen, daß s aber nicht
konflikt–serialisierbar ist.
Prof. Dr. Dietmar Seipel
496
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (View– vs. Konflikt–Serialisierbarkeit)
Der vollständige Schedule
s = r1 (Y ) r3 (V ) r2 (Y ) w1 (Y ) w1 (X) w2 (X) w2 (Z) w3 (X) c1 c2 c3
von gerade eben ist view–serialisierbar mit s ≈v s′′ = t2 c2 t1 c1 t3 c3 :
Y
Z
X
RF ∗ (s) = RF ∗ (s′′ ) = { w1 → r0 , w2 → r0 , w3 → r0 }.
Wir erhalten unterschiedliche Konfliktrelationen:
Y
X
X
X
Y
X
X
X
C ∗ (s)
=
{ r2 → w1 , w1 → w2 , w1 → w3 , w2 → w3 },
C ∗ (s′′ )
=
{ r2 → w1 , w2 → w1 , w1 → w3 , w2 → w3 }
und den zyklischen Konfliktgraphen G(s).
t
t
1
2
Der Schedule s ist nicht konflikt–serialisierbar:
s ∈ VSR \ CSR.
Prof. Dr. Dietmar Seipel
t
3
497
Vorlesung Datenbanken
Wintersemester 2013/14
Satz (Test auf Konflikt–Serialisierbarkeit)
Für einen vollständigen Schedule s ist s ∈ CSR, g.d.w. G(s) azyklisch ist.
Der Test s ∈ CSR kann also in polynomieller Zeit erfolgen.
Beweis.
“⇒” Zu einem Schedule s ∈ CSR gibt es nach Definition einen seriellen
Schedule s′ mit s ≈c s′ . Für diesen gilt G(s) = G(s′ ).
Da s′ seriell ist, ist G(s′ ) azyklisch, und somit auch G(s).
“⇐” Sei G(s) = (V, E) mit V = { t1 , . . . , tn } azyklisch.
Dann kann G(s) topologisch sortiert werden mittels einer Permutation
π : h 1, n i −→ h 1, n i.
Sei s′′ der Sub–Schedule von s zu den abgebrochenen Transaktionen
aus s.
Prof. Dr. Dietmar Seipel
498
Vorlesung Datenbanken
Wintersemester 2013/14
Dann betrachten wir folgenden seriellen Schedule
s′ = s′′ tπ(1) cπ(1) . . . tπ(n) cπ(n) .
Wir zeigen, daß C ∗ (s) = C ∗ (s′ ) und somit s ≈c s′ gilt.
Offensichtlich gilt op(s) = op(s′ ), commit(s) = commit(s′ ) und
X
• Für p → q ∈ C ∗ (s), mit p(X) ∈ ti , q(X) ∈ tj , gilt
(ti , tj ) ∈ E
top. Sort.
=⇒
X
ti steht vor tj in s′ =⇒ p → q ∈ C ∗ (s′ ).
X
• Für p → q ∈ C ∗ (s′ ), mit p(X) ∈ tπ(i) , q(X) ∈ tπ(j) , i < j, gilt
top. Sort.
=⇒
X
p(X) <s q(X) =⇒ p → q ∈ C ∗ (s).
Also gilt C ∗ (s) = C ∗ (s′ ) und somit s ≈c s′ .
Prof. Dr. Dietmar Seipel
499
Vorlesung Datenbanken
Wintersemester 2013/14
Der auf C ∗ (s) basierende Konfliktgraph G(s) eines vollständigen Schedules
s kann dessen Konflikt–Serialisierbarkeit also entscheiden:
• Genau dann wenn er azyklisch ist, ist s konflikt–serialisierbar.
• Seine topologische Sortierung liefert dann einen seriellen Schedule s′ ,
der zu s konflikt–äquivalent ist.
Der entsprechende, auf RF ∗ (s) basierende Konfliktgraph kann die
View–Serialisierbarkeit dagegen nicht entscheiden:
• Falls er zyklisch ist, so ist s sicher nicht view–serialisierbar.
• Falls er azyklisch ist, so liefert er eine partielle Ordnung, der potentielle
zu s view–äquivalente serielle Schedules s′ folgen müssen.
• Das heißt aber nicht, daß es dann auch einen zu s view–äquivalenten
seriellen Schedule s′ gibt.
Prof. Dr. Dietmar Seipel
500
Vorlesung Datenbanken
Wintersemester 2013/14
Konfliktgraphen helfen also nicht beim Test auf View–Serialisierbarkeit.
Dies ist auch schon deshalb nicht möglich, da der entsprechende Test
N P–vollständig ist.
Der vollständige Schedule
s = r1 (X) r2 (Y ) w1 (Y ) w2 (Y ) c1 c2
ist nicht view–serialisierbar, obwohl der entsprechende Konfliktgraph zu
Y
RF ∗ (s) = { w2 → r0 } azyklisch ist.
Vorgehensweise in der Praxis
Solange nur ein Präfix eines Schedules bekannt ist, weiß man nicht, welche
der laufenden Transaktionen mit Commit bzw. Abort beendet werden.
Deswegen geben die CSR–basierten Zwei–Phasen–Scheduler Datenobjekte
erst frei, wenn sie alle Datenzugriffe gemacht haben.
Prof. Dr. Dietmar Seipel
501
Vorlesung Datenbanken
Wintersemester 2013/14
Synchronisationsprobleme
Analyse im Hinblick auf Konflikt–Serialisierbarkeit
1. Das Lost–Update–Problem: Der zugehörige Schedule lautet
s = r1 (X) r2 (X) w1 (X) r1 (Y ) w2 (X) w2 (Y ) c1 c2 .
Es gilt
X
X
X
Y
C ∗ (s) = { r1 → w2 , r2 → w1 , w1 → w2 , r1 → w2 },
und der Konfliktgraph G(s) ist zyklisch:
t
1
t
2
Folglich ist s nicht konflikt–serialisierbar, d.h. s ∈
/ CSR.
s ist auch nicht view–serialisierbar, d.h. s ∈
/ VSR.
Prof. Dr. Dietmar Seipel
502
Vorlesung Datenbanken
Wintersemester 2013/14
2. Das Dirty–Read–Problem: Der zugehörige Schedule lautet
s = r1 (X) w1 (X) r2 (X) w2 (X) r1 (Y ) a1 c2 .
Hier gilt s ∈ CSR, aber die abgebrochene Transaktion wird hier nicht
berücksichtigt, und die Betrachtung ist nicht adäquat.
X
Der Abbruch von t1 führt wegen w1 →s r2 auch zum Abbruch von t2 .
3. Das Problem der fehlerhaften Zusammenfassung: Der zugehörige
Schedule lautet:
s = r2 (A) . . . r1 (X) w1 (X) r2 (X) r2 (Y ) r1 (Y ) w1 (Y ) c1 c2 .
X
Y
Hier gilt C ∗ (s) = { w1 → r2 , r2 → w1 }, und der Konfliktgraph G(s)
ist zyklisch; s ist also nicht konflikt–serialisierbar, s ∈
/ CSR:
t
1
t
2
s ist auch nicht view–serialisierbar, d.h. s ∈
/ VSR.
Prof. Dr. Dietmar Seipel
503
Vorlesung Datenbanken
Wintersemester 2013/14
Commit–Serialisierbarkeit
Transaktionen können abbrechen, und das System kann im laufenden Zustand
unterbrochen werden. Deshalb sollte sich ein Korrektheitskriterium de facto nur auf
freigegebene Transaktionen beziehen, und bei einem korrekten Schedule sollte auch
jedes Präfix korrekt sein.
Definition (Abschlußeigenschaften von Schedule–Eigenschaften)
Sei E eine Schedule–Eigenschaft.
1. E ist präfix–abgeschlossen (PA), genau dann wenn gilt:
E gilt für einen Schedule s, g.d.w. E für jedes Präfix von s gilt.
2. E ist commit–abgeschlossen (CA), genau dann wenn gilt:
E gilt für einen Schedule s, g.d.w. E für den Schedule CP(s) gilt.
3. E ist präfix–commit–abgeschlossen (PCA), genau dann wenn gilt:
E gilt für einen Schedule s, g.d.w. E für den Schedule CP(s′ ) zu jedem
beliebigen Präfix s′ von s gilt.
Prof. Dr. Dietmar Seipel
504
Vorlesung Datenbanken
Wintersemester 2013/14
Satz (Präfix–Commit–Abgeschlossenheit)
CA
PA
PCA
VSR
+
–
–
CSR
+
–
+
1. Die View–Serialisierbarkeit ist CA, aber nicht PA und nicht PCA.
2. Die Konflikt–Serialisierbarkeit ist CA und PCA, aber nicht PA.
Beweis.
1. Für s = w1 (X) w2 (X) w2 (Y ) w1 (Y ) c1 c2 w3 (X) w3 (Y ) c3 gilt
s ≈v t1 c1 t2 c2 t3 c3 ≈v t2 c2 t1 c1 t3 c3 ,
da man w1 (χ) und w2 (χ) unter dem Schutz des abschließenden w3 (χ)
vertauschen kann, für χ = X, Y , d.h. s ∈ VSR.
Für das Präfix s′ = w1 (X) w2 (X) w2 (Y ) w1 (Y ) c1 c2 von s gilt aber
CP (s′ ) = s′ und s′ 6≈v t1 c1 t2 c2 , s′ 6≈v t2 c2 t1 c1 , d.h. s′ ∈
/ VSR.
Also ist die V.–S. nicht PCA.
Prof. Dr. Dietmar Seipel
505
Vorlesung Datenbanken
Wintersemester 2013/14
2. Für s ∈ CSR ist G(s) azyklisch.
Der Graph G(CP (s′ )) zu einem Präfix s′ von s ist ein Teilgraph von
G(s), und somit ebenfalls azyklisch, d.h. CP (s′ ) ∈ CSR.
Also ist die K.–S. PCA.
3. Die V.–S. und die K.–S. sind beide CA,
denn für einen vollständigen Schedule s gilt s∗ = CP (s),
und folglich RF ∗ (s) = RF ∗ (CP (s)) und C ∗ (s) = C ∗ (CP (s)).
4. Jeder serialisierbare Schedule s ∈ VSR oder s ∈ CSR muß vollständig
sein, aber für einen vollständigen und seriellen – und damit auch
serialisierbaren – Schedule s muß nicht jedes Präfix s′ vollständig sein.
Z.B. ist für den serialisierbaren Schedule s = w1 (X) c1 das Präfix
s′ = w1 (X) nicht vollständig und damit auch nicht serialisierbar.
Die V.–S. und die K.–S. sind also beide natürlich nicht PA.
Prof. Dr. Dietmar Seipel
506
Vorlesung Datenbanken
Wintersemester 2013/14
Fehlersicherheit von Schedules
Definition (RC , ACA und ST ) Sei s ein Schedule.
RC . s heißt rücksetzbar (recoverable), falls für alle ti 6= tj ∈ trans(s) gilt:
X
wj →s ri ∧ ci ∈ s ⇒ cj <s ci .
RC bezeichnet die Klasse der rücksetzbaren Schedules.
ACA. s vermeidet kaskadierende Aborts (avoids cascading aborts),
falls für alle ti 6= tj ∈ trans(s) gilt:
X
wj →s ri ⇒ cj <s ri (X).
ACA bezeichnet die Klasse aller Schedules, welche kaskadierende Aborts
vermeiden. Sie vermeiden das Problem des dirty read.
ST . s heißt strikt, falls für alle ti 6= tj ∈ trans(s) und alle p ∈ {r, w} gilt:
wj (X) <s pi (X) ⇒ aj <s pi (X) ∨ cj <s pi (X).
ST bezeichnet die Klasse der strikten Schedules.
Prof. Dr. Dietmar Seipel
507
Vorlesung Datenbanken
Wintersemester 2013/14
RC , ACA und ST sind PCA.
Satz (Klassen von Schedules)
s0
VSR
ST ( ACA ( RC .
Später:
s1
RC
1. E(2PL) ⊆ CSR,
ACA
s2
CSR
s3
ST
s5
s4
2. E(S2PL) ⊆ CSR ∩ ST ,
3. E(TO–Basis) ⊆ CSR,
4. E(TO–Thomas) ⊆ VSR,
5. E(TO–Mehrversionen) ⊆ VSR.
Prof. Dr. Dietmar Seipel
508
Vorlesung Datenbanken
Wintersemester 2013/14
Beweis.
ST ⊆ ACA.
Für s ∈ ST und ti 6= tj ∈ trans(s) gilt:
X
wj →s ri
=⇒ wj (X) <s ri (X) ∧ aj 6<s ri (X)
ST
=⇒ cj <s ri (X).
ACA ⊆ RC .
Für s ∈ ACA und ti 6= tj ∈ trans(s) gilt:
X
wj →s ri ∧ ci ∈ s
ACA
=⇒
cj <s ri (X) ∧ ri (X) <s ci
=⇒
c j <s c i .
Striktheit nur bezüglich der Lese–Operationen pi (X) = ri (X) impliziert
offensichtlich auch schon ACA.
Prof. Dr. Dietmar Seipel
509
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiele (RC , ACA, ST )
RC . jede Transaktion wird erst nach der Freigabe aller Transaktionen, von
denen sie gelesen hat, freigegeben:
s1 = r1 (X) w1 (X) r2 (X) w2 (X) c2 c1 ∈
/ RC
s2 = r1 (X) w1 (X) r2 (X) w2 (X) c1 c2 ∈ RC
ACA. eine Transaktion darf nur Werte lesen, welche von bereits
freigegebenen Transaktionen zuletzt geschrieben wurden:
s2 ∈
/ ACA
s3 = r1 (X) w1 (X) w2 (X) c1 c2 ∈ ACA
s4 = r1 (X) w1 (X) c1 r2 (X) w2 (X) c2 ∈ ACA
ST . eine Transaktion darf nur Werte lesen oder überschreiben, welche von
bereits abgeschlossenen Transaktionen zuletzt geschrieben wurden:
s3 ∈
/ ST , s4 ∈ ST
Prof. Dr. Dietmar Seipel
510
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (VSR und CSR vs. ST )
Für den folgenden Schedule gilt s5 ∈ ST \ VSR :
s5 = r1 (X) w2 (Y ) w2 (X) c2 r1 (Y ) c1 .
Y
X
1. s5 ∈
/ CSR, denn C ∗ (s) = { r1 → w2 , w2 → r1 }.
2. s5 ∈
/ VSR, denn für s1,2 = t1 c1 t2 c2 und s2,1 = t2 c2 t1 c1 gilt
Y
X
Y
X
RF (s1,2 ) = { w2 → r0 , w2 → r0 },
RF (s2,1 ) = { w2 → r1 , w2 → r1 } ∪ RF (s1,2 ),
RF (s5 )
Y
= { w2 → r1 } ∪ RF (s1,2 ).
3. Wegen w2 (Y ) <s5 c2 <s5 r1 (Y ) gilt s5 ∈ ST .
Prof. Dr. Dietmar Seipel
511
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (VSR \ CSR vs. RC )
Der vollständige Schedule
s = r1 (Y ) r3 (V ) r2 (Y ) w1 (Y ) w1 (X) w2 (X) w2 (Z) w3 (X) c1 c2 c3 ,
für den bekanntermaßen s ∈ VSR \ CSR gilt, kann mit dem vollständigen
Schedule
s4,5 = ̺{17→4,27→5} (s1 ) = r4 (X) w4 (X) r5 (X) w5 (X) c5 c4 ∈
/ RC
zu einem Schedule
s0 = s4,5 s ∈ (VSR \ CSR) \ RC
kombiniert werden.
Wir sehen später noch, daß für den Schedule s1 von oben s1 ∈ E(2PL) gilt:
s1 = r1 (X) w1 (X) r2 (X) w2 (X) c2 c1 ∈
/ RC .
Prof. Dr. Dietmar Seipel
512
Vorlesung Datenbanken
Wintersemester 2013/14
4.2 Concurrency Control
Wir garantieren die Korrektheit von Schedules durch die Verwendung
spezieller Scheduling–Techniken:
1. Beim Zwei–Phasen–Sperrprotokoll müssen Datenobjekte vor dem
Zugriff durch eine Transaktion gesperrt und nach dem Zugriff wieder
freigegeben werden. In der Sperrphase dürfen nur Sperren gesetzt
werden. Mit dem ersten Entsperrschritt beginnt die zweite Phase,
in der nur noch Sperren freigegeben werden dürfen.
2. Bei Zeitstempelverfahren werden Daten beim Zugriff mit Lese– und
Schreib–Zeitstempeln versehen. Beim Zugriff auf ein Datenobjekt wird
getestet, ob die Zeitstempelordnung verletzt wird.
Prof. Dr. Dietmar Seipel
513
Vorlesung Datenbanken
Wintersemester 2013/14
Überlegungen zum Scheduler–Entwurf
Der Transaktionsmanager (TM) nimmt die auszuführenden Transaktionen
vom Codegenerator entgegen.
Der Scheduler erhält vom TM einen (“zufällig erzeugten”) Input–Schedule
mit Schritten vom Typ r, w, a, c. Er hat die Aufgabe, hieraus einen
korrekten Output–Schedule zu generieren. Dazu kann er für jeden einzelnen
Schritt grundsätzlich eine der drei folgenden Aktionen ausführen:
1. ausführen (execute): möglich für r, w, a, c; der Schritt wird an den
Output–Schedule angehängt.
2. zurückweisen (reject): möglich für r, w; die betreffende Transaktion
wird abgebrochen, also wird ein a an den Output–Schedule angehängt.
3. verzögern (delay): möglich für r, w; der Schritt wird als derzeit nicht
ausführbar an den TM zurückgegeben.
Prof. Dr. Dietmar Seipel
514
Vorlesung Datenbanken
Wintersemester 2013/14
Der Daten–Manager (DM) führt die Schritte des (korrekten)
Output–Schedules der Reihe nach aus:
• r liest ein Datenobjekt aus der Datenbank in den Puffer.
• w schreibt ein Datenobjekt in die Datenbank oder in den Puffer.
• c macht das Ergebnis der Transaktion permanent.
• a macht die Transaktion durch geeignete Recovery–Maßnahmen
ungeschehen.
Prof. Dr. Dietmar Seipel
515
Vorlesung Datenbanken
Wintersemester 2013/14
... Transaktionen ...
Transaktions-Manager
Input-Schedule
Scheduler
r, w, a, c
BOT/EOT
commit(s)
abort(s)
active(s)
trans(s)
korrekter Output-Schedule s
Data-Manager
Recovery-Manager
Puffer-Manager
Datenbank
Komponenten der Transaktionsverarbeitung in einem DBMS.
Prof. Dr. Dietmar Seipel
516
Vorlesung Datenbanken
Wintersemester 2013/14
Definition (aggressiv, konservativ)
Ein Scheduler heißt
1. aggressiv, falls er überwiegend durchläßt, d.h. nur selten verzögert.
Hier besteht die Gefahr, daß er irgendwann festhängt (Deadlock).
2. konservativ, falls er überwiegend verzögert.
Im Extermfall wird der Output–Schedule dabei seriell,
wenn immer alle Transaktionen bis auf eine verzögert werden.
Definition (Sicherheit von Schedules)
Ein Scheduler S heißt
1. s–sicher, falls E(S) ⊆ CSR,
2. f–sicher, falls E(S) ⊆ ST ,
3. sicher, falls E(S) ⊆ CSR ∩ ST ,
wobei E(S) die Menge aller von S als Output erzeugbaren Schedules ist.
Prof. Dr. Dietmar Seipel
517
Vorlesung Datenbanken
Wintersemester 2013/14
4.2.1 Das Zwei–Phasen–Sperrprotokoll
Zur Synchronisation des Zugriffs verschiedener Transaktionen auf
gemeinsam benutzte Daten werden Sperren (Locks) verwendet,
welche auf Datenobjekte gesetzt bzw. wieder aufgegeben werden können.
Definition (Sperren)
Sei X ein Datenobjekt und ti eine Transaktion. Dann bezeichnet
rli (X) eine Lese–Sperre (read lock) und
wli (X) eine Schreib–Sperre (write lock)
von ti auf X. Das Rücksetzen (Aufheben) von Sperren erfolgt mit
rui (X) für Lese–Sperren (read unlock) bzw.
wui (X) für Schreib–Sperren (write unlock).
Prof. Dr. Dietmar Seipel
518
Vorlesung Datenbanken
Wintersemester 2013/14
Ein sperrender Scheduler macht aus jeder Transaktion formal eine um
Sperr–Operationen erweiterte Transaktion (locked transaction).
Beispiel (Sperren, Locked Transaction)
Im folgenden Schedule s wurde jede Daten–Operation pi (X) um
entsprechende Sperren zu pli (X) pi (X) pui (X) zu s′ erweitert:
s
=
r1 (X) w2 (X) w2 (Y ) c2 w1 (Y ) c1 ,
s′
=
rl1 (X) r1 (X) ru1 (X) wl2 (X) w2 (X) wu2 (X)
wl2 (Y ) w2 (Y ) wu2 (Y ) c2 wl1 (Y ) w1 (Y ) wu1 (Y ) c1 .
Der resultierende Schedule s′ ist nach dem Zwei–Phasen–Sperrprotokol aber
nicht erlaubt, da t1 mittels ru1 (X) die Lese–Sperre auf X freigibt und
mittels wl1 (Y ) später noch eine Schreib–Sperre auf Y anfordert –
analoges gilt für wu2 (X) und wl2 (Y ).
Prof. Dr. Dietmar Seipel
519
Vorlesung Datenbanken
Wintersemester 2013/14
Definition (Sperrprotokoll)
Ein Scheduler arbeitet nach einem Sperrprotokoll, falls für jeden Output s
und jede Transaktion ti ∈ trans(s) gilt:
1. pi (X) ∈ s für p ∈ { r, w } =⇒ pli (X) <s pi (X) <s pui (X).
2. Auf jedem Datenobjekt werden Sperren derselben Art von jeder
Transaktion höchstens einmal gesetzt,
d.h. s enthält höchstens einen Schritt rli (X) bzw. wli (X).
3. Kein lock/unlock–Schritt ist redundant.
4. Ist ein Datenobjekt X durch zwei verschiedene Transaktionen ti und tj
an einer Stelle von s gesperrt, so sind diese Sperren nicht in Konflikt.
rli (X) wli (X)
Prof. Dr. Dietmar Seipel
Kompatibilitäts–Matrix:
rlj (X)
+
−
+ bedeutet kein Konflikt
wlj (X)
−
−
– bedeutet Konflikt
520
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiele (Sperrprotokoll)
1. Der folgende Schedule s ist nach dem Sperrprotokoll erlaubt:
s = rl1 (X) r1 (X) rl2 (X) r2 (X) ru2 (X) wl1 (Y ) ru1 (X) w1 (Y ) wu1 (Y ).
Die Lesesperren rl1 (X) und rl2 (X) sind kompatibel.
Dadurch kann t2 verschränkt mit t1 nach r1 (X) schon r2 (X) ausführen.
Z.B. kann t2 die Wartezeit ausnutzen, die ensteht falls t1 noch auf etwas
warten muß, bevor es w1 (Y ) ausführen kann.
2. Der folgende Schedule s′ ist nach dem Sperrprotokoll nicht erlaubt:
s′ = wl1 (X) w1 (X) rl2 (X) r2 (X) ru2 (X) wl1 (Y ) wu1 (X) w1 (Y ) wu1 (Y ).
Die Schreibsperre wl1 (X) (anstelle von rl1 (X) verglichen mit oben)
und die Lesesperre rl2 (X) sind nicht kompatibel.
Prof. Dr. Dietmar Seipel
521
Vorlesung Datenbanken
Wintersemester 2013/14
3. Man könnte versuchen, s′ zu korrigieren, indem man wu1 (X) vor
rl2 (X) einschiebt, da dann die Schreibsperre wl1 (X) nicht meht aktiv
ist, wenn die Lesesperre rl2 (X) erfolgt:
s′ = wl1 (X) w1 (X) wu1 (X) rl2 (X) r2 (X) ru2 (X) wl1 (Y ) w1 (Y ) wu1 (Y ).
Die entstandene direkte Einklammerung von Aktionen mit den
entsprechenden Sperr– und Entsperrschritten ist aber bei dem folgenden
2PL–Scheduling nicht erlaubt, da der Sperrschritt wl1 (Y ) erfolgt
nachdem mit wu1 (X) bereits die Entsperrphase von t1 begonnen hat.
Offensichtlich wäre die angedeutete naive, direkte Einklammerung
pli (X) pi (X) pui (X) von Aktionen pi (X) mit den entsprechenden Sperr–
und Entsperrschritten für jeden Schedule möglich.
Um die bekannten Probleme bei der Verwaltung paralleler Transaktionen zu
lösen muß man weitere Bedingungen – siehe 2PL–Scheduling – stellen.
Prof. Dr. Dietmar Seipel
522
Vorlesung Datenbanken
Wintersemester 2013/14
In kommerziellen Systemen wird am häufigsten das
Zwei–Phasen–Sperrprotokoll (2PL) verwendet.
Definition (2PL, Two–Phase Locking)
2PL. Ein Sperrprotokoll heißt zweiphasig, falls für jeden erzeugten
Schedule s und jede Transaktion ti ∈ trans(s) gilt: nach dem ersten
Entsperrschritt pui (X) erfolgt kein weiterer Sperrschritt qli (Y ),
p, q ∈ { r, w }. Ein entsprechender Scheduler heißt 2PL–Scheduler.
C2PL. Ein 2PL–Scheduler heißt C2PL–Scheduler (konservativer oder
statischer 2PL–Scheduler), falls jede Transaktion vor ihrer ersten
Datenoperation ri (X) oder wi (X) alle benötigten Sperren setzt.
S2PL. Ein 2PL–Scheduler heißt S2PL–Scheduler (strenger oder
dynamischer 2PL–Scheduler), falls jede Transaktion alle von ihr
gehaltenen Sperren erst nach ihrer letzten Datenoperation freigibt.
Prof. Dr. Dietmar Seipel
523
Vorlesung Datenbanken
Wintersemester 2013/14
2 Phasen: Beim 2PL kann man jede Transaktion unterteilen in
1. eine Wachstumsphase, in der Sperren gesetzt, und
2. eine Schrumpfphase, in der Sperren freigegeben
werden können. In beiden Phasen können auch Datenoperationen ausgeführt
werden. Bei C2PL bzw. S2PL werden in der Wachstums– bzw. der
Schrumpf–Phase keine Datenoperationen ausgeführt.
Commit: Vor dem erfolgreichen Abschluß einer Transaktion t muß
sichergestellt werden, daß alle Transaktionen t′ , von denen t gelesen hat,
bereits erfolgreich abgeschlossen wurden.
Eigenschaften
2PL erzeugt konflikt–serialisierbare, d.h. s–sichere, Schedules,
C2PL erzeugt deadlock–freie Schedules,
S2PL erzeugt strikte, und damit auch sichere, Schedules.
Prof. Dr. Dietmar Seipel
524
Vorlesung Datenbanken
Wintersemester 2013/14
Wachstumsphase und Schrumpfphase beim 2PL–Scheduling
Sperren
6
Wachstumsphase
Schrumpfphase
Zeit
2PL:
Sperren
Sperren
6
Zeit
C2PL: Sperren ab BOT (Begin of Trans.)
Prof. Dr. Dietmar Seipel
6
Zeit
S2PL: Sperren bis EOT (End of Trans.)
525
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiele (2PL)
1. Der Schedule s′ von oben ist nicht zwei–phasig, denn
ru1 (X) <s′ wl1 (Y ) und wu2 (X) <s′ wl2 (Y ):
s′
=
rl1 (X) r1 (X) ru1 (X) wl2 (X) w2 (X) wu2 (X)
wl2 (Y ) w2 (Y ) wu2 (Y ) c2 wl1 (Y ) w1 (Y ) wu1 (Y ) c1 .
In einem zwei–phasigen Schedule kann t1 den unlock ru1 (X) erst nach
wl1 (Y ) ausführen, und erst dann kann t2 mit wl2 (X) starten.
Mit wl2 (Y ) muß t2 bis nach wu1 (Y ) warten.
2. Wenn man w2 (Y ) und w1 (Y ) vertauscht, so wird der folgende
nicht–serielle, zwei–phasige Schedule möglich:
s′′
=
rl1 (X) r1 (X) wl1 (Y ) ru1 (X) wl2 (X) w2 (X)
w1 (Y ) wu1 (Y ) c1 wl2 (Y ) wu2 (X) w2 (Y ) wu2 (Y ) c2 .
Prof. Dr. Dietmar Seipel
526
Vorlesung Datenbanken
Wintersemester 2013/14
3. Wir betrachten die beiden Transaktionen t1 = r1 (X) w1 (Y ) und
t2 = w2 (Y ) w2 (X). Dann kann der Schedule
s′′ = rl1 (X) r1 (X) wl2 (Y ) w2 (Y )
von einem 2PL–Scheduler nicht fortgesetzt werden.
Hier wartet t1 auf t2 wegen Y und t2 auf t1 wegen X (Deadlock).
Ein C2PL–Scheduler könnte s′′ nicht aus t1 und t2 erzeugen.
Ein S2PL–Scheduler könnte s′′ auch erzeugen.
4. Der Schedule s′′′ ist zwar zwei–phasig:
s′′′ = rl1 (X) r1 (X) wl1 (Y ) ru1 (X) w1 (Y ) wu1 (Y ),
aber wegen ru1 (X) <s′′′ w1 (Y ) nicht streng zwei–phasig.
s′′′′ = rl1 (X) r1 (X) wl1 (Y ) w1 (Y ) ru1 (X) wu1 (Y )
ist streng zwei–phasig.
Prof. Dr. Dietmar Seipel
527
Vorlesung Datenbanken
Wintersemester 2013/14
Satz (Zwei–Phasen–Scheduler)
1. Ein 2PL–Scheduler ist s–sicher: E(2PL) ( CSR.
2. Ein S2PL–Scheduler ist sicher: E(S2PL) ⊆ CSR ∩ ST .
Beispiel (Echte Inklusion)
s = w1 (X) r2 (X) c2 r3 (Y ) c3 w1 (Y ) c1 .
Dann gilt s ∈ CSR wegen s ≈c t3 c3 t1 c1 t2 c2 . Die beiden Schedules
s′ = wl1 (X) w1 (X) wu1 (X) rl2 (X) r2 (X) ru2 (X) c2
rl3 (Y ) r3 (Y ) ru3 (Y ) c3 ,
s′′ = wl1 (X) w1 (X) wl1 (Y ) wu1 (X) rl2 (X) r2 (X) ru2 (X) c2
können von einem 2PL–Scheduler aber nicht komplettiert werden.
Prof. Dr. Dietmar Seipel
528
Vorlesung Datenbanken
Wintersemester 2013/14
• Zwischen w1 (X) und r2 (X) müssen wu1 (X) und rl2 (X) stehen.
• Wenn man – wie in s′ – wl1 (Y ) nicht vor wu1 (X) ausführt,
dann kann man den Lock später nicht mehr bekommen.
Deswegen kann w1 (Y ) nun nicht ausgeführt werden.
• Wenn man – wie in s′′ – wl1 (Y ) vor wu1 (X) ausführt,
dann kann der Lock rl3 (Y ) nicht erfolgen.
Da andererseits wu1 (Y ) natürlich nicht vor w1 (Y ) erfolgen kann,
kann rl3 (Y ) und damit auch r3 (Y ) nun nicht ausgeführt werden.
s ist überhaupt nicht von einem 2PL–Scheduler erzeugbar:
s 6∈ E(2PL).
Prof. Dr. Dietmar Seipel
529
Vorlesung Datenbanken
Wintersemester 2013/14
4.2.2 Deadlocks
Definition (Wartegraph)
Der Wartegraph WG(s) = (V, E) eines Schedules ist gegeben durch
V = active(s),
E = { (ti , tj ) ∈ V | ti wartet darauf, ein Datenobjekt zu sperren,
welches von tj gesperrt ist }.
Am Ende von s liegt ein Deadlock vor, falls WG(s) zyklisch ist.
Dann wartet eine Menge T von Transaktionen wechselseitig auf die Freigabe
der von anderen Transaktionen aus T gehaltenen Sperren.
Beispiel (Deadlock)
s = rl1 (X) r1 (X) wl2 (Y ) w2 (Y ) wl1 (Y ) wl2 (X)
|
{z
}
gewünscht
Prof. Dr. Dietmar Seipel
t1
t
2
530
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (Deadlock im Straßenverkehr)
Das rote Auto 1 möchte über die Route (C, D, E, F, G, H) nach H fahren,
das blaue Auto 2 über (F, E, D, C, B, A) nach A.
Sie treffen sich an zwei Hindernissen und blockieren sich gegenseitig: das
rote Auto 1 möchte von D nach E fahren, das blaue Auto 2 von E nach D.
1
A
?
C
B
D
E
G
F
6
2
H
Prof. Dr. Dietmar Seipel
D- E
531
Vorlesung Datenbanken
Wintersemester 2013/14
Wenn die Autos sich wie beim 2PL–Scheduling verhalten, dann möchte
keiner zurückfahren:
1. das rote Auto 1 möchte E sperren und kann seine Sperre auf D nicht
hergeben, da es nachher noch weitere Sperren auf F, G, . . . benötigt, und
2. das blaue Auto 2 möchte D sperren und kann seine Sperre auf E nicht
hergeben, da es nachher noch weitere Sperren auf C, B, . . . benötigt.
Es wäre ein Deadlockzustand erreicht.
Beim konservativen C2PL–Scheduling würde ein Auto dagegen erst
losfahren, wenn seine gesamte Fahrtroute für andere Autofahrer gesperrt ist.
Damit könnte ein solcher Deadlock nicht auftreten. Der Durchsatz wäre bei
einem solchen – im Straßenverkehr unrealistischen – Vorgehen allerdings
sehr viel geringer, da auf vielen Routen nur ein Auto unterwegs wäre.
Prof. Dr. Dietmar Seipel
532
Vorlesung Datenbanken
Wintersemester 2013/14
Die Fahrtrouten entsprechen Transaktionen:
t1 = w1 (C) w1 (D) w1 (E) w1 (F ) w1 (G) w1 (H),
t2 = w2 (F ) w2 (E) w2 (D) w2 (C) w2 (B) w2 (A).
Zum Zeitpunkt des Aufeinandertreffens könnte ein 2PL–Scheduler den
folgenden, verschränkten Schedule abgearbeitet haben:
s
=
wl1 (C) w1 (C) wl2 (F ) w2 (F ) wl1 (D) w1 (D) wl2 (E) w2 (E).
Jetzt liegt ein Deadlock vor, da t1 die Sperre wl1 (E) setzen möchte, obwohl
t2 bereits E sperrt, und da t2 die Sperre wl2 (D) setzen möchte, obwohl t1
bereits D sperrt.
Ein konservativer C2PL–Scheduler würde die Transaktionen dagegen seriell
(erst t1 , dann t2 , oder umgekehrt) abarbeiten und keinen Deadlock erzeugen.
Prof. Dr. Dietmar Seipel
533
Vorlesung Datenbanken
Wintersemester 2013/14
Deadlock–Verhinderung mit Zeitstempeln
Eine Transaktion ti erhält einen Transaktionszeitstempel TS (ti ),
welcher der Startzeit von ti entspricht:
falls ti vor tj startet, so gilt TS (ti ) < TS (tj ).
Annahme: ti versucht ein Datenobjekt zu sperren,
welches schon von tj gesperrt ist.
wait–die: Falls TS (ti ) < TS (tj ), d.h. falls ti älter als tj ist,
dann soll ti warten dürfen; andernfalls wird ti abgebrochen.
wound–wait: Falls TS (ti ) < TS (tj ),
dann wird tj abgebrochen; andernfalls darf ti warten.
Beide Verfahren begünstigen Transaktion, die schon lange laufen, und von
denen man somit annimmt, daß sie bereits viel Arbeit erledigt haben.
Prof. Dr. Dietmar Seipel
534
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (Deadlock–Verhinderung im Straßenverkehr)
In unserem Straßenverkehrs–Beispiel würde für den verschränkten Schedule
s
=
wl1 (C) w1 (C) wl2 (F ) w2 (F ) wl1 (D) w1 (D) wl2 (E) w2 (E)
dann mit der Folge wl1 (E) wl2 (D) von Sperranfragen so verfahren:
• t1 versucht das Datenobjekt E zu sperren, welches schon von t2 gesperrt
ist. Die wait–die–Methode würde die Transaktion t1 zum roten Auto,
das früher losgefahren ist, warten lassen.
• Danach versucht t2 das Datenobjekt D zu sperren, welches schon von t1
gesperrt ist. wait–die würde die blaue Transaktion t2 nun abbrechen.
• Die wound–wait–Methode würde die Transaktion t2 sofort abbrechen.
Somit hätten in unserem konkreten Beispiel eines bereits vorhandenen
Deadlocks beide Verfahren denselben Effekt.
Prof. Dr. Dietmar Seipel
535
Vorlesung Datenbanken
Wintersemester 2013/14
Falls das blaue Auto 2 stattdessen in E nach I abbiegen möchte, so liegt
eigentlich kein Deadlock vor, und es wäre nicht nötig t2 abzubrechen:
1
A
?
C
B
D
E
G
F
6
2
H
I
D- E
-
Das rote Auto 1 möchte über die Route (C, D, E, F, G, H) nach H fahren,
das blaue Auto 2 über (F, E, I) nach I.
Sie treffen sich an zwei Hindernissen, und das blaue Auto blockiert das rote
eigentlich nur vorübergehend, da es nach I abbiegen möchte.
Prof. Dr. Dietmar Seipel
536
Vorlesung Datenbanken
Wintersemester 2013/14
Der verschränkte Schedule
s
=
wl1 (C) w1 (C) wl2 (F ) w2 (F ) wl1 (D) w1 (D) wl2 (E) w2 (E)
kann dann mit der Folge wl1 (E) wl2 (I) von Sperranfragen so verfahren:
• Jetzt versucht t1 das Datenobjekt E zu sperren, welches schon von t2
gesperrt ist, aber nicht umgekehrt.
• Die wait–die–Methode würde die Transaktion t1 zum roten Auto, das
früher losgefahren ist, warten lassen. Da das blaue Auto dann nach I
abbiegt, löst sich das Problem auf, sobald t2 seine Sperren freigibt.
• Die wound–wait–Methode würde die Transaktion t2 dagegen sofort und
unnötigerweise abbrechen.
Somit hätten in unserem modifizierten Beispiel beide Verfahren
unterschiedliche Effekte.
Prof. Dr. Dietmar Seipel
537
Vorlesung Datenbanken
Wintersemester 2013/14
4.2.3 Zeitstempelverfahren
Ein Zeitstempel TS (t) ist ein eindeutiger Identifikator,
welcher vom DBMS kreiert wird für eine Transaktion t.
Die Ordnung der Zeitstempel leitet sich von den Startzeiten der
Transaktionen ab.
Für jedes Datenobjekt X werden zwei Zeitstempel gehalten:
read_TS (X):
Der Lese–Zeitstempel ist der größte Zeitstempel TS (t) unter allen
Transaktionen t, welche X erfolgreich gelesen haben.
write_TS (X):
Der Schreib–Zeitstempel ist der größte Zeitstempel TS (t) unter allen
Transaktionen t, welche X erfolgreich geschrieben haben.
Prof. Dr. Dietmar Seipel
538
Vorlesung Datenbanken
Wintersemester 2013/14
Beim Datenzugriff auf ein Datenobjekt X wird getestet,
ob die Zeitstempelordnung verletzt wird:
1. Transaktion ti führt eine Schreiboperation wi (X) aus:
a) Falls read_TS (X) > TS (ti ) oder write_TS (X) > TS (ti ),
so breche ti ab, denn eine spätere Transaktion hat bereits auf X
zugegriffen.
b) Ansonsten führe die Schreiboperation aus und setze
write_TS (X) := TS (ti ).
2. Transaktion ti führt eine Leseoperation ri (X) aus:
a) Falls write_TS (X) > TS (ti ), so breche ti ab, denn eine spätere
Transaktion hat bereits den gewünschten Wert von X überschrieben.
b) Ansonsten führe die Leseoperation aus und setze
read_TS (X) := max { TS (ti ), read_TS (X) }.
Prof. Dr. Dietmar Seipel
539
Vorlesung Datenbanken
Wintersemester 2013/14
Diese Vorgehensweise wird als Basis–TO–Algorithmus bezeichnet
(TO für timestamp ordering).
Wenn zwei Operationen in Konflikt stehen und in der falschen Reihenfolge
ausgeführt werden sollen, dann wird die spätere der beiden zurückgewiesen
und die zugehörige Transaktion abgebrochen.
Eigenschaften
1. Die erzeugten Schedules sind konflikt–serialisierbar,
und der zugehörige serielle Schedule ergibt sich jeweils aus der Ordnung
der Zeitstempel.
2. Das Verfahren garantiert nicht die Vermeidung kaskadierender Aborts
(ACA).
Prof. Dr. Dietmar Seipel
540
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (Lost Update)
s2 :
T1
T2
read_TS (X) = write_TS (X) = 0
r1 (X);
TS (T1 ) = 1, read_TS (X) = 1
X := X − N ;
r2 (X);
TS (T2 ) = 3, read_TS (X) = 3
X := X + M ;
w1 (X);
read_TS (X) = 3 > 1 = TS (T1 )
r1 (Y );
w2 (X);
Y := Y + N ;
w1 (Y );
Bei der Operation w1 (X) wird die Transaktion T1 abgebrochen,
denn die spätere Transaktion T2 hat bereits auf X zugegriffen.
Prof. Dr. Dietmar Seipel
541
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (Incorrect Summary)
T1
T3
read_TS (. . . ) = write_TS (. . . ) = 0
sum := 0;
TS (T3 ) = 1
r3 (A);
read_TS (A) = 1
sum := sum + A;
r1 (X);
TS (T1 ) = 4, read_TS (X) = 4
X := X − N ;
w1 (X);
write_TS (X) = 4
r3 (X);
.
.
.
write_TS (X) = 4 > 1 = TS (T3 )
sum := sum + X;
.
.
.
Bei der Operation r3 (X) wird die Transaktion T3 abgebrochen, denn die
spätere Transaktion T1 hat bereits den gewünschten Wert von X überschrieben.
Prof. Dr. Dietmar Seipel
542
Vorlesung Datenbanken
Wintersemester 2013/14
TO–Thomas–Algorithmus
Man kann die Schreibregel von Thomas verwenden, um mehr Parallelität zu
erreichen:
1’. Transaktion ti führt eine Schreiboperation wi (X) aus:
a) Falls read_TS (X) > TS (ti ), so breche die Transaktion ab.
Eine spätere Transaktion hat X bereits gelesen.
b) Falls write_TS (X) > TS (ti ), so ignoriere die Schreiboperation
einfach. Eine spätere Transaktion hat X bereits überschrieben, und
die Schreiboperation ist somit irrelevant.
c) Ansonsten führe die Schreiboperation aus und setze
write_TS (X) := TS (ti ).
Hier wird lediglich eine spezielle Art von View–Serialisierbarkeit garantiert.
Die N P–Vollständigkeit des VSR–Tests ist hier kein Problem, da
TO–Thomas einen VSR–Schedule erzeugt, ohne ihn testen zu müssen.
Prof. Dr. Dietmar Seipel
543
Vorlesung Datenbanken
Wintersemester 2013/14
Beispiel (View Serialisierbarkeit)
T1
T2
read_TS (X) = write_TS (X) = 0
r1 (X);
TS (T1 ) = 1, read_TS (X) = 1
w2 (X);
w1 (X);
TS (T2 ) = 2, write_TS (X) = 2
write_TS (X) = 2 > 1 = TS (T1 )
1. Die Operation w1 (X) wird ignoriert, da die spätere Transaktion T2 den
Wert von X bereits überschrieben hat – die Schreiboperation ist somit
irrelevant.
2. Das System führt also den Schedule s = r1 (X) w2 (X) w1′ (X) aus,
bei dem w1′ (X) ohne Effekt bleibt.
3. s ist view–äquivalent zum Schedule s′ = r1 (X) w1 (X) w2 (X).
Prof. Dr. Dietmar Seipel
544
Vorlesung Datenbanken
Wintersemester 2013/14
Eigenschaften
Zeitstempelverfahren sind deadlock–frei.
Allerdings kann es dazu kommen, daß Transaktionen immer wieder
abgebrochen und neu gestartet werden (→ Verhungern, starvation).
Strikte CSR–Schedules
Außerdem kann der Basis–TO–Algorithmus auch so modifiziert werden,
daß er strikte CSR–Schedules erzeugt:
Führt eine Transaktion ti eine Schreiboperation wi (X) oder eine
Leseoperation ri (X) aus mit TS (ti ) > write_TS (X),
so wird die Operation bis nach dem Commit bzw. Abort derjenigen
Transaktion, welche X zuletzt geschrieben hat, verzögert.
Prof. Dr. Dietmar Seipel
545
Vorlesung Datenbanken
Wintersemester 2013/14
4.2.4 Mehrversionen–Scheduling–Verfahren
Hier werden mehrere Versionen der Datenobjekte gehalten
(→ erhöhter Speicherbedarf).
• Dadurch können Leseoperationen, welche sich auf frühere Versionen
beziehen, immer noch ausgeführt werden.
• Man arbeitet hier mit View–Serialisierbarkeit und erreicht dadurch mehr
Parallelität.
• Die Versionen eines Datenobjekts stellen seine Entwicklungsgeschichte
dar.
• Im Extremfall hat man es mit temporalen Datenbanken (vgl.
Börsencharts) zu tun.
Prof. Dr. Dietmar Seipel
546
Vorlesung Datenbanken
Wintersemester 2013/14
Mehrversionen–Zeitstempelverfahren (kein ACA)
Zu jedem Datenobjekt X werden mehrere
Versionen X1 , . . . , Xk
gehalten zusammen mit folgenden Zeitstempeln:
read_TS (Xi ):
Der Lese–Zeitstempel ist der größte Zeitstempel TS (t) unter allen
Transaktionen t, welche Xi erfolgreich gelesen haben.
write_TS (Xi ):
Der Schreib–Zeitstempel ist der größte Zeitstempel TS (t) unter allen
Transaktion t, welche Xi erfolgreich geschrieben haben.
Prof. Dr. Dietmar Seipel
547
Vorlesung Datenbanken
Wintersemester 2013/14
Beim Datenzugriff einer Transaktion ti auf X wird diejenige Version Xm ,
mit 1 ≤ m ≤ k, gewählt, die den höchsten Schreib–Zeitstempel unter allen
Versionen mit write_TS (Xm ) ≤ TS (ti ) hat:
1. Falls ti eine Schreiboperation wi (X) ausführt:
a) Falls read_TS (Xm ) > TS (ti ), so brechen wir ti ab, da die
Transaktion tj mit dem Zeitstempel TS (tj ) = read_TS (Xm )
ansonsten die falsche Version Xm gelesen hätte.
b) Andernfalls kreieren wir eine neue Version Xk+1 von X mit
read_TS (Xk+1 ) = write_TS (Xk+1 ) = TS (ti ).
2. Falls ti eine Leseoperation ri (X) ausführt,
so lesen wir den Wert von Xm und setzen
read_TS (Xm ) := max { read_TS (Xm ), TS (ti ) }.
Man kann also in jedem Fall vergangene Versionen eines Datenobjekts X
lesen. Eine bereits gelesene Version kann man aber nicht mehr überschreiben.
Prof. Dr. Dietmar Seipel
548
Vorlesung Datenbanken
Wintersemester 2013/14
Mehrversionen–Zwei–Phasen–Sperrprotokoll
Zu jedem Datenobjekt X werden zwei Versionen X1 und X2 gehalten:
1. X1 enthält immer einen Wert, der von einer freigegebenen Transaktion
geschrieben wurde.
2. X2 wird kreiert, wenn eine Transaktion ti eine Schreib–Sperre auf X
beantragt.
Dann wird X2 zur lokalen Kopie für ti , und andere Transaktionen
können fortfahren, die freigegebene Version X1 von X zu lesen.
Das Mehrversionen–Zwei–Phasen–Sperrprotokoll garantiert ACA.
Prof. Dr. Dietmar Seipel
549
Vorlesung Datenbanken
Wintersemester 2013/14
Man arbeitet mit folgender Kompatibilitäts–Matrix:
rlj (X)
wlj (X) clj (X)
rli (X)
+
+
−
wli (X)
+
−
−
cli (X)
−
−
−
1. Will eine Transaktion ti freigegeben werden, so muß sie eine
Zertifizierungs–Sperre (certify lock) cli (X) für alle Datenobjekte X
beantragen, für welche sie eine Schreib–Sperre wli (X) hält.
2. Erst wenn ti alle erforderlichen Zertifizierungs–Sperren erhalten hat,
kann ti freigegeben werden.
Dies vermeidet kaskadierende Aborts, Deadlocks können auftreten.
Prof. Dr. Dietmar Seipel
550
Vorlesung Datenbanken
Wintersemester 2013/14
4.3 Recovery
Das Ziel ist die fehlertolerante Verarbeitung von Transaktionen.
Man kann sich 3 Fehlerklassen vorstellen:
1. Transaktionsfehler: Eine Transaktion erreicht ihren Commit–Punkt
nicht. Gründe dafür können ein Fehler im Programm, aus welchem die
Transaktion resultiert, oder die Verwicklung der Transaktion in einen
Deadlock mit Auswahl derselben als Opfer sein.
Dann muß die Transaktion rückgängig gemacht werden (roll back).
2. Systemfehler: Fehler im DBMS–Code, im Betriebssystem oder in der
Rechner–Hardware mit dem Effekt, daß flüchtiger Speicher
(Hauptspeicher, Datenbankpuffer) verloren geht.
3. Mediafehler: z.B. Headcrashes auf der Platte oder Hardwarefehler im
Betriebssystem mit dem Effekt, daß stabiler Speicher
(Sekundärspeicher) verloren geht.
Prof. Dr. Dietmar Seipel
551
Vorlesung Datenbanken
Wintersemester 2013/14
Update–Konzepte
1. Beim verzögerten Update werden die Änderungen nur im Log–Buch und
im lokalen Arbeitsbereich einer Transaktion ausgeführt.
Zum Commit–Zeitpunkt einer Transaktion wird das Log–Buch auf Platte
geschrieben (force write), und beim nächsten Checkpoint werden auch
die Änderungen aus dem Datenbankpuffer auf Platte (in die Datenbank)
geschrieben.
Bei einem Transaktionsfehler ist also kein UNDO nötig.
2. Beim direkten Update werden die Änderungen im Log–Buch und in der
Datenbank ausgeführt. Hier benötigt man REDO und UNDO.
3. Beim Shadow–Paging werden für geänderte Datenseiten zwei Versionen
verwaltet: die aktuellen Seiten und die alten Seiten (Schattenseiten). Die
Schattenseiten enthalten einen alten, konsistenten Datenbankzustand.
Hier benötigt man kein UNDO.
Prof. Dr. Dietmar Seipel
552
Vorlesung Datenbanken
Wintersemester 2013/14
Recovery
Die Wiederherstellung eines konsistenten Datenbankzustandes nach einem
Fehler erfolgt mit Hilfe des Log–Buches.
1. Nach einem Systemzusammenbruch wird eine alte Version der
Datenbank eingespielt, und die Aktionen der freigegebenen
Transaktionen werden aus dem Log–Buch rekonstruiert (REDO).
2. Bei einem Transaktionsfehler werden die vorgenommenen Aktionen der
fehlerhaften Transaktionen zurückgenommen (UNDO).
Nur Schreiboperationen müssen zurückgenommen werden:
AFIM (after image) → BFIM (before image).
Die Leseoperationen stehen nur im Log–Buch, um Konflikte zu
entdecken.
Prof. Dr. Dietmar Seipel
553
Herunterladen