Kapitel 8 Anfragebearbeitung  Logische Optimierung  Physische Optimierung  Kostenmodelle  „Tuning“

Slides:



Advertisements
Ähnliche Präsentationen
Kapitel 8 Anfragebearbeitung
Advertisements

ER-Datenmodell und Abfragen in SQL
Kapitel 8 Anfragebearbeitung Logische Optimierung Physische Optimierung Kostenmodelle Tuning.
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Eine dynamische Menge, die diese Operationen unterstützt,
Vorlesung Programmieren II
Kapitel 8 Anfragebearbeitung
5. Sortier-Algorithmen Vorbemerkungen:
Bauinformatik II Softwareanwendungen 1
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Anfrage-Optimierung und -Bearbeitung in Verteilten DBMS
Lehrstuhl Informatik III, DatenbanksystemeMartin Wimmer Übung zu Architektur und Implementierung von Datenbanksystemen 1 Implementierungen des Join- Operators.
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Effizienz: Indexstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (15 Hashverfahren: Verkettung der Überläufer) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Algorithmen und Komplexität Teil 1: Grundlegende.
Übung Datenbanksysteme SQL-Anfragen (2)
Einführung Dateisystem <-> Datenbanksystem
Beispielrelation Buchbestellungen H = Menge der bedeutenden Ziele = {a, d} Schwelle T = 4 Stichprobe S = {a, b, a, a, a, a} mit s = |S| = 6 N = Anzahl.
Universität Karlsruhe (TH) © 2009 Univ,Karlsruhe, IPD, Prof. LockemannDBI 10 Kapitel 10 Anfragebearbeitung.
1 Gruppierung (1) Motivation: Bisher existierte nur die gesamte Relation als eine einzige Gruppe. Interessanter ist es, Aggregierungen über Teilmengen.
- Schnittmengenbildung -
Effiziente Algorithmen
Datenbankentwicklung IV-LK
Die Grundterminologie
Vorlesung Datenbanksysteme vom Anfragebearbeitung Kostenmodelle Tuning.
WS 2004/2005 Datenbanken II - 5W Mi 17:00 – 18:30 G 3.18 Vorlesung #4 Anfragebearbeitung (Teil 2)
Einführung in die Programmierung
1 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.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #6 SQL (Teil 3)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
WS 2011/12 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #9 Physische Datenorganisation.
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #8 Anfragebearbeitung.
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #5 Relationale Anfragesprachen.
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #9 Anfragebearbeitung.
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #9 Anfragebearbeitung (Teil 1)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #5 SQL (Teil 2)
Datenbanksysteme für hörer anderer Fachrichtungen
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 Anfragebearbeitung.
Vorlesung Datenbanksysteme vom Anfragebearbeitung Logische Optimierung Physische Optimierung.
Structured Query Language
WS 2004/2005 Datenbanken II - 5W Mi 17:00 – 18:30 G 3.18 Vorlesung #3 Anfragebearbeitung (Teil 1)
Vorlesung #5 SQL (Teil 2).
1 Mehrrechner- Datenbanksysteme Grundlegende Architekturen Anfragebearbeitungstechniken.
1 Differenzierte Verbindungsoperationen (1) Beobachtung: Einfach zu formulierende Verbindungen wie ein Natural Join sind nicht als solche dokumentiert.
Algebraische Optimierung (1)
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
Vorlesung Datenbanksysteme vom Anfragebearbeitung  Logische Optimierung.
Vorlesung Datenbanksysteme vom : Wiederholung Anfragebearbeitung  Logische Optimierung.
12. November 2001 Seminar Geoinformation Folie 1 Inhalt Einführung Bearbeitung raumbezogener Anfragen Ausblick Seminar Geoinformation Themenblock: „Implementierung.
Vorlesung Datenbanksysteme vom Anfragebearbeitung 2  Architektur eines DBMS  Logische Optimierung  Physische Optimierung  Kostenmodelle.
Suchen und Sortieren.
Vorlesung #9 Anfragebearbeitung
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Vorlesung #5 SQL (Teil 2).
Vorlesung #9 Anfragebearbeitung
Vorlesung #6 SQL (Teil 3).
 Präsentation transkript:

Kapitel 8 Anfragebearbeitung  Logische Optimierung  Physische Optimierung  Kostenmodelle  „Tuning“

2 Ablauf der Anfrageoptimierung Scanner Parser Sichtenauflösung Anfrage- Optimierer Codeerzeugung Ausführung Deklarative Anfrage Algebraischer Ausdruck Auswertungs- Plan (QEP)

