vorlesung datenbanksysteme vom 18.10.2004 anfragebearbeitung logische optimierung physische...
TRANSCRIPT
Vorlesung Datenbanksysteme vom 18.10.2004Anfragebearbeitung
Logische OptimierungPhysische Optimierung
2
Architektur eines DBMS
DML-Compiler DDL-Compiler
Abfrageoptimierung
Datenbankmanager
Schemaverwaltung
Dateiverwaltung
Logdateien Indexe Datenbasis Data Dictionary
Mehrbenutzersynchronisation
Fehlerbehandlung
Interactive Abfrage API/Präcompiler Verwaltungswerkzeug
3
Pull-based Query Evaluation
opennext
ReturnErgebnis
4
Pipelining vs. Pipeline-Breaker
R S
...
...
...
T
...
...
...
5
Pipeline-Breaker
Unäre OperationensortDuplikatelimination (unique,distinct)Aggregatoperationen (min,max,sum,...)
Binäre OperationenMengendifferenz
Je nach Implementierung JoinUnion
6
Beispiele:
Op6 Employee A DNO = Dnumber Department
Op7 Department A MgrSSN = SSN Employee
Zu betrachten allgemein:Implementierungs-Varianten für R AA=B S
JOIN - Implementierung
7
8
J1 nested (inner-outer) loop„brute force“-Algorithmus
foreach r Rforeach s S
if s.B = r.A then Res := Res (r s)
Nested Loop Join
9
10
Block-Nested Loop Join-Algorithmus
m-k m-k m-k m-k m-kR
kS k k k k k
11
J2 Zugriffsstruktur auf SIndex Nested Loop Join
in jedem Durchlauf von R werden nur die in S qualifizierenden Tupel gelesen
dazu ist ein Index auf B erforderlich
foreach r Rforeach s S[B=r.A]
Res := Res (r s)
Index Nested Loop Join
12
13
J3 Sort-Merge Join erfordert zwei Sortierungen
1. R muss nach A und2. S nach B sortiert sein
sehr effizient falls A oder B Schlüsselattribut ist, wird jedes Tupel in R und S
nur genau einmal gelesen (wenn Duplikate eliminiert werden)
Sort-Merge-Join
A 5 5 5 6 6 6 7 7 7
R B 4 4 4 5 5 6 7 7 7 8
S A B5 55 55 55 55 55 56 66 66 67 7
Ergebnis:
14
15
Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus
R23
445
769013174288
S44179746
272
133
R S
•Nested Loop: O(N2)
•Sortieren: O(N log N)
•Partitionieren und Hashing
16
Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus
R23
445
769013174288
S44179746
272
133
R SR3
90427613882
445
17
Mod
3
17
Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus
R23
445
769013174288
S44179746
272
133
R SR3
90427613882
445
17
S6
273
974
1344172
Mod
3
Mod
3
18
Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus
R23
445
769013174288
S44179746
272
133
R SR3
90427613882
445
17
S6
273
974
1344172
Mod
3
Mod
3
19
Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus
R SR3
90427613882
445
17
S6
273
974
1344172
6273
Mod 5
Build-Phase
Hashtabelle
20
Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus
R S = {3, }R3
90427613882
445
17
S6
273
974
1344172
6273
Mod 5
Probe-Phase
21
Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus
R S = {3, }R3
90427613882
445
17
S6
273
974
1344172
97134
Mod 5
Build-Phase2. Partition
22
Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus
R S = {3, }R3
90427613882
445
17
S6
273
974
1344172
97134
Mod 5
Probe-Phase2. Partition
23
Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus
R S = {3, 13 }R3
90427613882
445
17
S6
273
974
1344172
97134
Mod 5
Probe-Phase2. Partition
24
Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus
R23
445
769013174288
S44179746
272
133
R3
90427613882
445
17
S6
273
974
1344172
Mod
3
Mod
3
R S = {3, 13, 2, 44, 17 }
25
J4 Hash-Join R und S werden mittels der gleichen Hashfunktion h –
angewendet auf R.A und S.B – auf (dieselben) Hash-Buckets abgebildet
Hash-Buckets sind i.Allg. auf Hintergrundspeicher (abhängig von der Größe der Relationen)
Zu verbindende Tupel befinden sich dann im selben Bucket
Wird (nach praktischen Tests) nur vom Merge-Join „geschlagen“, wenn die Relationen schon vorsortiert sind
Hash-Join
26
Hash-Join
Ar1 5r2 7r3 8r4 5
R SB 5 s1
7 s2
10 s3
5 s4
r1 5
s15
r4 5
s45
10 s3
r2 7
s27
r3 8
h(A) h(B )
Bucket 3Bucket 2Bucket 1
27
„Normaler“ blockierender Hash-Join mit Überlauf: Partitionieren
Send
R
Send
S
receive
P1
P2
P3
Partitionh(R.A)
P1
P2
P3
Partitionh(S.A)
receive
28
„Normaler“ blockierender Hash-Join mit Überlauf: Build/Probe
Send
R
Send
S
P1
P2
P3
Partitionh(R.A)
P1
P2
P3
build
Hashtabelle
probe
Lade Blöcke von P1
29
30
Nested-Loop Join Hash Join
31
32
Hybrid Hash-Join Fange so an, als wenn der Build-Input S vollständig in
den Hauptspeicher passen würde Sollte sich dies als zu optimistisch herausstellen,
verdränge eine Partition nach der anderen aus dem Hauptspeicher
Mindestens eine Partition wird aber im Hauptspeicher verbleiben
Danach beginnt die Probe-Phase mit der Relation R Jedes Tupel aus R, dessen potentielle Join-Partner im
Hauptspeicher sind, wird sogleich verarbeitet
Hybrid Hash-Join ist dann besonders interessant, wenn der Build-Input knapp größer als der Hauptspeicher istKostensprung beim normalen Hash-Join
Wird oft auch Grace-Hash-Join genannt, weil er für die Datenbankmaschine Grace in Japan erfunden wurde
33
Hybrid Hash-Join
R S
P1
P2
P3
Hashtabelle
34
Hybrid Hash-Join
R S
P3
P1
P2
Hashtabelle
35
Hybrid Hash-Join
R S
P2
P3
P1
Hashtabelle
36
Hybrid Hash-Join
R
P2
P3
Partitionh(R.A) P2
P3
Hashtabelle
probe
Wenn r zur ersten Partition
gehört
37
111100
111100 False
drops
6 Bit
Join mit Hashfilter(Bloom-Filter)
R1
R2pa
rtit
ioni
eren
S1
S2
part
itio
nier
en
38
..
..
..
..
..
..
Join mit Hashfilter(False Drop Abschätzung)
Wahrscheinlichkeit, dass ein bestimmtes Bit j gesetzt istW. dass ein bestimmtes rR das Bit setzt: 1/bW. dass kein rR das Bit setzt: (1-1/b)|R|
W. dass ein rR das Bit gesetzt hat: 1- (1-1/b)|R|
01..j..
b-1
39
Vergleich: Sort/Merge-Join versus Hash-Join
R run run S
merge m
erge
R partition partition S
40
Illustration: Externes Sortieren
971735
27162
9913
41
Illustration: Externes Sortieren
971735
27162
9913
42
Illustration: Externes Sortieren
971735
27162
9913
97
17
3
43
Illustration: Externes Sortieren
971735
27162
9913
3
17
97
sort
44
Illustration: Externes Sortieren
971735
27162
9913
33
1797
17
97
sort
run
45
Illustration: Externes Sortieren
971735
27162
9913
53
1797
27
16
run
46
Illustration: Externes Sortieren
971735
27162
9913
53
17975
1627
16
27
sort
run
47
Illustration: Externes Sortieren
971735
27162
9913
23
17975
1627
99
13
run
48
Illustration: Externes Sortieren
971735
27162
9913
2
317975
16272
1399
13
99
sort
run
49
Illustration: Externes Sortieren
3
317975
16272
1399
5
2
merge
run
50
Illustration: Externes Sortieren
2
3
317975
16272
1399
5
2
merge
run
51
Illustration: Externes Sortieren
23 3
317975
16272
1399
5
13
merge
run
52
Illustration: Externes Sortieren
235
17
317975
16272
1399
5
13
merge
run
53
Illustration: Externes Sortieren
235
17
317975
16272
1399
16
13
merge
run
54
Illustration: Externes Sortieren
235
13
17
317975
16272
1399
16
13
run
55
Mehrstufiges Mischen / Merge
m
m
Level 0
Level 1
Level 2
56
Replacement Selection während der Run-Generierung
971735
27162
9913
Ersetze Array durch Einen Heap
57
Replacement Selection während der Run-Generierung
971735
27162
9913
Heap
97
58
Replacement Selection während der Run-Generierung
971735
27162
9913
Heap
1-97
1-17
59
Replacement Selection während der Run-Generierung
971735
27162
9913
Heap
1-17
1-97
60
Replacement Selection während der Run-Generierung
971735
27162
9913
Heap
1-17
1-97 1-3
61
Replacement Selection während der Run-Generierung
971735
27162
9913
Heap
1-3
1-97 1-17
62
Replacement Selection während der Run-Generierung
971735
27162
9913
3Heap
1-3
1-97 1-17
63
Replacement Selection während der Run-Generierung
971735
27162
9913
3Heap
1-5
1-97 1-17
64
Replacement Selection während der Run-Generierung
971735
27162
9913
35
Heap
1-5
1-97 1-17
65
Replacement Selection während der Run-Generierung
971735
27162
9913
35
Heap
1-27
1-97 1-17
66
Replacement Selection während der Run-Generierung
971735
27162
9913
35
Heap
1-27
1-97 1-17
67
Replacement Selection während der Run-Generierung
971735
27162
9913
35
Heap
1-17
1-97 1-27
68
Replacement Selection während der Run-Generierung
971735
27162
9913
35
17
Heap
1-17
1-97 1-27
69
Replacement Selection während der Run-Generierung
971735
27162
9913
35
17
Heap
2-16
1-97 1-27
Nächster Run, kleiner
als 17
70
Replacement Selection während der Run-Generierung
971735
27162
9913
35
17
Heap
2-16
1-97 1-27
Nächster Run, kleiner
als 17
71
Replacement Selection während der Run-Generierung
971735
27162
9913
35
17
Heap
1-27
1-97 2-16
72
Replacement Selection während der Run-Generierung
971735
27162
9913
35
1727
Heap
1-27
1-97 2-16
73
Replacement Selection während der Run-Generierung
971735
27162
9913
35
1727
Heap
2-2
1-97 2-16
74
Replacement Selection während der Run-Generierung
971735
27162
9913
35
1727
Heap
2-2
1-97 2-16
75
Replacement Selection während der Run-Generierung
971735
27162
9913
35
172797
Heap
1-97
2-2 2-16
76
Replacement Selection während der Run-Generierung
971735
27162
9913
35
172797
Heap
1-99
2-2 2-16
77
Replacement Selection während der Run-Generierung
971735
27162
9913
35
17279799
Heap
1-99
2-2 2-16
78
Replacement Selection während der Run-Generierung
971735
27162
9913
35
17279799
Heap
2-13
2-2 2-16
79
Replacement Selection während der Run-Generierung
971735
27162
9913
35
17279799
Heap
2-2
2-13 2-16
80
Replacement Selection während der Run-Generierung
971735
27162
9913
35
172797992
1316
Heap
2-2
2-13 2-16
81
Implementierungs-Details Natürlich darf man nicht einzelne Datensätze zwischen
Hauptspeicher und Hintergrundspeicher transferieren Jeder „Round-Trip“ kostet viel Zeit (ca 10 ms)
Man transferiert größere BlöckeMindestens 8 KB Größe
Replacement Selection ist problematisch, wenn die zu sortierenden Datensätze variable Größe habeDer neue Datensatz passt dann nicht unbedingt in
den frei gewordenen Platz, d.h., man benötigt eine aufwendigere Freispeicherverwaltung
Replacement Selection führt im Durchschnitt zu einer Verdoppelung der Run-LängeBeweis findet man im [Knuth]
Komplexität des externen Sortierens? O(N log N) ??
82
Übersetzung der logischen Algebra
R S
AR.A=S.B
R S
HashJoinR.A=S.B
R S
MergeJoinR.A=S.B
[SortR.A] [SortS.B]
R
S
IndexJoinR.A=S.B
[HashS.B | TreeS.B]
R
S
NestedLoopR.A=S.B
[Bucket]
83
Übersetzung der logischen Algebra
P
R
SelectP
R
IndexSelectP
R
84
Übersetzung der logischen Algebra
l
R
[NestedDup]
Projectl
R
[SortDup]
Sort
Projectl
R
[IndexDup]
[Hash | Tree]
Projectl
R
85
Ein AuswertungsplanEin Auswer-tungsplan
86
Wiederholung der Optimierungsphasenselect distinct s.Semester
from Studenten s, hören h
Vorlesungen v, Professoren p
where p.Name = ´Sokrates´ and
v.gelesenVon = p.PersNr and
v.VorlNr = h.VorlNr and
h.MatrNr = s.MatrNr
s h
v
p
p.Name = ´Sokrates´ and ...
s.Semester
87
s
h
v
p
As.MatrNr=h.MatrNr
Ap.PersNr=v.gelesenVon
s.Semester
p.Name = ´Sokrates´
Av.VorlNr=h.VorlNr