Pessimistische Sperrverfahren für Transaktionen

Werbung
Pessimistische Sperrverfahren für Transaktionen
Pessimistische Sperrverfahren
für Transaktionen
Implementierung
von Oliver Lemm
Oliver Lemm
Seite 1/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
I. Übersicht der Theorie
I. Zusammenfassung der Theorie
➔
2 Phasen Sperre in der Theorie & Deadlocks
➔
Zwei Versionen & hierarchische Sperren
➔
Zeitstempel-Verfahren
Oliver Lemm
Seite 2/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Zwei-Phasen-Sperre
●
●
●
Möglichkeit des nebenläufigen Zugriffs durch Sperren
Sperren sorgen dafür, dass Transaktionen einen
exklusiven Zugriff auf ein Objekt haben.
Alle Transaktionen bestehen aus mindestens 2 Phasen
1. Wachstumsphase: Setzen der Sperren
2. Schrumpfungsphase: Freigabe der Sperren
●
strenge Ausführung / strenge Zwei-Phasen-Sperre
➔
●
Hierbei muss eine Transaktion entweder fertiggestellt oder
abgebrochen sein (keine dirty reads möglich)
Granularität sollte kleinstmöglich sein
Oliver Lemm
Seite 3/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Sperrtypen
●
Viele Leser & Ein Schreiber
●
Lese- & Schreibsperren
Oliver Lemm
Seite 4/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Deadlocks
●
Um nun bei Transaktionen diese Deadlocks darzustellen,
werden sog. Wartegraphen benutzt.
➔
●
●
Deadlocks kann man daran erkennen,
das sich Schleifen in diesem
Graphen befinden
Ist nun eine Schleife in einem solchen Graphen entdeckt,
kann man anhand von Faktoren wie (Alter, Anzahl der
Schleifen) entscheiden welche Transaktion nun abgebrochen
werden muss
Um Deadlocks aufheben kann man Timeouts verwenden
Oliver Lemm
Seite 5/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Zwei-Versionen-Sperre
●
●
●
Mehrere Transaktionen können auf einem Objekt arbeiten, da
Sperren erst beim Festschreiben gesetzt werden
Transaktionen müssen beim Festschreiben warten oder
werden zurückgewiesen
3 Typen von Sperren existieren
➔
Lesesperre: Wird vor read-Operation gesetzt
➔
Schreibsperre: Wird vor write Operation gesetzt
➔
Festschreibsperre:
Versucht Schreibin Festschreibsp.
umzuwandeln
Oliver Lemm
Seite 6/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Hierarchische Sperren
●
●
●
Bei diesem Sperrschemata werden Sperren mit
unterschiedlicher Granularität versehen
Es werden Operationen geschachtelt, so dass
untergeordnete Operationen automatisch gesperrt werden
falls die drüberliegende Operation gesperrt wird
Dadurch wird die Anzahl der
Sperren vermindert, da sie von
der Größe her passend zur
Operation sind
Oliver Lemm
Seite 7/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Zeitstempel-Reihenfolge
➔
➔
➔
➔
➔
➔
Jede Operation wird direkt ausgewertet oder abgebrochen
Jede Transaktion bekommt einen Zeitstempel, mit welchem die
Operationskonflikte gelöst werden
Objekte können nur beschrieben oder gelesen werden, wenn sie
von einer früheren Operation gelesen oder geschrieben wurden.
Es gibt nur 1 Version und auch nur 1 Zugriff gleichzeitig, aber
jede Transaktion besitzt eine eigene Versuchsversion
write-Operationen werden sofort ausgeführt, aber die readOperation muss auf vorige Transaktionen warten
Durch diese strenge Abfolge können keine Deadlocks auftreten
Beim Festschreiben einer Transaktion werden Zeitstempel und
Wert auf das Objekt übertragen
Oliver Lemm
Seite 8/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Zeitstempel-Reihenfolge
nach Bernstein (1980)
➔
➔
➔
➔
➔
write-Operationen werden in Versuchsversionen festgehalten, die
für andere Transaktionen nicht sichtbar sind
Jedes Objekt hat einen Lese- & Schreib-Zeitstempel und es
können mehrere Versuchsversionen existieren, die auch jeweils
Lese- oder Schreib-Zeitstempel besitzen.
Um Daten nicht zu verlieren werden auch die Versuchsversionen
permanent gespeichert
Zeitstempel-Reihenfolge
ist anfällig gegenüber
Abstürzen & Neustarts
Schreiben ist erfolgreich,
wenn der Lese-Zeitstempel niedriger ist
Oliver Lemm
Seite 9/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
II. Übersicht der Implementierung
II.Implementierung
➔
Art der Implementierung & Überblick der Klassen
➔
Transaktion und deren Verwaltung
➔
Sperren und Sperrverwaltung
➔
Objekte und Aktionen
Oliver Lemm
Seite 10/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Art der Implementierung
●
●
●
Programm ist lokal implementiert um bei Darstellung
und Entwicklung weniger Fehleranfällig zu sein
Die lokale Implementierung schränkt die zu erklärende
Funktionsweise nicht ein
➔
Verwendung von Threads bei den Transaktionen
➔
Evtl. Verzögerung bei Transaktionen im Programm einstellbar
Lokale Implementierung verbessert die
Problemdarstellung durch Visualisierung aller
Transaktionen an einem Rechner
Oliver Lemm
Seite 11/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Struktur des Programms
●
Package „default“
➔
●
Package „actions“
➔
●
Action, ActionOnLAObject
Package „objects“
➔
●
Main, MainGUI, TimeCounter, Transaction, TransID
Konto, LAObject, LockableObject
Package „locks“
➔
Lock, Lockmanager, LockType
Oliver Lemm
Seite 12/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Implementierung der Transaktionsverwaltung
●
Zur Verwaltung der Transaktionen dient die Klasse
Main.java als eine Art Transaktionsmanager
➔
➔
➔
Zum Erzeugen der Transaktionen steht die Methode
makeTransactions(int count)
zur Verfügung
Weiterhin werden die als Thread implementierten
Transaktionen dort gestartet und durch die Methode
addAction(int transNumber, Action action)
können der jeweiligen Transaktion Aktionen hinzugefügt
werden
Über startTransaction(int transNumber)
können die Threads gestartet werden
Oliver Lemm
Seite 13/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Implementierung der Transaktionen
●
Die Transaktionen bestehen aus der Transaktion
(Transaction.java) selber und einer Transaktions-ID
(TransID.java)
➔
➔
➔
Für das Hinzufügen von Aktionen steht die Methode
addAction(Action) zur Verfügung
In der run-Methode, überschrieben von der abgeleiteten Klasse
Thread, werden alle Aktionen nacheinander durchgeführt
Und zuletzt existiert als wichtige „setter“ Methode noch
setStartDelay(double startDelay) in der evtl. eine
Verzögerung eingestellt werden kann
Oliver Lemm
Seite 14/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Default Package
Oliver Lemm
Seite 15/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Implementierung der Sperrverwaltung
●
Die Verwaltung der Sperren ist in der Klasse
LockManager.java organisiert und die Sperren liegen in
einem HashTable
➔
➔
➔
Jedes Objekt dient dabei im Hashtable als Key und der Wert ist
die Sperre selber
Die Methode setLock(LAObject, TransID, LockType) erzeugt
entweder eine Sperre (wenn noch keine vorhanden) oder nimmt
die auf dem Objekt vorhandene Sperre und fragt in beiden Fällen
die Methode aquire(TransID, LockType) der Klasse Lock an
Die Methode unlock(TransID) löst eine Sperre, indem sie diese
Transaktion aus dem Vector holders der Sperre entfernt
Oliver Lemm
Seite 16/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Implementierung der Sperren
●
Die Sperren sind durch die Klasse Lock dargestellt und
werden durch die Klasse LockType spezifiziert
➔
➔
➔
➔
Bei Erstellung einer Sperre wird ein Vector holders erzeugt
indem die Halter aller Sperren vorhanden sind
Um eine Sperre zu setzen wird die Methode aquire angefragt,
die entweder die Anfrage warten lässt (falls Sperre nicht
setzbar) oder die entsprechende Sperre setzt und den Vector
holders aktualisiert
In der Methode lockGranted(LockType, TransID) wird
überprüft ob die Sperre gesetzt werden kann
Damit nur 1 Anfrage gleichzeitig bearbeitet wird ist die
Methode synchronized
Oliver Lemm
Seite 17/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Package locks
Oliver Lemm
Seite 18/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Implementierung der Objekte
●
Die Objekte sind im Package objects enthalten und
implementieren das Interface LockableObject.java und
die abstrakte Klasse LAObject.java
➔
➔
Durch das Interface sind setter und getter für Name und Werte
der Objekte vorgegeben
Im implementierten Beispiel ist eine Klasse Konto.java erstellt
worden, die von der Klasse LAObject.java abgeleitet wurde
und das Interface LockableObject.java implementiert.
Oliver Lemm
Seite 19/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Package objects
Oliver Lemm
Seite 20/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Implementierung der Aktionen
●
Die Aktionen (Action.java) sind ähnlich wie die Objekte,
per Interface (ActionOnLAObject.java) in den getter und
setter Methoden vordefiniert vordefiniert
➔
➔
Die Aktion hat dabei als Parameter beim instanzieren ein
Objekt, einen Aktionentype, eine evtl. Verzögerung und (wenn
es ein schreibende Aktion ist) einen Änderungsfaktor
mitbekommen
Die Aktion wird je nach vordefinierten festen Werten
ausgewählt und dann dementsprechend bei Aufruf der
Methode makeAction() auf dem jeweiligen Objekt
durchgeführt
Oliver Lemm
Seite 21/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Package actions
Oliver Lemm
Seite 22/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Weitere Implementierungsmöglichkeiten
●
Durch die Objektstruktur ist es möglich sowohl andere
Objekte (als nur Konten) als auch andere Arten von
Sperren sowie einen anderen SperrenManager zu
integrieren
➔
➔
Dennoch muss beachtet werden, das sowohl die ZweiVersionen Sperre als auch die Zeitstempel Methoden mit
Versuchsversionen arbeiten und diese Funktion noch
mitimplementiert werden muss
Um eine realere Umgebung zu simulieren könnte man
einerseits die Anforderung der Sperren verteilt implementieren
oder andererseits Faktoren einbauen die einen Absturz oder
ähnliche Problematiken simulieren
Oliver Lemm
Seite 23/24
14.12.2004
Pessimistische Sperrverfahren für Transaktionen
Programmvorführung
Vorstellung des Beispielprogramms
Oliver Lemm
Seite 24/24
14.12.2004
Herunterladen