3 Kanonische Übersetzung select A1,..., An from R1,..., Rk where P R1R2 R3 Rk    PP  A1,..., An

4 Kanonische Übersetzung select Titel from Professoren, Vorlesungen where Name = ´Popper´ and PersNr = gelesenVon Professoren Vorlesungen   Name = ´Popper´ and PersNr=gelesenVon  Titel  Titel (  Name = ´Popper´ and PersNr=gelesenVon (Professoren  Vorlesungen))

5 Erste Optimierungsidee select Titel from Professoren, Vorlesungen where Name = ´Popper´ and PersNr = gelesenVon Professoren Vorlesungen   PersNr=gelesenVon  Titel  Titel (  PersNr=gelesenVon ((  Name = ´Popper´ Professoren)  Vorlesungen))  Name = ´Popper´

6 Grundsätze:  Sehr hohes Abstraktionsniveau der mengenorientierten Schnittstelle (SQL).  Sie ist deklarativ, nicht-prozedural, d.h. es wird spezifiziert, was man finden möchte, aber nicht wie.  Das wie bestimmt sich aus der Abbildung der mengenorientierten Operatoren auf Schnittstellen- Operatoren der internen Ebene (Zugriff auf Datensätze in Dateien, Einfügen/Entfernen interner Datensätze, Modifizieren interner Datensätze).  Zu einem was kann es zahlreiche wie‘s geben: effiziente Anfrageauswertung durch Anfrageoptimierung.  i.Allg. wird aber nicht die optimale Auswertungsstrategie gesucht (bzw. gefunden) sondern eine einigermaßen effiziente Variante  Ziel: „avoiding the worst case“ Optimierung von Datenbank- Anfragen

