Bisher wurden alle Sperren auf derselben
Granularität erworben. Mögliche
Sperrgranulate sind:
- Datensatz
Tupel
- Seite
Block im Hintergrundspeicher
- Segment
Zusammenfassung von Seiten
- Datenbasis
gesamter Datenbestand
Abbildung 13.5 zeigt die hierarchische Anordnung der möglichen Sperrgranulate.
Hierarchie der Sperrgranulate
Eine Vermischung von Sperrgranulaten hätte folgende Auswirkung.
Bei Anforderung einer Sperre für eine Speichereinheit, z.B. ein Segment,
müssen alle darunterliegenden Seiten und Sätze auf
eventuelle Sperren überprüft werden. Dies bedeutet einen
immensen Suchaufwand.
Auf der anderen Seite
hätte die
Beschränkung auf nur eine Sperrgranularität folgende Nachteile:
- Bei zu kleiner Granularität werden Transaktionen mit hohem Datenzugriff
stark belastet.
- Bei zu großer Granularität wird der Parallelitätsgrad unnötig
eingeschränkt.
Die Lösung des Problems besteht
im multiple granularity locking (MGL).
Hierbei werden zusätzliche Intentionssperren verwendet, welche
die Absicht einer weiter unten in der Hierarchie gesetzten
Sperre anzeigen.
Tabelle 13.13 zeigt die Kompatibilitätsmatrix.
Die Sperrmodi sind:
- NL: keine Sperrung (no lock);
- S: Sperrung durch Leser,
- X: Sperrung durch Schreiber,
- IS: Lesesperre (S) weiter unten beabsichtigt,
- IX: Schreibsperre (X) weiter unten beabsichtigt.
|
NL |
S |
X |
IS |
IX |
S |
|
|
- |
|
- |
X |
|
- |
- |
- |
- |
IS |
|
|
- |
|
|
IX |
|
- |
- |
|
|
Tabelle 13.13: Kompatibilitätsmatrix beim Multiple-Granularity-Locking
Die Sperrung eines Datenobjekts muß so durchgeführt werden, daß erst
geeignete Sperren in allen übergeordneten Knoten in der Hierarchie
erworben werden:
- Bevor ein Knoten mit S oder IS gesperrt wird, müssen
alle Vorgänger vom Sperrer im IX- oder IS-Modus
gehalten werden.
- Bevor ein Knoten mit X oder IX gesperrt wird, müssen
alle Vorgänger vom Sperrer im IX-Modus
gehalten werden.
- Die Sperren werden von unten nach oben freigegeben.
Datenbasis-Hierarchie mit Sperren
Datenbasis-Hierarchie mit zwei blockierten Transaktionen
Abbildung 13.6 zeigt eine Datenbasis-Hierarchie, in der drei
Transaktionen erfolgreich Sperren erworben haben:
- T1 will die Seite p1 zum Schreiben sperren und erwirbt zunächst
IX-Sperren auf der Datenbasis D und auf Segment a1.
- T2 will die Seite p2 zum Lesen sperren und erwirbt
zunächst IS-Sperren auf der Datenbasis D und auf
Segment a1.
- T3 will das Segment a2 zum Schreiben sperren und erwirbt
zunächst eine IX-Sperre auf der Datenbasis D.
Nun fordern zwei weitere Transaktionen T4 (Schreiber) und T5 (Leser)
Sperren an:
- T4 will Satz s3 exklusiv sperren. Auf dem Weg dorthin erhält
T4 die erforderlichen IX-Sperren für D und a1,
jedoch kann die IX-Sperre für p2 nicht gewährt werden.
- T5 will Satz s5 zum Lesen sperren. Auf dem Weg dorthin erhält
T5 die erforderliche IS-Sperren nur für D,
jedoch können die IS-Sperren für a2 und p3
zunächst nicht gewährt werden.
Bild 13.7 zeigt die Situation nach dem gerade beschriebenen Zustand. Die
noch ausstehenden Sperren sind durch eine Durchstreichung gekennzeichnet.
Die Transaktionen T4 und T5 sind blockiert, aber nicht verklemmt
und müssen auf die Freigabe der Sperren (T2, S) und T3, X)
warten.