Vorlesung Datenbanksysteme vom Anfragebearbeitung Logische Optimierung Physische Optimierung
2 Architektur eines DBMS DML-CompilerDDL-Compiler Abfrageoptimierung Datenbankmanager Schemaverwaltung Dateiverwaltung LogdateienIndexeDatenbasisData Dictionary Mehrbenutzersynchronisation Fehlerbehandlung Interactive AbfrageAPI/PräcompilerVerwaltungswerkzeug
3 Pull-based Query Evaluation open next Return Ergebnis
4 Pipelining vs. Pipeline-Breaker RS... T
5 Pipeline-Breaker Unäre Operationen sort Duplikatelimination (unique,distinct) Aggregatoperationen (min,max,sum,...) Binäre Operationen Mengendifferenz Je nach Implementierung Join Union
6 Beispiele: Op6Employee A DNO = Dnumber Department Op7 Department A MgrSSN = SSN Employee Zu betrachten allgemein: Implementierungs-Varianten für R A A=B S JOIN - Implementierung
7
8 J1 nested (inner-outer) loop brute force-Algorithmus foreach r R foreach s S if s.B = r.A then Res := Res (r s) Nested Loop Join
9
10 Block-Nested Loop Join- Algorithmus m-k R k S kkkkk
11 J2 Zugriffsstruktur auf S Index 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 R foreach 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 und 2. 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 R S Ergebnis:
14
15 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S Nested Loop: O(N 2 ) Sortieren: O(N log N) Partitionieren und Hashing
16 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S R Mod 3
17 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S R S Mod 3
18 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S R S Mod 3
19 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S Mod 5 Build- Phase Hashtabelle
20 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, } R S Mod 5 Probe- Phase
21 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, } R S Mod 5 Build-Phase 2. Partition
22 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, } R S Mod 5 Probe-Phase 2. Partition
23 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, 13 } R S Mod 5 Probe-Phase 2. Partition
24 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S 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 RS r1r1 5 s1s1 5 r4r4 5 s4s4 5 10s3s3 r2r2 7 s2s2 7 r3r3 8 h(A)h(A)h(B ) Bucket 3 Bucket 2Bucket 1
27 Normaler blockierender Hash- Join mit Überlauf: Partitionieren Send R Send S receive P1 P2P3 Partition h(R.A) P1 P2 P3 Partition h(S.A) receive
28 Normaler blockierender Hash-Join mit Überlauf: Build/Probe Send R Send S P1 P2P3 Partition h(R.A) P1 P2 P3 build Hashtabelle probe Lade Blöcke von P1
29
30 Nested-Loop JoinHash 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 ist Kostensprung 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 RS P1 P2 P3 Hashtabelle
34 Hybrid Hash-Join RS P3 P1 P2 Hashtabelle
35 Hybrid Hash-Join RS P2 P3 P1 Hashtabelle
36 Hybrid Hash-Join R P2P3 Partition h(R.A) P2 P3 Hashtabelle probe Wenn r zur ersten Partition gehört
False drops 6 Bit Join mit Hashfilter (Bloom-Filter) R1 R2 partitionieren S1 S2 partitionieren
38.. Join mit Hashfilter (False Drop Abschätzung) Wahrscheinlichkeit, dass ein bestimmtes Bit j gesetzt ist W. dass ein bestimmtes r R das Bit setzt: 1/b W. dass kein r R das Bit setzt: (1-1/b) |R| W. dass ein r R das Bit gesetzt hat: 1- (1-1/b) |R| j b-1
39 Vergleich: Sort/Merge-Join versus Hash-Join R run S merge R partition S
40 Illustration: Externes Sortieren
41 Illustration: Externes Sortieren
42 Illustration: Externes Sortieren
43 Illustration: Externes Sortieren sort
44 Illustration: Externes Sortieren sort run
45 Illustration: Externes Sortieren run
46 Illustration: Externes Sortieren sort run
47 Illustration: Externes Sortieren run
48 Illustration: Externes Sortieren sort run
49 Illustration: Externes Sortieren merge run
50 Illustration: Externes Sortieren merge run
51 Illustration: Externes Sortieren merge run
52 Illustration: Externes Sortieren merge run
53 Illustration: Externes Sortieren merge run
54 Illustration: Externes Sortieren run
55 Mehrstufiges Mischen / Merge
56 Replacement Selection während der Run-Generierung Ersetze Array durch Einen Heap
57 Replacement Selection während der Run-Generierung Heap 97
58 Replacement Selection während der Run-Generierung Heap
59 Replacement Selection während der Run-Generierung Heap
60 Replacement Selection während der Run-Generierung Heap
61 Replacement Selection während der Run-Generierung Heap
62 Replacement Selection während der Run-Generierung Heap
63 Replacement Selection während der Run-Generierung Heap
64 Replacement Selection während der Run-Generierung Heap
65 Replacement Selection während der Run-Generierung Heap
66 Replacement Selection während der Run-Generierung Heap
67 Replacement Selection während der Run-Generierung Heap
68 Replacement Selection während der Run-Generierung Heap
69 Replacement Selection während der Run-Generierung Heap Nächster Run, kleiner als 17
70 Replacement Selection während der Run-Generierung Heap Nächster Run, kleiner als 17
71 Replacement Selection während der Run-Generierung Heap
72 Replacement Selection während der Run-Generierung Heap
73 Replacement Selection während der Run-Generierung Heap
74 Replacement Selection während der Run-Generierung Heap
75 Replacement Selection während der Run-Generierung Heap
76 Replacement Selection während der Run-Generierung Heap
77 Replacement Selection während der Run-Generierung Heap
78 Replacement Selection während der Run-Generierung Heap
79 Replacement Selection während der Run-Generierung Heap
80 Replacement Selection während der Run-Generierung Heap
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öcke Mindestens 8 KB Größe Replacement Selection ist problematisch, wenn die zu sortierenden Datensätze variable Größe habe Der 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änge Beweis findet man im [Knuth] Komplexität des externen Sortierens? O(N log N) ??
82 Übersetzung der logischen Algebra RS A R.A=S.B RS HashJoin R.A=S.B RS MergeJoin R.A=S.B [Sort R.A ][Sort S.B ] R S IndexJoin R.A=S.B [Hash S.B | Tree S.B ] R S NestedLoop R.A=S.B [Bucket]
83 Übersetzung der logischen Algebra P R Select P R IndexSelect P R
84 Übersetzung der logischen Algebra l R [NestedDup] Project l R [SortDup] Sort Project l R [IndexDup] [Hash | Tree] Project l R
85 Ein Auswertungsplan Ein Auswer- tungsplan
86 Wiederholung der Optimierungsphasen select 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 sh v p p.Name = ´Sokrates´ and... s.Semester
87 s h v p A s.MatrNr=h.MatrNr A p.PersNr=v.gelesenVon s.Semester p.Name = ´Sokrates´ A v.VorlNr=h.VorlNr