7 1. Aufbrechen von Konjunktionen im Selektionsprädikat  c 1  c 2 ...  c n (R )   c 1 (  c 2 (…(  c n (R )) …)) 2.  ist kommutativ  c 1 (  c 2 ((R ))   c 2 (  c 1 ((R )) 3.  -Kaskaden: Falls L 1  L 2  …  L n, dann gilt  L 1 (  L 2 (…(  L n (R )) …))   L 1 (R ) 4. Vertauschen von  und  Falls die Selektion sich nur auf die Attribute A 1, …, A n der Projektionsliste bezieht, können die beiden Operationen vertauscht werden  A 1, …, A n (  c (R ))   c (  A 1, …, A n (R )) 5. X, ,  und A sind kommutativ R A c S  S A c R Äquivalenzerhaltende Transformationsregeln

8 6. Vertauschen von  mit A Falls das Selektionsprädikat c nur auf Attribute der Relation R zugreift, kann man die beiden Operationen vertauschen:  c (R A j S)   c (R) A j S Falls das Selektionsprädikat c eine Konjunktion der Form „c 1  c 2 “ ist und c 1 sich nur auf Attribute aus R und c 2 sich nur auf Attribute aus S bezieht, gilt folgende Äquivalenz:  c (R A j S)   c (R) A j (  c 2 (S)) Äquivalenzerhaltende Transformationsregeln

9 7. Vertauschung von  mit A Die Projektionsliste L sei: L = {A 1,…,A n, B 1,…,B m }, wobei A i Attribute aus R und B i Attribute aus S seien. Falls sich das Joinprädikat c nur auf Attribute aus L bezieht, gilt folgende Umformung:  L (R A c S)  (  A 1, …, A n (R)) A c (  B 1, …, B n (S)) Falls das Joinprädikat sich auf weitere Attribute, sagen wir A 1 ', …, A p ', aus R und B 1 ', …, B q ' aus S bezieht, müssen diese für die Join-Operation erhalten bleiben und können erst danach herausprojiziert werden:  L (R A c S)   L (  A 1, …, A n, A 1 ‘, …, A n ‘ (R) A c  B 1, …, B n, B 1 ‘, …, B n ‘ (R)) Für die X-Operation gibt es kein Prädikat, so dass die Einschränkung entfällt. Äquivalenzerhaltende Transformationsregeln

10 8. Die Operationen A, X, ,  sind jeweils (einzeln betrachtet) assoziativ. Wenn also  eine dieser Operationen bezeichnet, so gilt: (R  S )  T  R  (S  T ) 9. Die Operation  ist distributiv mit , , . Falls  eine dieser Operationen bezeichnet, gilt:  c (R  S)  (  c (R))  (  c (S)) 10. Die Operation  ist distributiv mit .  c (R  S)  (  c (R))  (  c (S)) Äquivalenzerhaltende Transformationsregeln

Die Join- und/oder Selektionsprädikate können mittels de Morgan's Regeln umgeformt werden:  (c 1  c 2 )  (  c 1 )  (  c 2 )  (c 1  c 2 )  (  c 1 )  (  c 2 ) 12. Ein kartesisches Produkt, das von einer Selektions- Operation gefolgt wird, deren Selektionsprädikat Attribute aus beiden Operanden des kartesischen Produktes enthält, kann in eine Joinoperation umgeformt werden. Sei c eine Bedingung der Form A  B, mit A ein Attribut von R und B ein Attribut aus S.  c (R X S )  R A c S Äquivalenzerhaltende Transformationsregeln

12 1. Mittels Regel 1 werden konjunktive Selektionsprädikate in Kaskaden von  -Operationen zerlegt. 2. Mittels Regeln 2, 4, 6, und 9 werden Selektionsoperationen soweit „nach unten“ propagiert wie möglich. 3. Mittels Regel 8 werden die Blattknoten so vertauscht, dass derjenige, der das kleinste Zwischenergebnis liefert, zuerst ausgewertet wird. 4. Forme eine X-Operation, die von einer  -Operation gefolgt wird, wenn möglich in eine A -Operation um 5. Mittels Regeln 3, 4, 7, und 10 werden Projektionen soweit wie möglich nach unten propagiert. 6. Versuche Operationsfolgen zusammenzufassen, wenn sie in einem „Durchlauf“ ausführbar sind (z.B. Anwendung von Regel 1, Regel 3, aber auch Zusammenfassung aufeinanderfolgender Selektionen und Projektionen zu einer „Filter“-Operation). Heuristische Anwendung der Transformationsregeln

13 Anwendung der Transformationsregeln 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

14 Aufspalten der Selektionsprädikate sh v p     p.Name = ´Sokrates´ and...  s.Semester sh v p     p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´  s.MatrNr=h.MatrNr  v.VorlNr=h.VorlNr

15 Verschieben der Selektionsprädikate „Pushing Selections“ sh v p     p.PersNr=v.gelesenVon  s.Semester  p.Name = `Sokrates`  s.MatrNr=h.MatrNr  v.VorlNr=h.VorlNr sh v p     p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´  s.MatrNr=h.MatrNr  v.VorlNr=h.VorlNr

16 Zusammenfassung von Selektionen und Kreuzprodukten zu Joins sh v p     p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´  s.MatrNr=h.MatrNr  v.VorlNr=h.VorlNr sh v p A s.MatrNr=h.MatrNr A p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´ A v.VorlNr=h.VorlNr

17 Optimierung der Joinreihenfolge Kommutativität und Assoziativität ausnutzen s h v p A s.MatrNr=h.MatrNr A p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´ A v.VorlNr=h.VorlNr sh v p A p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´ A v.VorlNr=h.VorlNr A s.MatrNr=h.MatrNr

18 Was hat´s gebracht? s h v p A s.MatrNr=h.MatrNr A p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´ A v.VorlNr=h.VorlNr sh v p A p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´ A v.VorlNr=h.VorlNr A s.MatrNr=h.MatrNr

19 Einfügen von Projektionen s h v p A s.MatrNr=h.MatrNr A p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´ A v.VorlNr=h.VorlNr s h v p A s.MatrNr=h.MatrNr A p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´ A v.VorlNr=h.VorlNr  h.MatrNr

Organisatorisches  DB2 Zertifizierungskurs  IBM  Fast kostenlos  Für gute Studierende  DB Praktikum  Vorbesprechung 27. Januar 2009, Uhr in unserem Ted Codd Seminarraum MI  unter  Vorlesung am kommenden Freitag (neuer Stoff)  In Hörsaal 1 (hier!)  Vorlesung am …  Findet als Zentralübung statt (kein neuer Stoff) 20

21 Eine weitere Beispieloptimierung

22

23

24

25

26

27

28

29

Entschachtelung / Unnesting select s.Name, p.VorlNr from Studenten s, prüfen p where s.MatrNr = p.MatrNr and p.Note = ( select min(p2.Note) from prüfen p2 where s.MatrNr=p2.MatrNr ) select s.Name, p.VorlNr from Studenten s, prüfen p, (select p2.MatrNr as ID, min(p2.Note) as beste from prüfen p2 group by p2.MatrNr) m where s.MatrNr=p.MatrNr and m.ID=s.MatrNr and p.Note=m.beste 30 automatisch

Dependent Join (nested loop Semantik) 31

Einfache Entschachtelung 32

33

Weitere Transformationsregeln 34

Beispiel 35

Entkoppelung rechter Seite von linker Seite: optional 36

37 Pull-basierte Anfrageauswertung open next Return Ergebnis

38 Pipelining vs. Pipeline-Breaker RS... T

39 Pipelining vs. Pipeline-Breaker RS... T

40 Pipeline-Breaker  Unäre Operationen  sort  Duplikatelimination (unique,distinct)  Aggregatoperationen (min,max,sum,...)  Binäre Operationen  Mengendifferenz  Je nach Implementierung  Join  Union

41

42 J1 nested (inner-outer) loop  „brute force“-Algorithmus foreach r  R foreach s  S if s.B = r.A then Res := Res  (r  s) Implementierung der Verbindung: Strategien

43

44 Block-Nested Loop Algorithmus Implementierung der Verbindung: Strategien m-k R k S kkkkk

45

46

47 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 Implementierung der Verbindung: Strategien

48 Implementierung der Verbindung: Strategien 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

49 „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 

50 „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

51

52

53

54

55 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

56 Hybrid Hash-Join RS P1 P2 P3 Hashtabelle

57 Hybrid Hash-Join RS P3 P1 P2 Hashtabelle

58 Hybrid Hash-Join RS P2 P3 P1 Hashtabelle

59 Hybrid Hash-Join R P2P3 Partition h(R.A) P2 P3 Hashtabelle probe Wenn r zur ersten Partition gehört

60 Parallele Anfragebearbeitung: Hash Join A´B´ scan split Ai Bi join merge A´´B´´ scan split Aj Bj join merge

61 Paralleler Hash Join – im Detail 1.An jeder Station werden mittels Hash-Funktion h1 die jeweiligen Partitionen von A und B in A1,...,Ak und B1,...,Bk zerlegt zh1 muss so gewählt werden, dass alle Ai´s aller Stationen in den Hauptspeicher passen 2.Für alle 1 <= i <= n: Berechne jetzt den Join von Ai mit Bi wie folgt a.Wende eine weitere Hash-Funktion h2 an, um Ai auf die l Stationen zu verteilen zSende Tupel t an Station h2(t) b.Eintreffende Ai-Tupel werden in die Hash-Tabelle an der jeweiligen Station eingefügt c.Sobald alle Tupel aus Ai „verschickt“ sind, wird h2 auf Bi angewendet und Tupel t an Station h2(t) geschickt d.Sobald ein Bi-Tupel eintrifft, werden in der Ai-Hashtabelle seine Joinpartner ermittelt.

62 Mengendurchschnitt (~Join) mit einem Hash/Partitionierungs-Algorithmus R S R  S Nested Loop: O(N 2 ) Sortieren: O(N log N) Partitionieren und Hashing

63 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R  S R Mod 3

64 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R  S R S Mod 3

65 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R  S R S Mod 3

66 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R  S R S Mod 5 Build- Phase Hashtabelle

67 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R  S = {3, } R S Mod 5 Probe- Phase

68 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R  S = {3, } R S Mod 5 Build-Phase 2. Partition

69 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R  S = {3, } R S Mod 5 Probe-Phase 2. Partition

70 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R  S = {3, 13 } R S Mod 5 Probe-Phase 2. Partition

71 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S Mod 3 R  S = {3, 13, 2, 44, 17 }

72 Vergleich: Sort/Merge-Join versus Hash-Join R run S merge R partition S

73 Prallelausführung von Aggregat- Operationen  Min: Min(R.A) = Min ( Min(R1.A),..., Min(Rn.A) )  Max: analog  Sum: Sum(R.A) = Sum ( Sum(R1.a),..., Sum(Rn.A) )  Count: analog  Avg: man muß die Summe und die Kardinalitäten der Teilrelationen kennen; aber vorsicht bei Null-Werten!  Avg(R.A) = Sum(R.A) / Count(R) gilt nur wenn A keine Nullwerte enthält.

False drops 6 Bit (realistisch |R|*k Bits) Join mit Hashfilter (Bloom-Filter) R1 R2 partitionieren S1 S2 partitionieren

75.. 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

76 Illustration: Externes Sortieren

77 Illustration: Externes Sortieren

78 Illustration: Externes Sortieren

79 Illustration: Externes Sortieren sort

80 Illustration: Externes Sortieren sort run

81 Illustration: Externes Sortieren run

82 Illustration: Externes Sortieren sort run

83 Illustration: Externes Sortieren run

84 Illustration: Externes Sortieren sort run

85 Illustration: Externes Sortieren merge run

86 Illustration: Externes Sortieren merge run

87 Illustration: Externes Sortieren merge run

88 Illustration: Externes Sortieren merge run

89 Illustration: Externes Sortieren merge run

90 Illustration: Externes Sortieren run

91 Externes Sortieren: Merge mittels Heap/Priority Queue merge run 3 52

92 Externes Sortieren: Merge mittels Heap/Priority Queue merge run 2 53

93 Externes Sortieren: Merge mittels Heap/Priority Queue run 2 53

94 Externes Sortieren: Merge mittels Heap/Priority Queue run Ganz wichtig: aus dem grünen Run nachladen (also aus dem Run, aus dem das Objekt stammte)

95 Externes Sortieren: Merge mittels Heap/Priority Queue run 3 513

96 Externes Sortieren: Merge mittels Heap/Priority Queue run 3 513

97 Externes Sortieren: Merge mittels Heap/Priority Queue run

98 Externes Sortieren: Merge mittels Heap/Priority Queue run

99 Mehrstufiges Mischen / Merge

100 Replacement Selection während der Run-Generierung Ersetze Array durch Einen Heap

101 Replacement Selection während der Run-Generierung Heap 97

102 Replacement Selection während der Run-Generierung Heap

103 Replacement Selection während der Run-Generierung Heap

104 Replacement Selection während der Run-Generierung Heap

105 Replacement Selection während der Run-Generierung Heap

106 Replacement Selection während der Run-Generierung Heap

107 Replacement Selection während der Run-Generierung Heap

108 Replacement Selection während der Run-Generierung Heap

109 Replacement Selection während der Run-Generierung Heap

110 Replacement Selection während der Run-Generierung Heap

111 Replacement Selection während der Run-Generierung Heap

112 Replacement Selection während der Run-Generierung Heap

113 Replacement Selection während der Run-Generierung Heap Nächster Run, kleiner als 17

114 Replacement Selection während der Run-Generierung Heap Nächster Run, kleiner als 17

115 Replacement Selection während der Run-Generierung Heap

116 Replacement Selection während der Run-Generierung Heap

117 Replacement Selection während der Run-Generierung Heap

118 Replacement Selection während der Run-Generierung Heap

119 Replacement Selection während der Run-Generierung Heap

120 Replacement Selection während der Run-Generierung Heap

121 Replacement Selection während der Run-Generierung Heap

122 Replacement Selection während der Run-Generierung Heap

123 Replacement Selection während der Run-Generierung Heap

124 Replacement Selection während der Run-Generierung Heap

125 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) ??

126 Algorithmen auf sehr großen Datenmengen R S R  S Nested Loop: O(N 2 ) Sortieren: O(N log N) Partitionieren und Hashing

127 Ü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]

