Transaktions-Synchronisation

Werbung
Grundlagen von Datenbanken
SS 2010
9. Synchronisation paralleler Transaktionen
Prof. Dr. Stefan Böttcher
Universität Paderborn
Agenda:
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 1
Wesentliche Eigenschaften von Transaktionen
Transaktionen ( = mehrere Datenbank-Aktionen
zusammengefasst zu einer Einheit )
sind :
Eigenschaft
Bedeutung
Beispiel
A
atomar
ganz oder garnicht
Überweisung
C
consistent
korrekt
Dateneingabe
I
isoliert
ungestört von parallelen
Transaktionen
Flugbuchung
D
dauerhaft
Daten gesichert
Auszahlung
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 2
Transaktionsprozeduren
Transaktionsprozeduren =
Prozeduren / Funktionen / Quellcodefragmente ,
die als atomare Einheit (ganz oder garnicht) auf der
Datenbank ausgeführt werden sollen.
Syntax zur Kennzeichnung der Einheit,
z.B. Anfang und Ende der Transaktionsprozedur wird
bestimmt durch einen der beiden Befehle
Commit oder Rollback
oder
am Anfang steht der Befehl tBegin( )
am Ende steht tCommit( ) oder tAbort( )
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 3
Transaktionen einer Transaktionsprozedur
Transaktion (= Ausführung einer Transaktionsprozedur auf der
Datenbank)
eine Folge aus Lese- und oder Schreiboperationen
auf der Datenbank , denen ein Begin vorangestellt ist ,
und an deren Ende entweder Commit oder Abort
ausgeführt wird.
Commit schreibt Änderungen auf der Datenbank fest,
Abort macht die Änderungen dieser Transaktion auf der
Datenbank rückgängig.
i.d.R. gibt es mehrere Transaktionen pro Transaktionsprozedur.
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 4
Transaktionsprozedur – Beispiel 1 (SQL)
void umbuchung ( int kto1, int kto2, int wieviel )
{
stmt.executeUpdate( ‘rollback‘ ) ;
stmt.executeUpdate( ‘update K.stand = K.stand + ‘ +
wieviel + ‘ where K.kto = ‘ + kto1 ) ;
stmt.executeUpdate( ‘update K.stand = K.stand - ‘ +
wieviel + ‘ where K.kto = ‘ + kto2 ) ;
stmt.executeUpdate( ‘commit‘ ) ;
}
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 5
Mögliche Transaktionen zu Beispiel 1
Eine Beispieltransaktion (T1)
< T1: Start >
< T1: Konto1 = Konto1 + 100 >
< T1: Konto2 = Konto2 - 100 >
< T1: Commit >
Eine andere Beispieltransaktion (T2)
< T2: Start >
< T2: Konto77 = Konto77 + 44 >
< T2: Konto88 = Konto88 - 44 >
< T2: Commit >
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 6
Transaktionsprozedur – Beispiel 2 (Poet OODB)
int bestelle ( int kto , Bestellung b )
{ tBegin( ) ;
aktuellerPreis = DB.Bestellungen.insert(b) ;
DB.Konten( kto ) . stand -= aktuellerPreis ;
if ( DB.Konten( kto ) . ueberziehungsLimitErschoepft ( ) ;
{ tAbort( ) ; // Datenbankoperationen dieser T zurücksetzen
return 255 ;
}
else {
tCommit( ) ; // Datenbankoperationen dieser T festschreiben
return 1;
}
}
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 7
Mögliche Transaktionen zu Beispiel 2
Eine Beispieltransaktion (T3)
< T3: Start >
< T3: Bestellungen.insert( 33, ‘Meier‘ , ‘Teil66 ) >
< T3: Konto22 = Konto22 - 1000 >
< T3: read( Konto22 ) >
// noch genug auf dem Konto
< T3: Commit >
Eine andere Beispieltransaktion (T4)
< T4: Start >
< T4: Bestellungen.insert( 33, ‘Meier‘ , ‘Teil66 ) >
< T4: Konto22 = Konto22 - 1000 >
< T4: read( Konto22 ) >
// nicht genug auf dem Konto
< T4: Abort >
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 8
Parallele Transaktionen
mehrere Transaktionen arbeiten gleichzeitig auf der Datenbank
z.B. verschiedene Bestellungen und Umbuchungen
und Kontostandsabfragen gleichzeitig
Ziele:
• hoher Parallelitätsgrad erwünscht  kritischer Abschnitt geht nicht,
• fehlerhafte parallele Abläufe sollen vermieden werden
4 typische Fehlerklassen:
Lesen schmutziger Daten (= dirty read)
nicht wiederholbares Lesen (= non-repeatable read)
verlorene Änderung (= lost update)
Phantomproblem (= phantom problem)
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 9
Fehlerklasse Lesen schmutziger Daten (= Dirty Read)
// Summe aller Konten ist 0
< T1: Start >
< T1: Konto1 = Konto1 - 100 >
< T2: Start >
< T2: read(Konto1) >
< T2: read(Konto2) >
< T2: Commit >
// Summe ist -100 ??
< T1: Konto2 = Konto2 + 100 >
< T1: Commit >
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 10
Nicht-wiederholbares Lesen (= non-repeatable read)
< T1: Start >
< T2: Start >
< T2: read(Konto1) >
< T1: Konto1 = Konto1 - 100 >
< T2: read(Konto1) >
// ?? 2 verschiedene Werte
< T2: Commit >
< T1: Commit >
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 11
Fehlerklasse Verlorene Änderung (= lost update)
< T1: Start >
< T1: temp1 = Konto1 + 100 >
< T2: Start >
< T2: temp2 = Konto1 + 200 >
< T2: Konto1 = temp2 >
< T2: Commit >
< T1: Konto1 = temp1 >
< T1: Commit >
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 12
Hintergrund der Fehlerklassen (1) - Konflikt
Operationen aus T1 und T2 stehen zu einander in Konflikt
2 Operationen (read oder write) auf demselben Objekt
(z.B. demselben Datenwert) stehen zueinander in Konflikt,
wenn mindestens eine der beiden Operationen
eine Schreiboperation (write) ist.
Idee: ( Konflikt = Nichtvertauschbarkeit )
2 Operationen stehen zueinander in Konflikt,
wenn sie nicht vertauschbar sind
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 13
Hintergrund der Fehlerklassen (2) - Abhängigkeit
Operationen jeder Ti gehören ‘unteilbar‘ zusammen
Wenn o1 aus T1 zu o2 aus T2 in Konflikt steht,
kommt es auf die Reihenfolge von o1 und o2 an:
Durch o1 vor o2 entsteht eine Abhängigkeit T1 vor T2
durch o2 vor o1 entsteht eine Abhängigkeit T2 vor T1
T1 vor T2 wäre korrekt oder T2 vor T1 wäre korrekt,
aber T1 vor T2 und T2 vor T1 (zyklische Abhängigkeit)
ist nicht korrekt.
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 14
Gemeinsamkeiten der Fehlerklassen
Operationen aus T1 und T2 stehen so zu einander in Konflikt,
dass zyklische Abhängigkeiten
T1 vor T2 und T2 vor T1
entstehen
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 15
Fehlerklasse Lesen schmutziger Daten (= Dirty Read)
// Summe aller Konten ist 0
< T1: Start >
< T1: Konto1 = Konto1 - 100 >
< T2: Start >
< T2: read(Konto1) >
< T2: read(Konto2) >
< T2: Commit >
// Summe ist -100 ??
< T1: Konto2 = Konto2 + 100 >
< T1: Commit >
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 16
Nicht-wiederholbares Lesen (= non-repeatable read)
< T1: Start >
< T2: Start >
< T2: read(Konto1) >
< T1: Konto1 = Konto1 - 100 >
< T2: read(Konto1) >
// ?? 2 verschiedene Werte
< T2: Commit >
< T1: Commit >
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 17
Fehlerklasse Verlorene Änderung (= lost update)
< T1: Start >
< T1: temp1 = Konto1 + 100 >
< T2: Start >
< T2: temp2 = Konto1 + 200 >
< T2: Konto1 = temp2 >
< T2: Commit >
< T1: Konto1 = temp1 >
< T1: Commit >
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 18
Formale Definition von Serialisierbarkeit (1)
Eine Transaktion(Ti , i ) ist eine partielle Ordnung einer Menge
von Operationen,
Ti  Liesi x , Schreibei x  | x ist Dateneleme nt Abbruchi , Endei ,
mit einer zugehörigen partiellen Ordnungsrelation
folgenden Eigenschaften:
 i mit
 Abbruchi Ti  EndeTi .
 Abbruchi bzw. Endei ist die letzte Operation in Ti , d.h. für
alle an anderen Operationen oi  Ti gilt, oi i Abbruchi
bzw. oi i Endei .
- Für jedes Paar
entweder oi1
Motivation / Fehlerklassen
oi1 , oi2 Ti , die in Konflikt stehen, ist
i oi2
oder oi2 i oi1 .
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 19
Formale Definition von Serialisierbarkeit (2)
Eine vollständige Historie einer Menge von n Transaktionen Ti mit
i 1  i n 
Ordnungsrelationen
mit Ordnungsrelation
H ,
ist eine partielle Ordnung
H ,  
H
wobei
n
 H  i 1 Ti
n
  H  i 1 i

und
alle Paare von Operationen
o1, o2  H ,
die zueinander in Konflikt stehen, werden durch die
vollständige Historie
o2  H o1.
Motivation / Fehlerklassen
H
Serialisierbarkeit
o  H o2 oder
geordnet, d. h. 1
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 20
Formale Definition von Serialisierbarkeit (3)
Eine Historie H1  H ' ,  H '  ist ein Präfix einer vollständigen
Historie H 2  H '  H , also eine partielle Ordnung mit
folgenden Eigenschaften:
 H' H
 Für alle o1 , o2  H ' gilt : o1  H ' o2  o1  H o2 .
 Für alle o1 , o2  H gilt : o1  H o2  o2  H '   o1  H '.
Historien können also Transaktionen enthalten, die noch
nicht vollständig ausgeführt sind.
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 21
Formale Definition von Serialisierbarkeit (4)
Zwei Historien von Transaktionen heißen „aquivalent“,
wenn sie über derselben Menge von Transaktionen
definiert sind, dieselben Operationen enthalten und
zueinander in Konflikt stehende Operationen nicht
abgebrochener Transaktionen in derselben Weise ordnen.
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 22
Formale Definition von Serialisierbarkeit (5)
Eine vollständige Historie von Transaktionen heißt „seriell“,
wenn für jedes Paar
T , T  von Transaktionen entweder
alle Operationen von
Tj
von T j
von
i
j
Ti
vor allen Operationen
auftreten, oder umgekehrt alle Operationen
vor allen Operationen von
Motivation / Fehlerklassen
Serialisierbarkeit
Ti
2-Phasen-Sperren
auftreten.
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 23
Formale Definition von Serialisierbarkeit (6)
Eine vollständige Historie von Transaktionen heißt
„serialisierbar“,
wenn sie äquivalent zu einer seriellen Historie ist
Eine Historie heißt serialisierbar,
wenn der Präfix ihrer mit Ende (=Commit) abschlossenen
Transaktionen serialisierbar ist.
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 24
Serialisierbarkeitstheorem (7)
Der Abhängigkeitsgraph einer Historie von Transaktionen
enthält einen Knoten pro Transaktion und für jede
Abhängigkeit T1 vor T2 eine Kante von T1 nach T2.
Eine Historie von Transaktionen ist genau dann
„serialisierbar“, wenn ihr Abhängigkeitsgraph projiziert auf
die mit Commit abgeschlossenen Transaktionen zyklenfrei
ist.
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 25
2-Phasen-Sperren – Lese- und Schreibsperren
Wird eine angeforderte Sperre nicht gewährt, muss T warten
bis die Sperre gewährt wird
Operationen auf Sperren:
rlock( T, A ) = Transaktion T fordert Lesesperre auf A an
wlock( T, A ) = Transaktion T fordert Schreibsperre auf A an
unlock( T, A ) = Transaktion T gibt Sperre auf A wieder frei
auch benutzte Kurzschreibweise:
lock( T, A ) = Transaktion T fordert Lese- oder Schreibsperre
auf A an
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 26
2-Phasen-Sperren - Legalität
T hält beim Schreiben eines Objektes A eine Schreibsperre
und beim Lesen eines Objektes eine Schreib- oder Lesesperre
Legalität:
Für alle Operationen write(T, A)  T gilt:
es gibt wlock(T,A)  T und unlock(T,A)  T mit
wlock( T , A ) <H write( T, A ) <H unlock( T, A )
Für alle Operationen read(T, A)  T gilt:
es gibt lock(T,A)  T und unlock(T,A)  T mit
lock( T , A ) <H read( T, A ) <H unlock( T, A )
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 27
2-Phasen-Sperren – Sperr-Regel
Schreibsperren (wlock) auf A verbieten
rlock wlock
gleichzeitige andere Sperren auf A,
rlock
ok
wait
und Lesesperren (rlock) auf A verbieten
gleichzeitige andere Schreibsperren auf A wlock wait wait
Sperr-Regel:
Für alle wlock(Ti,A), unlock(Ti,A), wlock(Tk,A), unlock(Tk,A) mit i≠k gilt:
unlock(Ti,A) <H wlock(Tk,A) v unlock(Tk,A) <H wlock(Ti,A)
Für alle rlock(Ti,A), unlock(Ti,A), wlock(Tk,A), unlock(Tk,A) mit i≠k gilt:
unlock(Ti,A) <H wlock(Tk,A) v unlock(Tk,A) <H rlock(Ti,A)
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 28
Warum 2-Phasigkeit notwendig ist
// Summe aller Konten ist 0 ( z.B. A+B = 0 )
// T1 bucht 100€ von A nach B um , T2 liest A und B
wlock( T1, A)
< T1: A = A - 100 > // write(T,A)
unlock(T1,A)
rlock(T2,A) ; rlock(T2,B)
< T2: read(A) >
< T2: read(B) >
unlock(T2,A) ; unlock(T2,B)
wlock(T1,B)
// Summe A+B ist -100 ??
< T1: B = B + 100 >
unlock(T1,B)
// dirty read trotz Legalität und eingehaltener Sperr-Regel
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 29
2-phasige Transaktionen
Jede Transaktion T muss mit der Freigabe ihrer Sperren
warten, bis sie alle Sperren erhalten hat.
Sie macht ihre erste Sperrfreigabe erst nach allen
Sperranforderungen
2-Phasigkeit einer Transaktion T:
Für alle rlock(T,A) , wlock(T,B) , unlock(T,C) gilt:
rlock(T,A)
<H unlock(T,C)
und
wlock(T,B) <H unlock(T,C)
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 30
Serialisierbarkeit durch 2-Phasen-Sperren
2-Phasen-Sperren garantiert serialisierbare Historien
Serialisierbarkeitssatz für 2-Phasen-Sperren:
Jede Historie, die nur aus legalen 2-phasigen Transaktionen
besteht und die Sperr-Regel einhält ist serialisierbar.
Beweis: Widerspruchsbeweis über die Ordnung <H.
Angenommen, die Historie H ist nicht serialisierbar, dann gibt
es einen Zyklus im Serialisierbarkeitsgraph  …  …
mindestens 1 der am Zyklus beteiligten Transaktionen ist nicht
legal oder nicht 2-phasig oder H verletzt die Sperr-Regel
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 31
Parallele Validierung (nach Kung & Robinson) (1)
Transaktionen T haben 2 oder 3 Phasen
Zeit
T
lies aus der Datenbank
und schreibe auf lokale Kopien
Lesephase
validiere (=prüfe), ob Abhängigkeiten azyklisch sind,
d.h., dass T nicht von neuerer Transaktion abhängt
Validierungsphase
nur wenn Validierung erfolgreich war,
schreibe lokale Kopien in die Datenbank
optionale
Schreibphase
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 32
Parallele Validierung (nach Kung & Robinson) (2)
Transaktionen T bekommen am Ende der Lesephase ihren Zeitstempel
Zeit Neuere Transaktionen validieren gegen ältere
T
Lesephase
lies aus der Datenbank
und schreibe auf lokale Kopien
hier bekommt die Transaktion T ihren Zeitstempel
validiere (=prüfe), ob Abhängigkeiten azyklisch sind,
d.h., dass T nicht von neuerer Transaktion abhängt
Validierungsphase
wenn Validierung erfolgreich war,
schreibe lokale Kopien in die Datenbank
optionale
Schreibphase
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 33
Parallele Validierung (nach Kung & Robinson) (3)
Grundideen:
1. Transaktionen werden nicht gesperrt, müssen nicht warten
2. Lasse neuere Transaktionen „vordrängeln“, aber auf eigenes Risiko,
d.h., wenn sie zu früh gestartet wurden, müssen sie abbrechen und
wiederholt gestartet werden.
3. Neuere Transaktionen sind die, die einen späteren Zeitstempel
bekommen, d.h. später mit der Lesephase fertig wurden.
4. Um die Datenbank nicht zu beschädigen,
schreiben Transaktionen in der Lesephase nur auf lokale Kopien,
und nur nach erfolgreicher Validierung schreiben sie (in der
Schreibphase) in die Datenbank
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 34
Parallele Validierung (nach Kung & Robinson) (4)
Wenn es eine Abhängigkeit Tneu  Talt geben könnte, breche Tneu ab,
d.h. Tneu schreibt nicht in die Datenbank (Tneu hat keine Schreibphase)
Abhängigkeiten
Talt  Tneu sind o.K.
Talt
Zeit
Tneu
L
Lesephase
V
[& S]
Validierung
[ & Schreibphase ]
Validierung von Tneu verhindert diese Abhängigkeit
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 35
Validierung unterscheidet 3 Gruppen älterer Transaktionen
Zeit
Talt1  o.K.
r
Tneu wird bei jeder Abhängigkeit Tneu  Talt
abgebrochen (zyklische Abhängigkeit wäre möglich)
 writeSet(Talt2) ∩ readSet(Tneu) = 
Talt2
v
[& w]
r
Talt3
v
[& w]
Motivation / Fehlerklassen
Serialisierbarkeit
 writeSet(Talt3) ∩ readSet(Tneu) = 
und writeSet(Talt3) ∩ writeSet(Tneu) = 
Tneu
r
Lesephase
v
[& w]
Validierung
[& Schreibphase]
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 36
Implementierung der Validierungsphase von Tneu
Tneu unterteilt alle älteren Transaktionen in 3 Gruppen:
1. Talt1: Transaktionen, die beendet werden,
bevor Tneu in der Lesephase ist
2. Talt2: Transaktionen, die beendet werden,
während Tneu in der Lesephase ist
3. Talt3: Transaktionen, die beendet werden,
nachdem Tneu in der Lesephase war
Validierung liefert genau dann false,
wenn es eine T  Talt2 gibt mit writeSet(Talt2) ∩ readSet(Tneu) ≠  oder
wenn es eine T  Talt3 gibt mit
writeSet(Talt3) ∩ ( readSet(Tneu)  writeSet(Tneu) ) ≠ 
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 37
Korrektheit der parallelen Validierung
time
Told1  o.K.
r
Told2
v
[& w]
r
Tneu  Talt kann es nicht geben für
Talt1 , denn : ende von Talt1 vor start von Tneu
Talt2, Talt3, weil Validierung das ausschließt
Tneu validiert erfolgreich
 writeSet(Talt2) ∩ readSet(Tneu) = 
Told3  writeSet(Talt3) ∩ readSet(Tneu) = 
 writeSet(Talt3) ∩ writeSet(Tneu) = 
v
[& w]
Motivation / Fehlerklassen
Serialisierbarkeit
Tnew
r
Lesephase
v
[& w]
Validierung
[& Schreibphase]
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 38
Transaktionsprozedur zum Phantomproblem
TP1:
EXEC SQL insert into Konten values( KontoNr3, 3000 ) ;
TP2:
EXEC SQL select Count(KontoNr) into :Kontenanzahl
from Konten
if ( Kontenanzahl ≠ 0 ) // zeige Durchschnittsbetrag
{ EXEC SQL select SUM(KontoStand) into :Summe
from Konten
println(''Durchschnittsbetrag ist :'',
Summe / Kontenanzahl ) ;
}
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 39
Transaktionen zum Phantomproblem
T2 stellt fest, dass KontoNr3 nicht existiert
< T2: Start >
< T2: read(KontoNr1) >
< T2: read(KontoNr2) >
< T2: not exists(KontoNr3) >
< T1: Start >
< T1: insert (KontoNr3 , 3000 ) >
< T1: Commit >
< T2: read(KontoStand1) >
< T2: read(KontoStand2) >
< T2: read(KontoStand3) >
< T2: Commit >
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 40
Konflikt mit Phantom-Tupeln
T2 stellt fest, dass KontoNr3 nicht existiert
< T2: not exists(KontoNr3) >
< T1: insert (KontoNr3 , 3000 ) >
Vertauschung der Operationen ändert das Ergebnis  Konflikt
T2 stellt fest, dass KontoNr3 existiert
< T1: insert (KontoNr3 , 3000 ) >
< T2: read(KontoNr3) >
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 41
Prädikatives Sperren
Problem des physischen Sperrens:
Es sperrt die gelesenen Tupel der Relation, d.h. nur die
gelesenen und als wahr interpretierten Tupel des Schemas
Idee zur Verhinderung des Phantomproblems:
Sperre alle gelesenen Tupel des Schemas, auch die
als falsch interpretierten Tupel des Schemas
Realisierung:
Benutze Sperren mit Formeln (z.B. des Tupelkalküls) für
Mengen von gesperrten Tupeln des Schemas
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 42
Prädikatives Sperren - Beispiel
Betrag
rlock( T1 , { tKonto | t.Betrag > 5000 } )
5000
wlock( T2 , { tKonto | t.Name >= ‘Q‘ } )
Schema( Konto )
Name
Q
{ tKonto | t.Betrag > 5000 } ∩ { tKonto | t.Name >= ‘Q‘ } ≠  
t.Betrag > 5000  t.Name >= ‘Q‘ ist erfüllbar  T2 Sperre nicht gewähren
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 43
Prädikatives Sperren - Kritik
Hauptkritikpunkt:
Test für die Sperrvergabe braucht einen Beweis  dauert zu lange
Aber unvollständige Beweiser genügen O(Vergleichsanzahl³)
Im Zweifelsfall: Sperre nicht gewähren, d.h. Transaktion warten lassen
{ tKonto | t.Betrag > 5000 } ∩ { tKonto | t.Name >= ‘Q‘ } ≠  
t.Betrag > 5000  t.Name >= ‘Q‘ ist erfüllbar  T2 Sperre nicht gewähren
Alternativvorschläge:
1. Indexsperren (konzeptuell: eingeschränkte prädikative Sperren)
2. Sperren der EOF-Marke (Hauptkritikpunkt: blockiert alle Einfüger)
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 44
Prädikative Validierung
Idee zur Verhinderung des Phantomproblems:
Benutze zur Validierung Anfrage statt Beweis
T validiert von ihr geschriebene alte und neue Werte
von Tupeln der Relation gegen Formeln (z.B. des Tupelkalküls)
der Lese- und Schreibmengen älterer Transaktionen,
d.h. Formeln beschreiben von älteren Transaktionen
gelesene bzw. geschriebene Tupel des Schemas
+ möglich durch Anfrage  effizient durchführbar
 in jedem DBMS implementierbar
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 45
Prädikative Validierung - Beispiel
Betrag
read-set( Talt , { tKonto | t.Betrag > 5000 } )
write-set( Tneu ,
6000
5000
4000
+
Konto + { ( Name=‘Reich‘, Betrag=6000 ) }
-
Konto - { ( Name=‘Reich‘, Betrag=4000 ) }
)
Schema( Konto )
Name
Q Reich
{ t { ( Name=‘Reich‘, Betrag=6000 ) , ( Name=‘Reich‘, Betrag=4000 ) } | t.Betrag > 5000 } ≠ 
 Validierung von Tneu scheitert  Tneu abbrechen und neu starten
Motivation / Fehlerklassen
Serialisierbarkeit
2-Phasen-Sperren
Validierung
Prädikative Synchronisation
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9 - 46
Herunterladen