Kapitel 2 ¨Uberblick ARIES

Werbung
Hauptseminar Database Hall of Fame“
”
C. Mohan
Recovery und Transaktionen
Christopher Lewis
11. Dezember 2001
Inhaltsverzeichnis
1 Einleitung
1.1 Zur Person . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
2
2 Überblick ARIES
2.1 Buffer Management . . . . . .
2.2 Write Ahead Logging (WAL)
2.2.1 Datenstrukturen . . .
2.2.2 Logical Logging . . . .
2.2.3 Page-oriented Logging
2.3 Ziele . . . . . . . . . . . . . .
.
.
.
.
.
.
4
4
5
5
6
6
6
.
.
.
.
8
8
10
11
13
4 Zusammenfassung und Ausblick
4.1 Eigenschaften von ARIES . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Implementierungen von ARIES . . . . . . . . . . . . . . . . . . . . . . . .
14
14
15
3 Vorgehen von ARIES
3.1 Normal Processing . . . . . .
3.2 Restart Recovery . . . . . . .
3.3 Ein komplexeres Beispiel . . .
3.4 Erweiterte Problemstellungen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Kapitel 1
Einleitung
Diese Ausarbeitung soll eine Beschreibung des ARIES-Systems liefern, welches sich mit
dem Thema Recovery und Transaktionen in Datenbanksystemen beschäftigt.
Das System ARIES wurde von C. Mohan (et al.) entwickelt.
1.1
Zur Person
C. Mohan ist seit 1981 für IBM tätig und arbeitet dort am Almaden Research Center in
Kalifornien. Seine Haupttätigkeiten sind Recovery und Transaktionsmanagement in Datenbanksystemen. Weiterhin arbeitete er an den Projekten R* und Starburst.
Die hier vorgestellten Thesen zum Transaktionssystem ARIES veröffentlichte er 1992 zusammen mit einigen Kollegen [TODS]. Für seine Arbeit an ARIES erhielt er 1996 den SIGMOD Innovations Award [SIGMOD] der Association for Computing Machinery [ACM]. Im
Jahre 1997 wurde er zum IBM Fellow ernannt, welches die höchste technische Auszeichnung
bei IBM darstellt.
1.2
Motivation
Seit jeher ist effiziente Fehlerbehandlung in Datenbanksystemen ein brisantes Thema. Kommerziell eingesetzte Datenbanken beinhalten eine Fülle an wichtigen Daten, deren Konsistenz von großer Bedeutung ist. Läuft eine Transaktion im laufenden Betrieb auf einen
Fehler oder stürzt sogar das ganze System ab, so ist sehr daran gelegen, möglichst schnell
wieder einen konsistenten Zustand zu erreichen und verlorengegangene Daten wiederherzustellen.
In heutigen Datenbanken werden Daten von einer Großzahl von Benutzern gleichzeitig
eingefügt, verändert oder gelöscht. Deswegen werden Transaktionen nicht sofort für alle
anderen Benutzer sichtbar gemacht, sondern erst, wenn die Transaktion einen zulässigen
Zustand erreicht hat. Tritt vor diesem Commit ein Transaktionsfehler auf, ist die Datenbank
in einem inkonsistenten Zustand und es muss eine entsprechende Behandlung eingeleitet
werden, d.h. alle Änderungen bis zu einem konsistenten Zustand müssen zurückgesetzt
2
KAPITEL 1. EINLEITUNG
3
werden (Undo). Weiterhin ist zu beachten, dass aus Performanzgründen auch bei einem
Commit nicht alle Modifikationen sofort in den Hintergrundspeicher geschrieben werden.
Im Falle eines Systemfehlers vor dem Speichern gehen solche Datenänderungen verloren.
Diese müssen somit wiederhergestellt werden (Redo), um das ACID-Konzept (hier Durability) zu gewährleisten.
Im Folgenden wird zwischen zwei Fällen unterschieden:
• Normal Processing
Im normalen Betrieb läuft eine Transaktion auf einen Fehler und es muss ein sog.
Rollback (= Undo) vorgenommen werden, d.h., alle Aktionen der Transaktion werden
in umgekehrter Reihenfolge rückgängig gemacht, bis ein konsistenter Zustand erreicht
ist (Savepoint oder Begin Transaction, siehe 2.3).
• Restart Recovery
Das gesamte Datenbanksystem ist abgestürzt und muss neu gestartet werden. Hier
ist es besonders wichtig, dass die Daten sich nach diesem Vorgang wieder in einem
zulässigen Zustand befinden und keine Änderungen aus Transaktionen, die diese bereits freigegeben, also committed haben, verloren gegangen sind.
Das Recovery-System hat in diesen Fehlerfällen für die Einhaltung des Transaktionskonzepts zu sorgen. Ein wichtiger Aspekt dabei ist auch der dafür verwendete Zusatzaufwand.
Dieser soll so gering wie möglich ausfallen und insbesondere soll der Parallelitätsgrad (Concurrency) von Transaktionen nicht übermässig reduziert werden.
Kapitel 2
Überblick ARIES
ARIES steht für Algorithm for Recovery and Isolation Exploiting Semantics. Es handelt
sich dabei um eine Transaktions-Recovery-Methode, die das Prinzip des sog. Write-Ahead
Logging (WAL) verwendet. Mit ARIES sind Teil-Rückläufe (Partial Rollbacks) und sehr
feinaufgelöste Sperren (Fine-granularity Locking) möglich.
Im Folgenden sollen einige wichtige Rahmenbedingungen von ARIES diskutiert werden.
2.1
Buffer Management
Der Buffer Manager ist eine Art Schnittstelle zwischen dem Massenspeicher und dem Transaktionssystem. Er besitzt einen Pufferspeicher, in dem logische Seiten zwischengespeichert
werden können. Wird eine Seite von einer Transaktion angefordert, sucht der Buffer Manager in seinem Puffer, ob diese dort bereits vorhanden ist. Ist dies nicht der Fall, wird ein
neuer Platz (Slot) freigemacht und die Seite dorthin eingelesen.
Will eine Transaktion schreibend auf eine Seite im Puffer zugreifen, muss sie das FixAttribut setzen, was eine entsprechende Sperre aktiviert. Wurde eine Seite im Puffer verändert, haben sich diese Änderungen aber noch nicht im Hintergrundspeicher auf der entsprechenden Seite niedergeschlagen, so wird diese Seite als dirty (schmutzig) bezeichnet.
Der Buffer Manager schreibt im Hintergrund solche dirty pages in den Hintergrundspeicher.
Dies setzt aber voraus, dass diese Seiten nicht mehr gesperrt sind, also das Fix-Attribut
nicht mehr gesetzt ist und entsprechende Latches (extrem kurzzeitige Sperren auf physikalischer Ebene) entfernt wurden.
Es existieren verschiedene Strategien für dieses Speichern von Seiten im Hintergrund. Bei
der steal policy können Seiten bereits persistent gespeichert werden, bevor die entsprechende Transaktion committed hat. Dies kann bedeuten, dass bei der Recovery einige UndoVorgänge auf dem Hintergrundspeicher vorgenommen werden müssen. Können umgekehrt
Transaktionen erst committen, wenn alle Änderungen gespeichert sind, spricht man von
force policy. In diesem Fall müssen beim Redo keine Änderungen von Transaktionen wiederholt werden, die bereits committed haben.
4
KAPITEL 2. ÜBERBLICK ARIES
2.2
5
Write Ahead Logging (WAL)
WAL bedeutet, dass alle Änderungen (Updates) auf dem Hintergrundspeicher vor ihrer
Durchführung in einem Log protokolliert werden; solche Log Records müssen vor dem entsprechenden Update persistent gespeichert werden. Jedes Log Record ist über seine Log
Sequence Number (LSN) eindeutig referenzierbar. Ein Log wird bei der Recovery verwendet, um Aufschluss über die vorzunehmenden Undo- und Redo-Aktionen zu bekommen.
ARIES setzt voraus, dass der Buffer-Manager (siehe Abschnitt 2.1) nach dem WALProtokoll verfährt. Wurde das zur aktuellen Seite gehörige Log Record noch nicht gespeichert, so müssen zunächst alle vorherigen Einträge im Log inklusive diesem in den
Speicher geschrieben werden (Forcing).
WAL erlaubt, dass geänderte Seiten an dieselbe Stelle im Hintergrundspeicher zurückgeschrieben werden, von der sie gelesen wurden (sog. in-place updating). Im Unterschied
dazu müssen bei der Shadow-Page-Technik Seiten immer an einer anderen Stelle gespeichert werden als dort, wo sie gelesen wurden, um die alte Version für das Undo verwenden
zu können. Dies ist bei WAL nicht nötig, da die Undo-Information dem Log entnommen
werden kann.
2.2.1
Datenstrukturen
An dieser Stelle soll ein wenig auf die Datenstruktur von Records, Seiten und gewissen
Tabellen eingegangen werden.
Am interessantesten gestaltet sich der Aufbau eines Log Records. In ihm ist nicht nur
die reine Re/Undo-Information gespeichert, sondern auch u.a. seine log sequence number
(LSN). Weiterhin gibt das Record Auskunft über seinen Typ (Type, z.B. ’update’ oder
’compensation’), die Transaktion, die dieses Record erstellt hat (TransID), und das vorhergehende log record (PrevLSN).
Handelt es sich um ein Log Record für eine Undo-Operation, so wird in dem Feld UndoNextLSN die LSN der vorherigen Änderung gespeichert (siehe dazu auch Abschnitt 3.1
auf Seite 9). Mittels dem Feld PageID kann die zugehörige Seite ermittelt werden, die von
diesem Record betroffen ist.
Umgekehrt speichert jede Seite im Feld page LSN die Adresse desjenigen Log Records, das
als letztes die Seite verändert hat.
Bei der Restart Recovery wird eine Tabelle verwendet, in der alle aktiven Transaktionen
gespeichert werden (Transaction Table). Für jedes Element in dieser Tabelle werden einige
Daten gespeichert, wie Zustand (State), das letzte Log Record (LastLSN) und das nächste
zu verarbeitende Record (UndoNextLSN).
Auch die bereits in 2.1 erwähnten dirty pages werden in einer Tabelle aufgelistet. Diese
gibt Auskunft über Updates auf Seiten im Puffer, die noch nicht gespeichert sind.
KAPITEL 2. ÜBERBLICK ARIES
2.2.2
6
Logical Logging
Auf der logischen Ebene werden Operationen auf Tupeln (Records) betrachtet, beispielsweise
add tuple t
set x (x+5)
Dies ist beim Redo nicht unbedingt von Vorteil: So werden von einem Update meist mehrere
Seiten berührt; welche dies sind, muss durch eine Untersuchung des Index-Baums ermittelt
werden. Außerdem werden hier bei einem Redo möglicherweise andere Seiten verändert als
beim ursprünglichen Update. Dies kann zu Problemen und erhöhtem Overhead führen.
Vorteil des Logical Logging ist, dass eine Transaktion Updates, die von einer anderen durchgeführt wurden, aber noch nicht freigegeben sind, in eine andere Seite schreiben kann. Dies
bewirkt einen hohen Parallelitätsgrad, da sonst die zweite Transaktion auf die erste warten
müsste, bis diese ihre Änderungen committed hat.
2.2.3
Page-oriented Logging
Hier werden die Änderungen auf Seitenebene protokolliert. Beim Redo muss demnach immer dieselbe Seite modifiziert werden wie bei der ursprünglichen Operation. Dies ermöglicht
eine höhere Datenunabhängigkeit.
Page-oriented Undo bedeutet, Log Records speichern den Inhalt der Seite vor und nach
der Änderung (sog. before- und after-images). Dies kann zu erhöhtem Speicherplatzbedarf
führen.
Neben der gerade vorgestellten Trennung (logical/page-oriented logging) gibt es noch ein
weiteres Konzept des Loggings, nämlich die Betrachtung von value/state (Änderungen von
Werten/Zuständen) und operation logging (Änderung auf Operationen-Ebene). Während
page-oriented logging beide Vorgehensweisen unterstützt, bedingt logical logging das Prinzip des operation logging, da nur dies eine effektive Protokollierung auf logischer Ebene
zur Verfügung stellt. Dies bedeutet, dass nicht alle Änderungen explizit gespeichert werden
müssen (z.B. die Menge des freien Speichers in der Seite); auf diese Weise kann Speicherplatz für das Log gespart werden.
2.3
Ziele
Nachfolgend werden kurz die Ziele der ARIES-Methode beschrieben.
Um die Fehleranfälligkeit zu senken, soll der in ARIES vorgestellte Algorithmus möglichst
einfach sein.
Werden außer Wert- und Zustandsänderungen auch Operationen protokolliert, so erlaubt
dies sehr mächtige Sperrverfahren. So können zwei Transaktionen die gleichen Daten modifizieren, ohne dass eine der beiden diese vorher committen müsste, wenn dies semantisch
kompatibel ist (z.B. bei In- oder Dekrement). Diese Methode (operation logging) wird
KAPITEL 2. ÜBERBLICK ARIES
7
in Abschnitt 2.2.3 beschrieben.
Um eine höhere Concurrency zu erreichen, sollen möglichst feine (d.h. auf sehr niedriger
Ebene) und kurzzeitige Sperren verfügbar sein (fine-granularity locking).
Neben einer flexiblen Puffer- und Speicherverwaltung (d.h., ARIES soll das Buffer
Management nicht beeinflussen) ist ein weiteres Ziel die Möglichkeit des Partial Rollback, also ein Rückgängigmachen nur eines Teils der letzten Aktionen. Hierbei werden
sog. Savepoints innerhalb der Transaktionen eingerichtet. Ein partial rollback führt dann
das Undo nur bis zum letzten Savepoint aus.
Wie bereits in 2.2.3 erwähnt, spielt die Unabhängigkeit (recovery independence) bei
der Wiederherstellung eine große Rolle. Das Re/Undo eines Objekts (Seiten bzw. Tupel)
soll nach Möglichkeit keinen Einfluss auf andere Objekte haben.
Ein letztes Ziel ist minimaler Overhead. Die Größe der Log-Dateien und des verbrauchten Speichers soll so klein wie möglich sein.
Diese Ziele stehen teilweise im Widerspruch zueinander. Es war die Herausforderung bei
der Entwicklung von ARIES, hier einen akzeptablen Kompromiss zu erreichen.
Kapitel 3
Vorgehen von ARIES
Dieses Kapitel beschäftigt sich mit den bereits vorgestellten Szenarien, die für ARIES
interessant sind, nämlich Transaktionsmanagement und Fehlerbehandlung (Rollback) im
normalen Datenbankbetrieb (Normal Processing) auf der einen Seite und das Verhalten
nach einem Absturz (Restart Recovery Processing) auf der anderen. Obwohl Recovery ein
sehr komplexes Thema darstellt, ist der Hauptalgorithmus von ARIES sehr einfach gehalten.
Alle Änderungen an der Datenbank werden in einer Datei protokolliert (geloggt); auch
wenn eine Modifikation rückgängig gemacht wird, so ist hierfür ebenfalls ein Eintrag vorzunehmen. Solche Records werden compensation log records (CLRs) genannt; sie können
zwar wiederholt ausgeführt werden, werden aber beim Undo gesondert behandelt.
3.1
Normal Processing
Sämtliche Updates auf Records werden auf der zugehörigen Seite im Buffer Manager durchgeführt. Nachdem das Record gesperrt wurde, wird die Seite vom Buffer Manager angefordert, das Fix-Attribut gesetzt, die Änderung dort durchgeführt und anschließend die
Sperre wieder aufgehoben. Wie in 2.2 erwähnt, wird zur Einhaltung des WAL-Protokolls
erst ein Log Record geschrieben, bevor die Seite gespeichert wird.
ARIES unterstützt das Prinzip des Partial Rollback, d.h. ein Undo nur bis zu einem bestimmten Punkt (Savepoint) anstatt die komplette Transaktion rückgängig zu machen.
Einige Datenbanksysteme (z.B. IBM DB2) nutzen dieses Konzept und setzen vor jeder
schreibenden Aktion einen Savepoint, um die Atomizität, die vom ACID-Verfahren gefordert wird, auf Anweisungsebene zu gewährleisten.
Abbildung 3.1 zeigt den Ablauf eines Partial Rollback in einer Transaktion mit 3 Aktionen. Nach der Ausführung der ersten Aktion wird ein Savepoint gesetzt, die Änderung also
in den Hintergrundspeicher geschrieben. Nach der dritten Aktion tritt ein Fehler auf (z.B.
eine Integrity-Constraints-Verletzung o.ä.). Die letzten beiden Aktionen (2 und 3) müssen
in umgekehrter Reihenfolge rückgängig gemacht werden. Für jedes Undo wird ein entsprechendes CLR (3’ und 2’) im Log angefügt. In solchen CLRs wird außerdem ein Eintrag
8
KAPITEL 3. VORGEHEN VON ARIES
9
2
1
1
SP
2
3
2‘
3‘
2
3
3‘
T
2‘
2
T
Gespeicherte Änderung
Nicht gespeicherte Änderung
SP Savepoint
Transaktionsfehler
I‘
Undo für Aktion I
Abbildung 3.1: Partial Rollback nach Inkonsistenz
(UndoNextLSN) vorgenommen, in dem die Adresse des Vorgängers des durch dieses CLR
zurückgesetzten Records gespeichert ist, um in einem möglichen weiteren Undo-Fall nachvollziehen zu können, welche Aktionen nicht noch einmal zurückgesetzt werden müssen.
Da wir mit Logical Undo arbeiten, müssen die Undo-Operationen nicht das exakte Gegenteil der Original-Aktion sein, denn in dem entsprechenden CLR ist ja die vorzunehmende
Undo-Aktion vermerkt.
Allgemein kann beim Undo im normalen Datenbankbetrieb (anders als bei der Restart
Recovery, siehe 3.2) davon ausgegangen werden, dass die Änderungen, die zurückgesetzt
werden, auch wirklich durchgeführt wurden, d.h. ein früheres Update ist immer auf einer
Seite vorhanden (zumindest im Puffer).
Nach dem Undo der Aktionen 3 und 2 kann an dieser Stelle die Transaktion wieder fortgesetzt werden (also mit Aktion 2).
Tritt jetzt wieder ein Fehler auf, so müssen bereits rückgängig gemachte Aktionen und
deren CLRs nicht noch einmal zurückgesetzt werden; aus dem Feld UndoNextLSN eines
CLRs kann die nächste Aktion ermittelt werden, deren Änderungen wirksam sind und deshalb aufgehoben werden müssen.
Abbildung 3.2 zeigt einen solchen Fall, bei dem gleich nach der ersten Änderung ein Fehler
auftritt.
KAPITEL 3. VORGEHEN VON ARIES
1
T
UndoNextLSN
1‘
10
1
T
1‘
UndoNextLSN
Abbildung 3.2: Erneuter Fehler nach einem Rollback
3.2
Restart Recovery
Bei einem Systemneustart nach einem Fehler gestaltet sich die Recovery folgendermaßen:
Zunächst wird das Log analysiert und daraus die vorzunehmenden Aktionen ermittelt.
Dieser Analysis Pass beginnt bei der LSN des letzten durchgeführten Checkpoints. Dabei
wird die Tabelle der dirty pages aufgebaut; wird ein Log Record für eine Seite gefunden,
die noch nicht in dieser Tabelle steht, wird sie dort eingefügt und im Feld RecLSN das
aktuelle Log Record gespeichert. Die Transaktionstabelle wird ebenfalls auf den neuesten
Stand gebracht. Weiterhin wird im Feld RedoLSN das Log Record gespeichert, an dem die
nächste Phase beginnen soll.
Daraufhin werden alle Aktionen, deren Änderungen geloggt, aber nicht persistent gespeichert wurden, wiederholt (Redo Pass). Dies geschieht auf Grundlage der soeben erstellten
dirty-pages-Tabelle, die ja Änderungen wiederspiegelt, die noch nicht gespeichert wurden.
Wird dort eine Seite gefunden, bei der die Werte page LSN und RecLSN kleiner als die
LSN des zugehörigen Log Records sind, so wird ein Redo durchgeführt.
Nachdem die Datenbank jetzt wieder auf dem Stand vor dem Fehler ist, müssen bereits
durchgeführte Aktionen verlorengegangener Transaktionen (die also nicht committed haben) wieder rückgängig gemacht werden (Undo Pass). Dies geschieht auf exakt die gleiche
Weise wie bei einem normalen Rollback (siehe Abschnitt 3.1). Als Eingabe fungiert die in
der Analysephase erstellte Transaktionstabelle.
Dies soll nun an einem ähnlichen Beispiel (Abbildung 3.3) verdeutlicht werden:
Als Ausgangssituation nehmen wir an, dass die erste Aktion bereits gespeichert wurde.
Nach der dritten Aktion trat ein Systemfehler auf. Der Analysis Pass stellt fest, dass alle
Aktionen nach der ersten dirty sind. Im Redo Pass werden also die Aktionen 2 und 3 erneut
ausgeführt.
Nun sind wir wieder auf dem Stand vor dem Systemfehler. Es wird erkannt, dass die Transaktion nicht bis zum Ende ausgeführt wurde (also kein Commit gesetzt wurde); also muss
sie zurückgesetzt werden. Dazu werden die Aktionen 3, 2 und 1 (in dieser Reihenfolge)
widerrufen.
Zu beachten ist, dass bei der Restart Recovery im Unterschied zum normalen Rollback
nicht alle Updates notwendigerweise auf den Seiten vorhanden sein müssen. Dies ist der
KAPITEL 3. VORGEHEN VON ARIES
1
11
2
3
S
S
Systemfehler
Redo:
2
Undo:
3‘
3
2‘
1‘
Abbildung 3.3: Restart Processing
Fall, wenn nicht alle Updates wiederholt werden, also kein Repeating History bzw. Redo
ALL durchgeführt wird, und kann zu Problemen führen, wie nachfolgend in Abschnitt 3.3
aufgezeigt wird.
3.3
Ein komplexeres Beispiel
An dieser Stelle soll anhand eines etwas komplexeren Beispiels aufgezeigt werden, warum
ARIES Repeating History vornimmt, also alle noch nicht gespeicherten Änderungen wiederholt, auch wenn die zugehörigen Transaktionen nicht committed haben.
Unsere Ausgangssituation (Abbildung 3.4) besteht aus zwei Transaktionen (T1 und T2),
T1a
T2
T1b
T1
S
CT
LSN: 10
LSN der Seite:
20
30
10
CT
Commit Transaction
Abbildung 3.4: Ausgangssituation des Selective Redo Problems
die auf derselben Seite arbeiten. Nach der ersten Änderung durch T1 (T1a) wird die Seite
gespeichert (LSN 10). Nun führen nacheinander T2 und T1 Änderungen (T2 und T1b, LSN
20 und 30) auf der Seite aus, die aber nicht mehr gespeichert werden können, da davor ein
KAPITEL 3. VORGEHEN VON ARIES
12
Systemfehler auftritt. Vorher setzt T1 aber noch ein commit (CT).
Nun beginnt der Redo Pass (Abbildung 3.5). Würden wir mit Selective Redo arbeiten, al-
Redo:
T1b
LSN:
30
LSN der Seite:
T1c
30
Abbildung 3.5: Der Selective Redo Pass
so nur Transaktionen wiederherstellen, die committed haben, würde nur T1b durchgeführt
(T1a ist ja bereits im Hintergrundspeicher), nicht aber T2, da das bei dieser Transaktion
ja nicht der Fall ist. Die LSN der Seite wird nun auf die LSN des letzten Log Records (30)
gesetzt.
Im darauffolgenden Undo Pass (Abbildung 3.6) werden alle Änderungen zurückgesetzt,
Undo:
T2
LSN:
20
LSN der Seite:
30
Abbildung 3.6: Undo Pass nach einem Selective Redo
deren LSN kleiner als die LSN der Seite (momentan 30) ist. In unserem Fall also auch die
Änderung von T2, die aber gar nicht durchgeführt wurde. Es ist leicht verständlich, dass
ein solches Szenario zu unvorhergesehenen Inkonsistenzen führen kann.
Wird im Gegensatz dazu die Repeating-History-Methode angewandt, wird auch die Änderung von T2 wiederholt. Dies führt dazu, dass im Undo Pass diese Änderung ohne Probleme
wieder zurückgenommen werden kann.
Auch eine Umkehrung der Reihenfolge von Redo und Undo Pass löst dieses Problem nicht.
Hier werden zwar keine unnötigen Undos durchgeführt, dafür kann es passieren, dass im
Redo Pass schon durchgeführte Änderungen nochmals angestoßen werden.
Nachteil des Redo ALL ist der erhöhte Aufwand bei langen Transaktionen, die abgebrochen
KAPITEL 3. VORGEHEN VON ARIES
13
werden, also nicht committen. Vorteil ist das einfache Undo, da die Analysephase nicht so
kompliziert wird. Bei Selective Redo dagegen muss viel mehr auf die Reihenfolge und die
gegenseitigen Abhängigkeiten von Änderungen geachtet werden.
3.4
Erweiterte Problemstellungen
ARIES stellt wenige Voraussetzungen an die konkrete Implementierung. So ist es möglich,
verschiedene Logs zu führen: Ein Log für beide Passes (Redo/Undo log) oder für jeden
eines (Redo-only, Undo-only logs).
In diesem Zusammenhang gibt es auch verschiedene Strategien zur Speicherung von Änderungen; beim deferred update (verzögerte Änderung) werden Updates vom Buffer Manager
in einer Warteschlange gehalten, bis sichergestellt ist, dass die zugehörige Transaktion committet. Dies impliziert, dass keine steal policy angewendet werden darf. Vorteil ist hier, dass
keine Undos bei der Restart Recovery nötig sind, da alle nicht committeten Updates nicht
persistent gespeichert wurden.
Im Gegensatz dazu sind beim immediate update Undo-Vorgänge nötig, da hier alle Änderungen durch die steal policy gehandhabt werden. Ein Vorteil ist hier die bessere Lastverteilung auf dem Buffer Manager.
In den vorausgegangenen Abschnitten wurde aus Gründen der Vereinfachung davon ausgegangen, dass für jede Operation nur ein Log Record benötigt wird. Dies ist in der Praxis meist nicht der Fall. Dennoch kann das vorgestellte Konzept relativ einfach an diese
geänderten Gegebenheiten angepasst werden; ARIES gibt diese Einschränkung auch nicht.
Beim Thema Effizienz soll noch einmal das Konzept der Unabhängigkeit aufgegriffen werden. Diese wird am einfachsten durch page-oriented redo sichergestellt, da in diesem Fall
nur einzelne Seiten geändert werden. Bei logical redo kann davon nicht ausgegangen werden. Hier ist es also möglich, dass ein Redo Daten anderer Transaktionen verändert, was
zu höhrem Aufwand führt. Analog wird logical undo dem seitenweisen Rückgängigmachen
vorgezogen, um mehr Parallelität von Transaktionen zu erreichen.
Ein effizientes Redo wird durch möglichst hohe Parallelität (mehrere gleichzeitige Vorgänge
z.B. bei Multiprozessorsystemen) erreicht. Beim Undo sorgt eine hohe Concurrency (mehrere Transaktionen gleichzeitig) für diese Effizienz.
Kapitel 4
Zusammenfassung und Ausblick
Abschließend sollen in diesem Kapitel die Hauptattribute und Vorteile von ARIES vorgestellt werden sowie eine Übersicht über reale Systeme, in denen die hier diskutierten
Vorgehensweisen implementiert wurden.
4.1
Eigenschaften von ARIES
Wir möchten hier eine kleine Auswahl der wichtigsten Attribute, die ARIES besitzt, vorstellen.
• Unterstützung verschiedener Granularitäten
Sowohl das Setzen von Sperren als auch die Verwaltung gleichzeitig aktiver Transaktionen lassen sich auf mehreren Ebenen vornehmen.
• Flexibles Puffermanagement
ARIES setzt keine bestimmte Strategie für die Speicherverwaltung für den Buffer
Manager voraus. Dies ist der konkreten Implementierung vorbehalten. Beispiele sind
die steal policy, bei der dirty pages schon vor dem Commit gespeichert werden können,
oder die no-force policy, bei der umgekehrt nicht alle dirty pages gespeichert werden
müssen, damit die Transaktion committen darf.
• Undo-Aktionen müssen nicht das exakte Gegenteil der ursprünglichen Operation sein
Dies wird durch das Konzept der Compensation Log Records (CLRs) sichergestellt,
wie in Abschnitt 3 bereits beschrieben.
• Operation Logging wird unterstützt
Protokolleinträge können auf logischer Ebene vorgenommen werden. Dies ermöglicht
eine Einsparung beim Speicherplatzbedarf der Log Records, da nur die Änderungen
und nicht komplette Vorher/Nachher- Abbilder (bzw. Information über den freien
Speicher) einer Seite gespeichert werden müssen.
14
KAPITEL 4. ZUSAMMENFASSUNG UND AUSBLICK
15
• Mehrere Transaktionen können gleichzeitig auf Seiten zugreifen
Bis auf die kurze Zeitspanne während einer Latch-Sperre, in der auf Seiten physikalisch zugegriffen wird, können Transaktionen zeitgleich auf den Seiten arbeiten.
• Keine Sperren während der Rollback-Phase
Da bei der Restart Recovery das Transaktionssystem noch nicht wieder gestartet
wurde, können Änderungen rückgängig gemacht werden, ohne Sperren setzen zu
müssen. Dies führt dazu, dass auch keine Deadlocks entstehen können. Diese können
auch beim Rollback im Normal Processing nicht auftreten, da alle Sperren für Undos
bereits von der ursprünglichen Operation gesetzt wurden.
• CLRs brauchen nur Redo-Information
Da Änderungen durch CLRs nicht rückgängig gemacht werden, muss diese Information auch nicht gespeichert werden.
• LSN-Konzept
Mithilfe der Log Sequence Numbers (LSN) können Transaktionsabläufe exakt wiederholt werden (Repeating History). Dies erlaubt Sperren auf Record-Ebene und effektives Speichermanagement.
• CLRs werden verkettet
Mittels des UndoNextLSN-Felds kann von einem Record zum nächsten gesprungen
werden, ohne CLRs rückgängig machen zu müssen.
4.2
Implementierungen von ARIES
Wie erwähnt, stellt ARIES nur theoretische Voraussetzungen vor. Im Folgenden sollen
einige Systeme aufgelistet werden, bei denen die hier vorgestellten Konzepte ganz oder
teilweise implementiert wurden:
• Starburst/Quicksilver, IBM
• EXODUS/Gamma, Universität Wisconsin
• OS/2 Extended Edition Database Manager, IBM
• Workstation Data Save Facility, IBM
• DB2 Version 2, IBM (→ Repeating History)
• SQL Server, Microsoft
• Windows NT File System (NTFS), Microsoft
• Lotus Domino, IBM
Eine ausführlichere Liste ist unter [impact] zu finden.
Literaturverzeichnis
[TODS] C. Mohan, Donald J. Haderle, Bruce G. Lindsay, Hamid Pirahesh, Peter Schwarz:
ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and
Partial Rollbacks Using Write-Ahead Logging.
TODS 17(1): 94-162 (1992)
[impact] C. Mohan, Impact of ARIES Family of Locking and Recovery Algorithms
http://www.almaden.ibm.com/u/mohan/ARIES Impact.html
[ACM] Association for Computing Machinery
http://www.acm.org
[SIGMOD] SIGMOD Innovation Award
http://www.acm.org/sigmod/sigmodinfo/awards.html
16
Herunterladen