128 Übersetzung der logischen Algebra PRPR Select P R IndexSelect P R

129 Übersetzung der logischen Algebra lRlR [NestedDup] Project l R [SortDup] Sort Project l R [IndexDup] [Hash | Tree] Project l R

130 Ein Auswertungsplan Ein Auswer- tungsplan

131 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

132 s h v p A s.MatrNr=h.MatrNr A p.PersNr=v.gelesenVon  s.Semester  p.Name = ´Sokrates´ A v.VorlNr=h.VorlNr

133 Kostenbasierte Optimierung  Generiere alle denkbaren Anfrageausertungspläne  Enumeration  Bewerte deren Kosten  Kostenmodell  Statistiken  Histogramme  Kalibrierung gemäß verwendetem Rechner  Abhängig vom verfügbaren Speicher  Aufwands-Kostenmodell  Durchsatz-maximierend  Nicht Antwortzeit-minimierend  Behalte den billigsten Plan

134 Problemgröße Suchraum (Planstruktur) 1.# Bushy-Pläne mit n Tabellen [Ganguly et al. 1992]: nenen (2(n-1))!/(n-1)! ,76* ,85 * ,3*10 27 (2(n-1))! (n-1)! 2. Plankosten unterscheiden sich um Größenordnungen 3. Optimierungsproblem ist NP-hart [Ibaraki 1984]

