7. Transaktionsverwaltung

Werbung
7. Transaktionsverwaltung
Motivation
§ Transaktionen erlauben „Bündelung“ von Operationen
und gelten als wichtigster Beitrag des Bereichs
Datenbanken zur Informatik; sie werden heute auch
außerhalb von Datenbanksystemen z.B. in
Betriebssystemen eingesetzt
§ Jim Gray hat 1998 u.a. für seine Beiträge
zur Transaktionsverwaltung den
A. M. Turing Award gewonnen
Quelle: http://research.microsoft.com
Datenbanken / Kapitel 7: Transaktionsverwaltung
2
Inhalt
§ 7.1 Transaktionsbegriff
§ 7.2 Transaktionen in SQL
§ 7.3 Fehlerbehandlung
§ 7.4 Mehrbenutzerbetrieb
Datenbanken / Kapitel 7: Transaktionsverwaltung
3
7.1 Transaktionsbegriff
§ Transaktion ist eine logisch zusammenhängende Folge
von Operationen, die ohne Einflüsse anderer zeitgleich
verarbeiteter Transaktionen und ohne Fehler
ausgeführt werden soll
Datenbanken / Kapitel 7: Transaktionsverwaltung
4
Banküberweisung als Beispiel
§ Beispiel: Überweisung von 50€ von Konto A nach Konto B
1
2
3
UPDATE Konten
SET KontoStand = KontoStand - 50
WHERE KontoName = ’A ’
4
5
6
7
UPDATE Konten
SET KontoStand = KontoStand + 50
WHERE KontoName = ’B ’
Datenbanken / Kapitel 7: Transaktionsverwaltung
5
Banküberweisung als Beispiel
§ Beispiel: Überweisung von 50€ von Konto A nach Konto B
1) a = read(A) Lese Kontostand von Konto A in Variable a
2) a = a – 50 Reduziere den Wert von a um 50
3) write(A,a) Schreibe neuen Kontostand von A
4) b = read(B) Lese Kontostand von Konto B in Variable b
5) b = b + 50 Erhöhe den Wert von b um 50
6) write(B,b) Schreibe neuen Kontostand von B
§ Was passiert, wenn der Strom ausfällt?
Datenbanken / Kapitel 7: Transaktionsverwaltung
6
Transaktionsanfang und Transaktionsende
§ Wie können wir mehrere Operationen zusammenfassen?
§ begin of transaction (bot)
markiert den Anfang einer Transaktion
§ commit
markiert das Ende einer erfolgreichen Transaktion,
deren Änderungen festgeschrieben werden sollen
§ rollback
markiert das Ende einer erfolglosen Transaktion,
deren Änderungen rückgängig zu machen sind
Datenbanken / Kapitel 7: Transaktionsverwaltung
7
Banküberweisung als Beispiel
§ Beispiel: Überweisung von 50€ von Konto A nach Konto B
1) begin of transaction
2) a = read(A) Lese Kontostand von Konto A in Variable a
3) a = a – 50 Reduziere den Wert von a um 50
4) write(A,a) Schreibe neuen Kontostand von A
5) b = read(B) Lese Kontostand von Konto B in Variable b
6) b = b + 50 Erhöhe den Wert von b um 50
7) write(B,b) Schreibe neuen Kontostand von B
8) commit
Datenbanken / Kapitel 7: Transaktionsverwaltung
8
Eigenschaften von Transaktionen
§ Transaktionen sollen die folgenden Eigenschaften haben
§ Atomicity (Atomarität)
§ Consistency (Konsistenz/Integrität)
§ Isolation (Isolation)
§ Durability (Dauerhaftigkeit)
§ Datenbanksysteme müssen so implementiert werden,
dass diese sogenannten ACID-Eigenschaften
sichergestellt werden
Datenbanken / Kapitel 7: Transaktionsverwaltung
9
Eigenschaften von Transaktionen
§ Atomicity (Atomarität): Entweder werden alle Änderungen
der Transaktion in der Datenbank festgeschrieben
oder gar keine („ganz oder gar nicht“)
§ Beispiel: Werden die 50€ von Konto A abgebucht, so
müssen sie auch Konto B gutgeschrieben werden;
ein „Verlust“ der 50€ ist ausgeschlossen. Fällt bspw. der
Strom zwischen den beiden Buchungsvorgängen aus, so
muss bei Wiederanlauf des RDBMS die Abbuchung von
Konto A automatisch rückgängig gemacht werden.
Datenbanken / Kapitel 7: Transaktionsverwaltung
10
Eigenschaften von Transaktionen
§ Consistency (Konsistenz): Die Transaktion hinterlässt die
Datenbank in einem konsistenten Zustand gemäß der
definierten Integritätsbedingungen; andernfalls muss
die Transaktion zurückgesetzt werden
§ Beispiel: Eine Integritätsbedingung könnte sein, dass kein
Konto seinen Kreditrahmen überschreiten darf; wird diese
Konsistenzbedingung für A verletzt, darf die Überweisung
nicht durchgeführt werden
Datenbanken / Kapitel 7: Transaktionsverwaltung
11
Eigenschaften von Transaktionen
§ Isolation (Isolation): Die Transaktion muss so auf der
Datenbank ausgeführt werden, als wäre sie die einzige
Transaktion, d.h. es darf keine Wechselwirkungen mit
anderen zeitgleich ausgeführten Transaktionen geben
§ Beispiel: Kontostand von Konto A darf nicht geschrieben
werden, wenn er zwischenzeitlich durch eine andere
Transaktion verändert wurde
Datenbanken / Kapitel 7: Transaktionsverwaltung
12
Eigenschaften von Transaktionen
§ Durability (Dauerhaftigkeit): Wird eine Transaktion
erfolgreich abgeschlossen, so müssen ihre
Änderungen dauerhaft in der Datenbank
festgeschrieben sein, d.h. auch nach
einem Fehler noch vorhanden sein
§ Beispiel: Fällt der Strom in der Bank aus, kurz nachdem
unsere Überweisung durchgeführt wurde, müssen
sich die 50€ noch immer auf Konto B befinden
Datenbanken / Kapitel 7: Transaktionsverwaltung
13
Speicherarten in einem Datenbanksystem
Kapazität
GBytes
TBytes
PBytes
Zugriffszeit
Primärspeicher (RAM)
10-9 s (ns)
Sekundärspeicher (HDD/SSD)
Tertiärspeicher (Tape)
Datenbanken / Kapitel 7: Transaktionsverwaltung
10-3 s (ms)
>> s
14
Speicherarten in einem Datenbanksystem
§ Primärspeicher (RAM)
§ hält nur die momentan benötigten Daten
§ ist volatil, d.h. Inhalt nach Neustart verloren
§ Sekundärspeicher (HDD/SSD)
§ hält Daten und Verlaufsprotokoll
§ ist nicht-volatil, d.h. Inhalt nach Neustart noch vorhanden
§ Tertiärspeicher (Band)
§ hält Archivkopie der Daten und Verlaufsprotokoll
§ ist nicht-volatil und langfristig haltbar
Datenbanken / Kapitel 7: Transaktionsverwaltung
15
Fehlerarten
§ Datenbanksystem muss ACID-Eigenschaften bei
verschiedenen Arten von Fehlern sicherstellen
§ Fehler ohne Primärspeicherverlust
(z.B. durch Fehler in der Anwendung)
§ Fehler mit Primärspeicherverlust
(z.B. durch Stromausfall)
§ Fehler mit Sekundärspeicherverlust
(z.B. durch technischen Defekt der Festplatte)
Datenbanken / Kapitel 7: Transaktionsverwaltung
16
Fehlerbehandlung
T1
T2
Zeit
Fehler
§ Fehlerbehandlung muss sicherstellen, dass die Wirkungen
§ der erfolgreich abgeschlossenen Transaktion T1
dauerhaft in übernommen sind
§ der erfolglosen Transaktion T2
rückgängig gemacht werden
Datenbanken / Kapitel 7: Transaktionsverwaltung
17
Fehlerbehandlung
§ Fehlerbehandlung (recovery) stellt einen konsistenten
Zustand der Datenbank nach einem Fehler wieder her
§ Fehler ohne Primärspeicherverlust
können relativ einfach behoben werden
§ Fehler mit Primärspeicherverlust
erfordern die Wiederherstellung eines konsistenten Zustands
aus den gespeicherten Daten und dem Verlaufsprotokoll
§ Fehler mit Hintergrundspeicherverlust
erfordern die Wiederherstellung eines konsistenten Zustands
aus Archivkopie der Daten und dem Verlaufsprotokoll
Datenbanken / Kapitel 7: Transaktionsverwaltung
18
Mehrbenutzerbetrieb
§ Datenbankoperationen greifen meist auf langsame
Ressourcen (z.B. Sekundärspeicher) zu
§ Parallele Ausführung mehrerer Transaktionen führt zu
besserer Auslastung schneller Ressourcen (z.B. CPU)
und insgesamt höherer Leistung des Datenbanksystems
T1
T2
Zeit
Zeit
Datenbanken / Kapitel 7: Transaktionsverwaltung
19
Mehrbenutzerbetrieb
§ Mehrbenutzerbetrieb, d.h. parallele Ausführung mehrerer
Transaktionen, ist wünschenswert, um die Leistung
zu steigern, führt aber zu Problemen:
§ Abhängigkeit von nicht festgeschriebenen Änderungen
z.B. von anderen nebenläufigen Transaktionen
(dirty read)
§ Verlust von Änderungen an den Daten
(lost update)
§ Gelesene Daten zwischenzeitlich verändert
(non-repeatable read & phantom read)
Datenbanken / Kapitel 7: Transaktionsverwaltung
20
Dirty Read
§ Abhängigkeit von nicht festgeschriebenen Änderungen
§ Überweisung von 30€ von Konto A nach Konto B
§ Verzinsung von Konto A mit 1%
T1
1
2
3
4
5
6
7
8
a1 = read(A)
a1 = a1 ≠ 30
write(A, a1 )
b1 = read(B)
rollback
T2
a2 = read(A)
a2 = a2 ú 1.01
write(A, a2 )
§ T2 liest geänderten („dreckigen“) Kontostand von A
Datenbanken / Kapitel 7: Transaktionsverwaltung
21
Lost Update
§ Verlust von Änderungen an den Daten
§ Überweisung von 30€ von Konto A nach Konto B
§ Verzinsung von Konto A mit 1%
T1
1
2
3
4
5
6
7
8
9
a1 = read(A)
a1 = a1 ≠ 30
write(A, a1 )
b1 = read(B)
b1 = b + 30
write(B, b1 )
T2
a2 = read(A)
a2 = a2 ú 1.01
write(A, a2 )
§ T1 überschreibt zwischenzeitliche Änderung durch T2
Datenbanken / Kapitel 7: Transaktionsverwaltung
22
Non-Repeatable Read
§ Nichtwiederholbares Lesen von Daten
§ Liste der überzogenen Konten (soll Konto A beinhalten)
§ Überweisung von Lottogewinn auf Konto A
§ Liste der überzogenen Konten (enthält Konto A nicht mehr)
T1
1
2
3
SELECT * FROM Konten
WHERE KontoStand < 0
SELECT * FROM Konten
WHERE KontoStand < 0
T2
UPDATE Konten
SET KontoStand = KontoStand + 100.000
WHERE Konto = ’A’
§ Konto A wurde zwischenzeitlich verändert und
ist nun nicht mehr im Ergebnis enthalten
Datenbanken / Kapitel 7: Transaktionsverwaltung
23
Phantom Read
§ Nichtwiederholbares Ergebnis durch Phantomdaten
§ Gesamtguthaben über alle Konten
§ Konto C wird eröffnet und 1000€ in bar werden eingezahlt
§ Gesamtguthaben über alle Konten
T1
1
2
3
SELECT SUM(KontoStand) FROM Konten
SELECT SUM(KontoStand) FROM Konten
T2
INSERT INTO Konten (’C’, 1000)
§ Ergebnis der Anfrage von T1 ändert sich, da
zwischenzeitlich andere Daten
hinzugefügt wurden
Datenbanken / Kapitel 7: Transaktionsverwaltung
24
Synchronisation
§ Datenbanksysteme stellen Isolation von Transaktionen im
Mehrbenutzerbetrieb durch Sperrmechanismen sicher
§ Unterschiedliche Arten von Sperren (z.B. Lesesperre)
und Sperrgranulaten (z.B. Datensatz oder Tabelle)
§ Transaktionen werden derart verschachtelt, dass dies
nicht von serieller Ausführung zu unterscheiden ist
§ RDBMSs unterstützten verschiedene Isolationsstufen
zur Auflockerung der Anforderungen bzgl. Isolation
Datenbanken / Kapitel 7: Transaktionsverwaltung
25
7.2 Transaktionen in SQL
§ Transaction Control Language (TCL) als Bestandteil
von SQL stellt Kommandos für Transaktionen bereit
§ BEGIN TRANSACTION <Name der Transaktion>
markiert den Anfang einer benannten Transaktion
(Benennung wird eher selten verwendet)
§ COMMIT <Name der Transaktion>
schreibt die Änderung der Transaktion fest
§ ROLLBACK <Name der Transaktion>
macht Änderungen der Transaktion rückgängig
Datenbanken / Kapitel 7: Transaktionsverwaltung
26
Transaktionen in SQL
§ Transaktionen in SQL enden entweder erfolgreich mit
einem COMMIT oder erfolglos mit einem ROLLBACK
§ Transaktionsanfang ist meist implizit, d.h. eine
Transaktion beginnt mit dem ersten Kommando bzw. dem
ersten Kommando nach einem COMMIT oder ROLLBACK
§ RDBMSs unterstützen AUTOCOMMIT (ON/OFF),
dann wird jedes Kommando als eigene
Transaktion behandelt
Datenbanken / Kapitel 7: Transaktionsverwaltung
27
Savepoints
§ Einige RDBMSs (z.B. MS SQL Server) erlauben zusätzlich
die Markierung sogenannter Savepoints
innerhalb einer Transaktion mittels
1
SAVE TRANSACTION < Name des Savepoints >
§ Transaktion kann dann bis zu einem definierten Savepoint
mittels ROLLBACK zurückgefahren werden
Datenbanken / Kapitel 7: Transaktionsverwaltung
28
Zusammenfassung
§ Transaktionen als logisch zusammenhängende Folge von
Operationen, die ganz oder gar nicht ausgeführt wird
§ ACID-Eigenschaften von Transaktionen
§ Atomicity (Atomarität)
§ Consistency (Integrität/Konsistenz)
§ Isolation (Isolation)
§ Durability (Dauerhaftigkeit)
§ Fehlerbehandlung & Synchronisation zur Wahrung der
ACID-Eigenschaften bei Fehlern und Mehrbenutzerbetrieb
Datenbanken / Kapitel 7: Transaktionsverwaltung
29
Literatur
[1]
A. Kemper und A. Eickler: Datenbanksysteme – Eine
Einführung, De Gruyter Oldenbourg, 2013 (Kapitel 9)
[2]
G. Saake, K.-U. Sattler und A. Heuer:
Datenbanken - Konzepte und Sprachen,
mitp Professional, 2013 (Kapitel 12)
Datenbanken / Kapitel 7: Transaktionsverwaltung
30
Herunterladen