datenbanksystemei - dbis1.github.io

30
Datenbanksysteme I Prof. Dr. Viktor Leis Professur für Datenbanken und Informationssysteme

Upload: others

Post on 26-Oct-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DatenbanksystemeI - dbis1.github.io

Datenbanksysteme I

Prof. Dr. Viktor Leis

Professur für Datenbanken und Informationssysteme

Page 2: DatenbanksystemeI - dbis1.github.io

Transaktionen

Page 3: DatenbanksystemeI - dbis1.github.io

Beispiel für Transaktion (TA)

• Überweise Geld von Konto A nach Konto B:• Lies den Kontostand von A in die Variable a: read(A,a);• Reduziere den Kontostand um EURO 50,–: a := a− 50;• Schreibe den neuen Kontostand in die Datenbasis:write(A,a);

• Lies den Kontostand von B in die Variable b: read(B,b);• Erhöhe den Kontostand um EURO 50,–: b := b+ 50;• Schreibe den neuen Kontostand in die Datenbasis:write(B,b);

1

Page 4: DatenbanksystemeI - dbis1.github.io

Operationen

• begin of transaction (BOT):• Kennzeichnet den Beginn einer Transaktion

• commit:• Erfolgreiche Beendigung einer Transaktion• Dauerhafte Einbringung aller Änderungen in die Datenbasis

• abort:• Selbstabbruch der Transaktion, erfolglose Beendigung• Zurücksetzen der Datenbasis in den Zustand vor Beginnder Transaktion

2

Page 5: DatenbanksystemeI - dbis1.github.io

Systemabsturz

T2

T1

t3t1 t2 Zeitachse

Absturz

• Änderungen der zum Zeitpunkt t3 abgeschlossenen TA T1müssen in der Datenbasis vorhanden sein

• Änderungen der zu t3 noch nicht abgeschlossenen TA T2müssen vollständig aus der Datenbasis entfernt werden(Durchführung von T2 durch Neustart)

3

Page 6: DatenbanksystemeI - dbis1.github.io

ACID

• Transaktionen sollten ACID-Eigenschaften haben• ACID:

• Atomicity• Consistency• Isolation• Durability

4

Page 7: DatenbanksystemeI - dbis1.github.io

ACID (2)

• Atomicity (Atomarität): “alles oder nichts”, d.h. entwederwerden all Operationen einer TA ausgeführt oder keine

• Consistency (Konsistenz): wenn eine TA auf einemkonsistenten Datenbankzustand aufsetzt, ist dieser nachBeendigung der TA immer noch konsistent

• Isolation: nebenläufig ausgeführte Transaktionen dürfenkeine Seiteneffekte aufeinander haben

• Durability (Dauerhaftigkeit): alle mit commitfestgeschriebenen Änderungen müssen bestehen bleiben(selbst bei Systemabsturz)

5

Page 8: DatenbanksystemeI - dbis1.github.io

Transaktionen und SQL

• start transaction oder begin:• Starte Transaktion• Laut SQL Standard nicht explizit nötig• Achtung: In PostgreSQL und viele andere Systemebenutzten standardmäßig “auto-commit”, d.h. jedes SQLStatement wird als eigene Transaktion aufgefasst.

• commit:• Beende Transaktion und schreibe Änderungen fest• funktioniert nur, wenn keine anderen Fehler aufgetretensind (z.B. Konsistenzverletzung durch Transaktion)

• rollback:• Beende Transaktion und setze alle Änderungen zurück• Anders als commit muss DBMS die ”erfolgreiche”Ausführung von rollback immer garantieren können

6

Page 9: DatenbanksystemeI - dbis1.github.io

Transaktionen und SQL(2)

insert into Vorlesungenvalues (5275, ’Kernphysik’, 3, 2141);

insert into Professorenvalues (2141, ’Meitner’, ’C4’, 205);

commit work

• commit nach dem ersten insert könnte nicht erfolgreichdurchgeführt werden, da zu diesem Zeitpunkt referentielleIntegrität verletzt

• In PostgreSQL muss hierzu am Anfang der Transaktion setconstraints all deferred und begin ausgeführt werden.

7

Page 10: DatenbanksystemeI - dbis1.github.io

Arten von Fehlern