135

136 Sind verschiedene Strategien anwendbar, so benötigt man zur Auswahl eine Kostenfunktion. Sie basiert auf dem Begriff der Selektivität.  Die Selektivität eines Suchprädikats schätzt die Anzahl der qualifizierenden Tupel relativ zur Gesamtanzahl der Tupel in der Relation.  Beispiele:  die Selektivität einer Anfrage, die das Schlüsselattribut einer Relation R spezifiziert, ist 1/ #R, wobei #R die Kardinalität der Relation R angibt.  Wenn ein Attribut A spezifiziert wird, für das i verschiedene Werte existieren, so kann die Selektivität als (#R/i) / #Roder 1/i abgeschätzt werden. Selektivität

137

138 Abschätzung für einfache Fälle

139

140 Parametrisierte Verteilung Histogramm

141

142 I/O-Kosten: Block Nested Loop Join

143 Tuning von Datenbanken  Statistiken (Histogramme, etc.) müssen explizit angelegt werden  Anderenfalls liefern die Kostenmodelle falsche Werte  In Oracle …  analyze table Professoren compute statistics for table;  Man kann sich auch auf approximative Statistiken verlassen  Anstatt compute verwendet man estimate  In DB2 …  runstats on table …

144 Analysieren von Leistungsengpässen Geschätzte Kosten von Oracle

