DBMS - Parallelitätskontrolle
In einer Multiprogrammierumgebung, in der mehrere Transaktionen gleichzeitig ausgeführt werden können, ist es äußerst wichtig, die Parallelität von Transaktionen zu steuern. Wir verfügen über Protokolle zur Parallelitätskontrolle, um die Atomizität, Isolation und Serialisierbarkeit gleichzeitiger Transaktionen sicherzustellen. Parallelitätskontrollprotokolle können grob in zwei Kategorien unterteilt werden -
- Sperrbasierte Protokolle
- Zeitstempel-basierte Protokolle
Sperrenbasierte Protokolle
Datenbanksysteme, die mit sperrenbasierten Protokollen ausgestattet sind, verwenden einen Mechanismus, mit dem jede Transaktion keine Daten lesen oder schreiben kann, bis sie eine entsprechende Sperre dafür erhält. Es gibt zwei Arten von Schlössern:
Binary Locks- Eine Sperre für ein Datenelement kann sich in zwei Zuständen befinden. es ist entweder gesperrt oder entsperrt.
Shared/exclusive- Diese Art von Verriegelungsmechanismus unterscheidet die Schlösser nach ihrer Verwendung. Wenn eine Sperre für ein Datenelement erworben wird, um eine Schreiboperation auszuführen, handelt es sich um eine exklusive Sperre. Wenn mehr als eine Transaktion auf dasselbe Datenelement schreiben kann, wird die Datenbank in einen inkonsistenten Zustand versetzt. Lesesperren werden gemeinsam genutzt, da kein Datenwert geändert wird.
Es stehen vier Arten von Sperrprotokollen zur Verfügung:
Simplistic Lock Protocol
Mit vereinfachten sperrenbasierten Protokollen können Transaktionen eine Sperre für jedes Objekt erhalten, bevor eine Schreiboperation ausgeführt wird. Transaktionen können das Datenelement nach Abschluss des Schreibvorgangs entsperren.
Sperrprotokoll vorab beanspruchen
Protokolle, die vorab beansprucht werden, bewerten ihre Vorgänge und erstellen eine Liste von Datenelementen, für die sie Sperren benötigen. Vor dem Einleiten einer Ausführung fordert die Transaktion das System vorab nach allen erforderlichen Sperren auf. Wenn alle Sperren gewährt wurden, führt die Transaktion alle Sperren aus und gibt sie frei, wenn alle Vorgänge abgeschlossen sind. Wenn nicht alle Sperren gewährt werden, wird die Transaktion zurückgesetzt und gewartet, bis alle Sperren gewährt wurden.
Zweiphasenverriegelung 2PL
Dieses Sperrprotokoll unterteilt die Ausführungsphase einer Transaktion in drei Teile. Wenn die Transaktion im ersten Teil ausgeführt wird, bittet sie um Erlaubnis für die erforderlichen Sperren. Im zweiten Teil erwirbt die Transaktion alle Sperren. Sobald die Transaktion ihre erste Sperre aufhebt, beginnt die dritte Phase. In dieser Phase kann die Transaktion keine neuen Sperren verlangen. Es werden nur die erworbenen Sperren freigegeben.
Zweiphasenverriegelung hat zwei Phasen, eine ist growing, wo alle Sperren durch die Transaktion erworben werden; und die zweite Phase schrumpft, in der die von der Transaktion gehaltenen Sperren freigegeben werden.
Um eine exklusive (Schreib-) Sperre zu beanspruchen, muss eine Transaktion zuerst eine gemeinsam genutzte (Lese-) Sperre erwerben und diese dann auf eine exklusive Sperre aktualisieren.
Strikte Zweiphasenverriegelung
Die erste Phase von Strict-2PL ist dieselbe wie 2PL. Nach dem Erwerb aller Sperren in der ersten Phase wird die Transaktion normal weiter ausgeführt. Im Gegensatz zu 2PL gibt Strict-2PL nach der Verwendung keine Sperre frei. Strict-2PL hält alle Sperren bis zum Festschreibungspunkt und gibt alle Sperren gleichzeitig frei.
Strict-2PL hat keinen kaskadierenden Abbruch wie 2PL.
Zeitstempel-basierte Protokolle
Das am häufigsten verwendete Parallelitätsprotokoll ist das auf Zeitstempeln basierende Protokoll. Dieses Protokoll verwendet entweder die Systemzeit oder den logischen Zähler als Zeitstempel.
Sperrenbasierte Protokolle verwalten die Reihenfolge zwischen den Konfliktpaaren zwischen Transaktionen zum Zeitpunkt der Ausführung, während zeitstempelbasierte Protokolle funktionieren, sobald eine Transaktion erstellt wird.
Jeder Transaktion ist ein Zeitstempel zugeordnet, und die Bestellung wird durch das Alter der Transaktion bestimmt. Eine Transaktion, die zur Uhrzeit 0002 erstellt wurde, ist älter als alle anderen darauf folgenden Transaktionen. Zum Beispiel ist jede Transaktion 'y', die bei 0004 in das System eingeht, zwei Sekunden jünger und die Priorität würde der älteren gegeben.
Zusätzlich erhält jedes Datenelement den neuesten Lese- und Schreibzeitstempel. Dadurch wird dem System mitgeteilt, wann der letzte Lese- und Schreibvorgang für das Datenelement ausgeführt wurde.
Bestellprotokoll für Zeitstempel
Das Zeitstempel-Bestellprotokoll stellt die Serialisierbarkeit zwischen Transaktionen in ihren widersprüchlichen Lese- und Schreibvorgängen sicher. Es liegt in der Verantwortung des Protokollsystems, dass das in Konflikt stehende Aufgabenpaar gemäß den Zeitstempelwerten der Transaktionen ausgeführt wird.
- Der Zeitstempel der Transaktion T i wird als TS (T i ) bezeichnet.
- Der Lesezeitstempel des Datenelements X wird mit dem R-Zeitstempel (X) bezeichnet.
- Der Schreibzeitstempel des Datenelements X wird mit dem W-Zeitstempel (X) bezeichnet.
Das Bestellprotokoll für den Zeitstempel funktioniert wie folgt:
If a transaction Ti issues a read(X) operation −
- Wenn TS (Ti) <W-Zeitstempel (X)
- Operation abgelehnt.
- Wenn TS (Ti)> = W-Zeitstempel (X)
- Operation ausgeführt.
- Alle Zeitstempel der Datenelemente wurden aktualisiert.
If a transaction Ti issues a write(X) operation −
- Wenn TS (Ti) <R-Zeitstempel (X)
- Operation abgelehnt.
- Wenn TS (Ti) <W-Zeitstempel (X)
- Operation abgelehnt und Ti zurückgerollt.
- Andernfalls wird die Operation ausgeführt.
Thomas 'Schreibregel
Diese Regel besagt, wenn TS (Ti) <W-Zeitstempel (X) ist, wird die Operation zurückgewiesen und T i wird zurückgesetzt.
Die Bestellregeln für Zeitstempel können geändert werden, um die Zeitplanansicht serialisierbar zu machen.
Anstatt T i zurückzusetzen, wird die 'Schreib'-Operation selbst ignoriert.