• Wichtige Aufgabe eines DBMS ist das Verhindern vonDatenverlust durch Systemabstürze

• Abbruch einer Transaktion (z.B. Softwarefehler in derAnwendung)

• Verlust des Hauptspeichers (z.B. Softwarecrash DBMS oderBetriebssystem)

• Hintergrundspeicher fällt aus (z.B. Festplatte defekt,Datenbankserver explodiert)

8

Page 11: DatenbanksystemeI - dbis1.github.io

Rückblick: DBMS-Puffer

DBMS-Puffer

C'

DA'

.

.

.

Auslagerung

Einlagerung

C

B

PB

PC

DA'

PA

Hintergrundspeicher

9

Page 12: DatenbanksystemeI - dbis1.github.io

Schreiben der Log-Daten

Log-

Archiv

Log-Datei

DB-

ArchivDatenbasis

...

.

.

.

APnAP1

DBMS

PufferDatenbank-

PufferLog-

CodeDBMS-

• Die Log-Information wird zweimal geschrieben• Log-Datei für schnellen Zugriff• Log-Archiv für Redundanz

10

Page 13: DatenbanksystemeI - dbis1.github.io

Recovery

• Die zwei wichtigsten Recovery-Mechanismen sind:• Sicherungspunkte (Backups)• Log-Dateien

11

Page 14: DatenbanksystemeI - dbis1.github.io

Recovery (2)

• Ein Sicherungspunkt ist ein Schnappschuss desDatenbankinhalts zu einem bestimmten Zeitpunkt

• In einer Log-Datei werden alle Änderungen an derDatenbasis mitprotokolliert

• Sicherungspunkte und Log-Dateien sollten nicht auf dergleichen Maschine gespeichert werden

12

Page 15: DatenbanksystemeI - dbis1.github.io

Schreiben der Log-Daten

• Write Ahead Log-Prinzip (WAL-Prinzip)• Bevor eine Transaktion festgeschrieben (committed) wird,müssen alle ”zu ihr gehörenden” Log-Einträgeausgeschrieben werden

• Bevor eine modifizierte Seite ausgelagert werden darf,müssen alle Log-Einträge, die zu dieser Seite gehören, indas temporäre und das Log-Archiv ausgeschrieben werden

13

Page 16: DatenbanksystemeI - dbis1.github.io

Abbruch einer Transaktion

• Kann durch Fehler in Anwendung ausgelöst werden (oderexplizit mit rollback)

• Änderungen der Transaktion werden aus der Datenbasisentfernt indem die in der Log-Datei protokolliertenÄnderungen “rückwärts” rückgängig gemacht werden (ausinsert wird delete und umgekehrt)

• Log-Datei muss alle dazu nötigen Informationen enthalten(z.B. beim delete wird das alte Tupel ins Log geschrieben)

14

Page 17: DatenbanksystemeI - dbis1.github.io

Verlust des Hauptspeichers

• Meist durch Softwarecrash verursacht• Neustart und Wiederanlauf des Systems• Mit Hilfe der Log-Datei muss sichergestellt werden:

• abgeschlossene TAs müssen erhalten bleiben• noch nicht abgeschlossene TAs müssen zurückgesetztwerden

15

Page 18: DatenbanksystemeI - dbis1.github.io

Festplattenausfall

• Meist durch Hardwaredefekt verursacht• Mit Hilfe eines Sicherungspunktes und der Log-Datei oderdes Log-Archivs kann die Datenbasis wiederhergestelltwerden:1. Einspielen des Backups2. Ausführung der Operationen aus der Log-Datei bzw. desLog-Archivs

16

Page 19: DatenbanksystemeI - dbis1.github.io

Mehrbenutzersynchronisation

• Alle TAs strikt seriell (also nacheinander) auszuführen istsicher, aber langsam

• Oft werden Systemressourcen nicht voll ausgenutzt, daeine TA auf Plattenzugriff oder Benutzereingabe wartet

• Diese TA blockiert dann alle anderen TAs• Um Systemressourcen auszunutzen bietet sichNebenläufigkeit an

17

Page 20: DatenbanksystemeI - dbis1.github.io

Mehrbenutzersynchronisation (2)