145 Baumdarstellung

146 Beispiel Anfrage SELECT* FROMA, B, C WHERE A.a = B.a AND B.b = C.a ; Blätter  Tabellen innere Knoten  Operatoren Annotation  Ausführungsorte ship client IdxNLJ 1 idxscan 3 fscan 2 fscan 1 A1A1 C3C3 B2B2 HashJ 1 Auswertungsplan

147 Algorithmen - Ansätze  Erschöpfende Suche  Dynamische Programmierung (System R)  A* Suche  Heuristiken (Planbewertung nötig)  Minimum Selectivity, Intermediate Result,...  KBZ-Algorithmus, AB-Algorithmus  Randomisierte Algorithmen  Iterative Improvement  Simulated Annealing

148 Problemgröße Suchraum (Planstruktur) 1.# Bushy-Pläne mit n Tabellen [Ganguly et al. 1992]: nenen (2(n-1))!/(n-1)! ,76* ,85 * ,3*10 27 (2(n-1))! (n-1)! 2. Plankosten unterscheiden sich um Größenordnungen 3. Optimierungsproblem ist NP-hart [Ibaraki 1984]

149 Dynamische Programmierung II Identifikation von 3 Phasen 1.Access Root - Phase: Aufzählen der Zugriffspläne 2.Join Root - Phase: Aufzählen der Join-Kombinationen 3.Finish Root - Phase: sort, group-by, etc.

150 Optimierung durch Dynamische Programmierung  Standardverfahren in heutigen relationalen Datenbanksystemen  Voraussetzung ist ein Kostenmodell als Zielfunktion  I/O-Kosten  CPU-Kosten  DP basiert auf dem Optimalitätskriterium von Bellman  Literatur zu DP:  D. Kossmann und K. Stocker: Iterative Dynamic Programming, TODS, 2000 to appear (online) OS-O Optimaler Subplan Optimaler Subplan

151 DP - Beispiel IndexPläne {ABC} {BC} {AC} {AB} {C} {B} {A} 1. Phase: Zugriffspläne ermitteln

152 DP - Beispiel IndexPläne {ABC} {BC} {AC} {AB} {C}scan(C) {B}scan(B), iscan(B) {A}scan(A) 1. Phase: Zugriffspläne ermitteln

153 DP - Beispiel IndexPläne {ABC} {BC}... {AC}s(A) A s(C), s(C) A s(A) {AB}s(A) A s(B), s(A) A is(B), is(B) A s(A),... {C}scan(C) {B}scan(B), iscan(B) {A}scan(A) Pruning 2. Phase: Join-Pläne ermitteln (2-fach,...,n-fach)

154 DP - Beispiel IndexPläne {ABC} (is(B) A s(A)) A s(C) {BC}... {AC} s(A) A s(C) {AB} s(A) A is(B), is(B) A s(A) {C}scan(C) {B}scan(B), iscan(B) {A}scan(A) 3. Phase: Finalisierung

Algorithmus DynProg 155

156

157 Enumeration  Effiziente Enumeration [Vance 96]  anstatt zunächst alle 2-elem, 3-elem,..., n-elem Pläne sequentiell zu enumerieren: effizientes Interleaving  nur Pläne aus bereits berechneten Zeilen notwendig  Beispiel: 1. A  2. B  3. AB  4. C  5. AC  6. BC  7. ABC