Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Rosemarie Gaugler Geändert vor über 10 Jahren
1
Vorlesung Datenbanksysteme vom 18.10.2004 Anfragebearbeitung Logische Optimierung Physische Optimierung
2
2 Architektur eines DBMS DML-CompilerDDL-Compiler Abfrageoptimierung Datenbankmanager Schemaverwaltung Dateiverwaltung LogdateienIndexeDatenbasisData Dictionary Mehrbenutzersynchronisation Fehlerbehandlung Interactive AbfrageAPI/PräcompilerVerwaltungswerkzeug
3
3 Pull-based Query Evaluation open next Return Ergebnis
4
4 Pipelining vs. Pipeline-Breaker RS... T
5
5 Pipeline-Breaker Unäre Operationen sort Duplikatelimination (unique,distinct) Aggregatoperationen (min,max,sum,...) Binäre Operationen Mengendifferenz Je nach Implementierung Join Union
6
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
7
8
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
9
10
10 Block-Nested Loop Join- Algorithmus m-k R k S kkkkk
11
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
12
13
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
14
15
15 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R 2 3 44 5 76 90 13 17 42 88 S 44 17 97 4 6 27 2 13 3 R S Nested Loop: O(N 2 ) Sortieren: O(N log N) Partitionieren und Hashing
16
16 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R 2 3 44 5 76 90 13 17 42 88 S 44 17 97 4 6 27 2 13 3 R S R 3 90 42 76 13 88 2 44 5 17 Mod 3
17
17 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R 2 3 44 5 76 90 13 17 42 88 S 44 17 97 4 6 27 2 13 3 R S R 3 90 42 76 13 88 2 44 5 17 S 6 27 3 97 4 13 44 17 2 Mod 3
18
18 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R 2 3 44 5 76 90 13 17 42 88 S 44 17 97 4 6 27 2 13 3 R S R 3 90 42 76 13 88 2 44 5 17 S 6 27 3 97 4 13 44 17 2 Mod 3
19
19 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R 3 90 42 76 13 88 2 44 5 17 S 6 27 3 97 4 13 44 17 2 6 27 3 Mod 5 Build- Phase Hashtabelle
20
20 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, } R 3 90 42 76 13 88 2 44 5 17 S 6 27 3 97 4 13 44 17 2 6 27 3 Mod 5 Probe- Phase
21
21 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, } R 3 90 42 76 13 88 2 44 5 17 S 6 27 3 97 4 13 44 17 2 97 13 4 Mod 5 Build-Phase 2. Partition
22
22 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, } R 3 90 42 76 13 88 2 44 5 17 S 6 27 3 97 4 13 44 17 2 97 13 4 Mod 5 Probe-Phase 2. Partition
23
23 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, 13 } R 3 90 42 76 13 88 2 44 5 17 S 6 27 3 97 4 13 44 17 2 97 13 4 Mod 5 Probe-Phase 2. Partition
24
24 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R 2 3 44 5 76 90 13 17 42 88 S 44 17 97 4 6 27 2 13 3 R 3 90 42 76 13 88 2 44 5 17 S 6 27 3 97 4 13 44 17 2 Mod 3 R S = {3, 13, 2, 44, 17 }
25
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
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
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
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
29
30
30 Nested-Loop JoinHash Join
31
31
32
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
33 Hybrid Hash-Join RS P1 P2 P3 Hashtabelle
34
34 Hybrid Hash-Join RS P3 P1 P2 Hashtabelle
35
35 Hybrid Hash-Join RS P2 P3 P1 Hashtabelle
36
36 Hybrid Hash-Join R P2P3 Partition h(R.A) P2 P3 Hashtabelle probe Wenn r zur ersten Partition gehört
37
37 1 1 1 1 0 0 1 1 1 1 0 0 False drops 6 Bit Join mit Hashfilter (Bloom-Filter) R1 R2 partitionieren S1 S2 partitionieren
38
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| 0 1.. j b-1
39
39 Vergleich: Sort/Merge-Join versus Hash-Join R run S merge R partition S
40
40 Illustration: Externes Sortieren 97 17 3 5 27 16 2 99 13
41
41 Illustration: Externes Sortieren 97 17 3 5 27 16 2 99 13
42
42 Illustration: Externes Sortieren 97 17 3 5 27 16 2 99 13 97 17 3
43
43 Illustration: Externes Sortieren 97 17 3 5 27 16 2 99 13 3 17 97 sort
44
44 Illustration: Externes Sortieren 97 17 3 5 27 16 2 99 13 3 3 17 97 17 97 sort run
45
45 Illustration: Externes Sortieren 97 17 3 5 27 16 2 99 13 5 3 17 97 27 16 run
46
46 Illustration: Externes Sortieren 97 17 3 5 27 16 2 99 13 5 3 17 97 5 16 27 16 27 sort run
47
47 Illustration: Externes Sortieren 97 17 3 5 27 16 2 99 13 2 3 17 97 5 16 27 99 13 run
48
48 Illustration: Externes Sortieren 97 17 3 5 27 16 2 99 13 2 3 17 97 5 16 27 2 13 99 13 99 sort run
49
49 Illustration: Externes Sortieren 3 3 17 97 5 16 27 2 13 99 5 2 merge run
50
50 Illustration: Externes Sortieren 2 3 3 17 97 5 16 27 2 13 99 5 2 merge run
51
51 Illustration: Externes Sortieren 2323 3 3 17 97 5 16 27 2 13 99 5 13 merge run
52
52 Illustration: Externes Sortieren 235235 17 3 17 97 5 16 27 2 13 99 5 13 merge run
53
53 Illustration: Externes Sortieren 235235 17 3 17 97 5 16 27 2 13 99 16 13 merge run
54
54 Illustration: Externes Sortieren 2 3 5 13 17 3 17 97 5 16 27 2 13 99 16 13 run
55
55 Mehrstufiges Mischen / Merge
56
56 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 Ersetze Array durch Einen Heap
57
57 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 Heap 97
58
58 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 Heap 1-97 1-17
59
59 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 Heap 1-17 1-97
60
60 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 Heap 1-17 1-971-3
61
61 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 Heap 1-3 1-971-17
62
62 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 Heap 1-3 1-971-17
63
63 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 Heap 1-5 1-971-17
64
64 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3535 Heap 1-5 1-971-17
65
65 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3535 Heap 1-27 1-971-17
66
66 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3535 Heap 1-27 1-971-17
67
67 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3535 Heap 1-17 1-971-27
68
68 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 Heap 1-17 1-971-27
69
69 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 Heap 2-16 1-971-27 Nächster Run, kleiner als 17
70
70 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 Heap 2-16 1-971-27 Nächster Run, kleiner als 17
71
71 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 Heap 1-27 1-972-16
72
72 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 27 Heap 1-27 1-972-16
73
73 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 27 Heap 2-2 1-972-16
74
74 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 27 Heap 2-2 1-972-16
75
75 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 27 97 Heap 1-97 2-22-16
76
76 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 27 97 Heap 1-99 2-22-16
77
77 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 27 97 99 Heap 1-99 2-22-16
78
78 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 27 97 99 Heap 2-13 2-22-16
79
79 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 27 97 99 Heap 2-2 2-132-16
80
80 Replacement Selection während der Run-Generierung 97 17 3 5 27 16 2 99 13 3 5 17 27 97 99 2 13 16 Heap 2-2 2-132-16
81
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
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
83 Übersetzung der logischen Algebra P R Select P R IndexSelect P R
84
84 Übersetzung der logischen Algebra l R [NestedDup] Project l R [SortDup] Sort Project l R [IndexDup] [Hash | Tree] Project l R
85
85 Ein Auswertungsplan Ein Auswer- tungsplan
86
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
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.