• Nicht abgesicherte Nebenläufigkeit kann aber zufolgenden Problemen führen:

• lost update• dirty read• non-repeatable read• phantom problem

18

Page 21: DatenbanksystemeI - dbis1.github.io

Dirty Read

T1 T2bot↪→ bot

r2(x)w2(x)

r1(x) ←↩w1(y)commit

↪→ abort

T1 liest einen Wert für x der so nicht gültig ist!

19

Page 22: DatenbanksystemeI - dbis1.github.io

Lost Update

T1 T2botr1(x)↪→ bot

r2(x)w1(x) ←↩↪→ w2(x)

commit ←↩↪→ commit

Das Ergebnis der Transaktion T1 ist verlorengegangen!

20

Page 23: DatenbanksystemeI - dbis1.github.io

Non-Repeatable Read

T1 T2botr1(x)↪→ bot

w2(x)commit

r1(x) ←↩…

T1 liest x zweimal mit verschiedenem Ergebnis!

21

Page 24: DatenbanksystemeI - dbis1.github.io

Phantom Problem

T1 T2bot

select count(*)from R;

↪→ botinsert into R …;

commitselect count(*) ←↩

from R;…

T1 findet ein weiteres Tupel beim Abarbeiten der zweitenAnfrage!

22

Page 25: DatenbanksystemeI - dbis1.github.io

Vermeidung der Probleme

• Im Idealfall sollten alle diese Probleme vermieden werden• Man muss dabei allerdings einen Kompromiss zwischenPerformanz und Genauigkeit schließen

• Je mehr Sicherheit, desto langsamer wird die Ausführung• Über die Isolation Levels kann man DBMS mitteilen,welche Sicherheit erwünscht ist

23

Page 26: DatenbanksystemeI - dbis1.github.io

Transaktionen und SQL

• Festsetzen von Eigenschaften einer TA:set transaction isolation level Stufe, Zugriffsmodus

• Folgende Stufen für den Isolation Level sind möglich:• read uncommitted• read committed• repeatable read• serializable

• Achtung: in vielen Systemen ist read committed dieStandardeinstellung

• Mögliche Zugriffsmodi:• read only• read write

24

Page 27: DatenbanksystemeI - dbis1.github.io

Transaktionen und SQL (2)

dirty lost nonrep. phant.read update read probl.

read uncommittedread committed

repeatable read√ √ √

serializable√ √ √ √

default in PostgreSQL: read committed

25

Page 28: DatenbanksystemeI - dbis1.github.io

Transaktionen und SQL (3)

• “read only” sagt dem DBMS, dass eine TA nurLeseoperationen enthält

• Das hat Auswirkungen auf die Performanz• Nebenläufiges Ausführen von TAs die nur lesen istunkritisch, d.h. beliebig vieler solcher TAs können völliguneingeschränkt parallel laufen

• Erst wenn eine TA dazukommt, die auch schreibt müssenVorkehrungen getroffen werden

26

Page 29: DatenbanksystemeI - dbis1.github.io

Implementierung von Mehrbenutzersynchronisation

• Die meisten Datenbanksysteme verwenden Sperren(“Locks”) um Mehrbenutzersynchronisation zuimplementieren

• Jede Zeile hat eine Sperre, vor dem Zugriff wird diejeweilige Sperre angefordert

• Falls die Sperre schon “vergeben” ist, muss gewartetwerden

• Beim Ende der Transaktion können alle Sperren wiederfreigegeben werden

• Details unterscheiden sich je nach isolation level (z.B. beiread committed werden nur beim Schreiben Sperrengehalten)

• Es gibt auch Verfahren, die nicht auf Sperren basieren

27

Page 30: DatenbanksystemeI - dbis1.github.io

Zusammenfassung

• Transaktionen sind einer der wichtigsten Gründe für denEinsatz von Datenbanksystemen

• Kapselt nebenläufigen Zugriff auf Datenbank, stelltPersistenz sicher

• Benutzung ist sehr einfach, Implementierung ist komplex(mehr dazu in Datenbanksysteme II):

• Atomicity• Consistency: Prüfung der Konsistenzbedingungen (beimcommit)

• Isolation: Mehrbenutzersynchronisation durch Sperren• Durability: Log-Datei, Sicherungspunkte

28