Datenbanken Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Karsten Martiny (Übungen) Architektur eines DBMS Architecture of a DBMS / Course Outline Applications Anwendungen SQL Interface SQL-Schnittstelle Figure inspired by Ramakrishnan/ Gehrke: “Dat abase Management Systems”, McGraw-Hill 2003. Webformulare Web Forms Ausführer Executor Parser Parser Operator Evaluator Operator-Evaluierer Optimizer Optimierer Transaction Transaktions Manager Dateiverwaltungsund Zugriffsmethoden Files and Access Methods Verwalter Puffer-Verwalter Buffer Manager Lock SperrVerwalter Manager Verwalter für Manager externen Disk Space RWiederecovery herstellungsManager Verwalter dieser Teil des thiscourse Kurses SQL-Kommandos SQLCommands Speicher DBMS Dateien für Daten und Indexe... data files, indices, Fall 2008 Datenbank Database Systems Group — Department of Computer Science — ETH Zürich 3 2 Anfragebeantwortung Aggregation SELECT C.CUST_ID, C.NAME, SUM (O.TOTAL) AS REVENUE FROM CUSTOMERS AS C, ORDERS AS O Selektion WHERE C.ZIPCODE BETWEEN 8000 AND 8999 AND C.CUST_ID = O.CUST_ID Join GROUP BY C.CUST_ID Gruppierung ORDER BY C.CUST_ID, C.NAME Sortierung Ein DBMS muss eine Menge von Aufgaben erledigen: • mit minimalen Ressourcen • über großen Datenmengen • und auch noch so schnell wie möglich 3 Danksagung • Diese Vorlesung ist inspiriert von den Präsentationen zu dem Kurs: „Architecture and Implementation of Database Systems“ von Jens Teubner an der ETH Zürich • Graphiken und Code-Bestandteile wurden mit Zustimmung des Autors und ggf. kleinen Änderungen aus diesem Kurs übernommen 4 Sortierung Wichtige Datenbankoperation mit vielen Anwendungen • Eine SQL-Anfrage kann Sortierung anfordern SELECT A,B,C FROM R ORDER BY A • Bulk-loading eines B+-Baumes fußt auf sortierten Daten • Duplikate-Elimination wird besonders einfach SELECT DISTINCT A,B,C FROM R • Einige Datenbankoperatoren setzen sortierte Eingabedateien voraus (kommt später) Wie können wir eine Datei sortieren, die nicht in den Hauptspeicher passt (und auf keinen Fall in den vom Pufferverwalter bereitgestellten Platz)? 5 Zwei-Wege-Mischsortieren (Merge Sort) Sortierung von Dateien beliebiger Größe in nur 3 Seiten aus dem Pufferverwalter • Sortierung von N Seiten in mehreren Durchgängen 6 Beispiel Illustration / Example input file 65 43 47 89 52 13 8 Pass 0 1-page runs 56 34 47 89 25 13 8 Pass 1 2-page runs 34 56 47 89 12 35 8 Pass 2 4-page runs 34 45 67 89 12 35 8 Pass 3 7-page run Fall 2008 12 33 44 55 67 88 9 Systems Group — Department of Computer Science — ETH Zürich 7 123 Zwei-Wege-Mischsortieren Pass 0 (Input: N = 2k unsorted pages; Output: 2k sorted runs) 1. Read N pages, one page at a time 2. Sort records in main memory. 3. Write sorted pages to disk (each page results in a run). This pass requires one page of buffer space. Pass 1 (Input: N = 2k sorted runs; Output: 2k− 1 sorted runs) 1. Open two runs r1 and r2 from Pass 0 for reading. 2. Merge records from r1 and r2, reading input page-by-page. 3. Write new two-page run to disk (page-by-page). This pass requires three pagesof buffer space. .. . Pass n (Input: 2k− n+ 1 sorted runs; Output: 2k− n sorted runs) 1. Open two runs r1 and r2 from Pass n − 1for reading. 2. Merge records from r1 and r2, reading input page-by-page. 3. Write new 2n -page run to disk (page-by-page). This pass requires three pagesof buffer space. .. . Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 122 8 I/O-Verhalten • Um eine Datei mit N Seiten zu sortieren, werden in jedem Durchgang N Seiten gelesen und geschrieben ⟶ 2∙N I/O-Operationen pro Durchgang • Anzahl der Durchgänge: 1 + ⎡ log2 N ⎤ Durchgang 0 Durchgänge 1..k • Anzahl der I/O-Operationen: 2 ∙ N ∙ (1 + ⎡ log2 N ⎤ ) 9 Aufgabe: Anzahl der Durchgänge: 1 + ⎡ log2 N ⎤ Anzahl der I/O-Operationen: 2 ∙ N ∙ (1 + ⎡ log2 N ⎤ ) Wie lange dauert die Sortierung einer 8GB Datei bei einer Travelstar 7k200? – ts = 10 ms, tr = 4.17 ms, ttr = 0,16ms, 8KB pro Seite 10 Lösung ≈ 6d (Herleitung an der Tafel) 11 Externes Mischsortieren • Bisher freiwillig nur 3 Seiten verwendet • Wie kann ein großer Pufferbereich genutzt werden: B Seiten auf einmal bearbeiten • Zwei wesentliche Stellgrößen – Reduktion der initialen Durchgänge durch Verwendung des Pufferspeichers beim Sortieren im Hauptspeicher – Reduktion der Anzahl der Durchgänge durch Mischen von mehr als 2 Seiten 12 Reduktion der Anzahl der Durchgänge Reducing the Number of Initial Runs Mit Seitenavailable im Puffer B we Seiten eingelesen WithBBframes in thekönnen buffer pool, can read Bpages at und Hauptspeicher werden a timeim during Pass 0 and sort sortiert them in memory (% slide 122): Pass 0 (Input: N unsorted pages; Output: :d:N:/:B:e: sorted runs) : : : : : : : : : : : : 1. Read N pages, B pagesat a time : : : : : : : : : : : : : : : : : : 2. Sort records in main memory. 3. Write sorted pages to disk (resulting in d: N: /: B: eruns). : : : : : : This pass uses :Bpagesof buffer space. : : : : : : : •TheAnzahl der I/O-Operationen: number of initial runsdetermines the number of passeswe need to make (% slide 124): 2 ∙ N ∙ (1 + ⎡⌃log2 ⎡ N/B ⌥⎤ ⎤ ) Total number of I/ O operations: 2 · N · 1+ log2 dN/ Be ! . • Was ist das Zugriffsmuster auf diese Ein-Ausgaben? How many I/ Osdoesit now take to sort an 8 GBfile? Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 126 13 Aufgabe: Wie lange dauert die Sortierung einer 8GB Datei mit B=1000 Pufferseiten je 8KB mit einer Travelstar 7k200? – ts = 10 ms, tr = 4.17 ms, ttr = 0,16ms, 8KB pro Seite Anzahl der Durchgänge: 1 + ⎡ log2 ⎡ N /B ⎤ ⎤ Anzahl der I/O-Operationen: 2 ∙ N ∙ (1 + ⎡ log 2 ⎡ N/B ⎤ ⎤ ) 14 Lösung ≈ 3d (Herleitung an der Tafel) 15 Reduktion der Anzahl der Durchgänge Mit B Seiten im Puffer können auch B-1 Seiten gemischt werden (eine Seite dient als Schreibpuffer) (B-1)-Wege-Mischen: • Anzahl der I/O-Operationen: 2 ∙ N ∙ (1 + ⎡ logB-1 ⎡ N/B ⎤⎤ ) • Was ist das Zugriffsmuster auf diese Ein-Ausgaben? 16 Aufgabe: Wie lange dauert die Sortierung einer 8GB Datei mit B=1000 Pufferseiten je 8KB mit einer Travelstar 7k200? – ts = 10 ms, tr = 4.17 ms, ttr = 0,16ms, 8KB pro Seite Anzahl der Durchgänge: 1 + ⎡ logB-1 N /B⎤ Anzahl der I/O-Operationen: 2 ∙ N ∙ (1 + ⎡ log B -1 ⎡ N/B ⎤ ⎤ ) 17 Lösung ca. 4 ∙ 106 Plattenzugriffe mit je 14.33ms ≈ 16h (Herleitung an der Tafel) 18 Blockweise Ein-Ausgabe Man kann das I/O-Muster verbessern, in dem man Blöcke von b Seiten in den Mischphasen verarbeitet • Alloziere b Seiten für jede Eingabe (statt nur eine) • Reduktion der Ein-Ausgabe um Faktor b • Preis: Reduzierte Einfächerung (was in mehr Durchgängen und damit in mehr I/O-Operationen resultiert) 19 Aufgabe: Wie lange dauert die Sortierung einer 8GB Datei mit B=1000 Pufferseiten je 8KB und blockweisem IO mit b=32 bei einer Travelstar 7k200 ? – ts = 10 ms, tr = 4.17 ms, ttr = 0,16ms, 8KB pro Seite – 63 Sektoren pro Spur, Track-to-Track-Suchzeit ts,track-to-track =1 ms – Ein Block mit 8 KB benötigt 16 Sektoren Anzahl der Durchgänge: 1 + ⎡ log ⎡ B/b ⎤ -1 N /(B/b)⎤ Anzahl der I/O-Operationen: 2 ∙ ⎡ N/b ⎤ ∙ (1 + ⎡ log ⎡ B/b ⎤ -1 ⎡ N/(B/b) ⎤ ⎤ ) 20 Lösung Mit blockweisem I/O (B=1000 Blöcke mit b=32 Seiten): ca. 8 ∙ 31250 Plattenzugriffe mit je 27.41 ms ≈2h (Herleitung in der Übung) 21 Hauptsspeicher als Ressource In der Praxis meist genügend Hauptspeicher vorhanden, so dass Dateien in einem Mischdurchgang sortiert werden kann (mit blockweisem I/O). 22 Aufgabe: Wieviel Hauptspeicher wird bei Pufferseiten mit je 8KB und blockweisem IO mit b=32 benötigt, so dass ein Mischvorgang für eine 8GB Datei reicht? Anzahl der Durchgänge: 1 + ⎡ log ⎡ B/b ⎤ -1 N /(B/b)⎤ ⎡ log ⎡ B/b ⎤ -1 ⎡ N/(B/b) ⎤ ⎤ = 1 23 Lösung ≈ 1h (Herleitung in der Übung) 24 Bisher nur IO-Zeit betrachtet Selection Trees Auswahl des nächsten Datensatzes aus Choosing the next record from B − 1(or B/ b − 1) input runs can be B-1 (oder B/b -1) Eingabeläufen kann quite CPU intensive (B − 2 comparisons). CPU-intensiv sein (B-2 Vergleiche) I Use a selection tree to reduce this cost . • Verwende Auswahlbaum zur Kostenreduktion I E.g., “tree of losers” (% D. Knuth, TAoCP , vol. 3): 23 („Tree of Losers“) 95 79 142 91 985 985 .. . 650 670 23 .. . 850 132 873 91 670 605 850 873 .. .. .. .. .. . . . . . 190 79 190 132 .. .. .. . . . 278 412 390 901 95 412 142 390 278 901 .. .. .. .. .. .. . . . . . . • Reduktion der Vergleiche auf log (B-1) I This cuts the number of comparisons to 2log (B − 1). 2 Fall 2008 Systems — The Department of Computer Science — ETH Zürich D.Group Knuth, Art of Computer Programming,vol.3, 1973 130 25 Externes Sortieren: Diskussion • Misch-Schritte können auch parallel ausgeführt werden • Bei ausreichend Speicher reichen zwei Durchgänge auch für große Dateien • Mögliche Optimierungen: – Seitenersetzung während des Sortierens: Erneutes Laden neuer Seiten während des initialen Laufs (dadurch Erhöhen der initialen Lauflänge) – Doppelpufferung: Verschränkung des Seitenladevorgangs und der Verarbeitung, um Latenzzeiten der Festplattenspeicher zu kaschieren 26 Datenbanken Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Karsten Martiny (Übungen) Ausführungspläne Query Plans • Externes Sortieren ist eine External sorting is one Instanz instance of eines a (physical) physikalischen FETCH I XSCAN database operator. / \ / \ I Operators RI DSCN Tabl e: I ndex: Tabl e: Datenbankoperators can be assembled | G_PRE_SI ZE G_PRE_SI ZE G_PRE_SI ZE into a query execution plan. SORT DOC PARENT_I DX DOC • Operatoren können zu | I Each plan operator performs I XSCAN Ausführungsplänen / \ one sub-task of a given I ndex: Tabl e: zusammengesetzt werden G_PRE_SI ZE G_PRE_SI ZE query. Together, the PROP_I DX DOC of a plan evaluateführt • operators Jeder Planoperator the full query. Actual DB2 execution(DB2) plan. Ausführungsplan zur Verarbeitung einer vollständigen Anfrage eine I We’ll have a deeper look into join operatorsnext . Unteraufgabe aus RETURN | NLJOI N / ---/ \ ---\ I Wir werden zunächst Verbundoperatoren betrachten Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 132 28 The Verbundoperator Join Operator 1 (Join) R⋈S The join operator 1 p is actually a short-hand for a combination of Ein Verbundoperator ⋈p ist eine Abkürzung für die crossproduct ⇥ and selection σp. Zusammensetzung von Kreuzprodukt × und Selektion sp , 1p R σp ⇥ S R S One way toergibt implement follow this equivalence: p is to Daraus sich 1eine einfache Implementierung von 1. Enumerate all records in the cross product of Rand S. ⋈ p 2. Then pick those that satisfy p. aus R × S 1. Enumeriere alle Datensätze More try to the obvious inefficiency in 2. advanced Wähle diealgorithms Datensätze, dieavoid p erfüllen Step 1(the size of the intermediate result is |R| · |S|). Ineffizienz aus Schritt 1 kann überwunden werden 29 Verbund-als-geschachtelte-Schleifen Nested Loops Join The nested loopsjoin is the straightforward implementation of Einfache Implementierung des Verbundes: the σ–⇥ combination: 1 Function: nl j oi n ( R, S, p) 2 foreach record r 2 Rdo foreach record s 2 Sdo if hr, si satisfies p then append hr, si to result 3 4 5 Sei und NS number die Seitenzahl R und und p Let NN and NS the of pagesininRand S; letS, pRsei andppR RR S be the S die Anzahl der Datensätze proS.Seite in R und S number of records per page in Rand Anzahl Plattenzugriffe: The totalder number of disk readsis then NNRR ++ ppRr ·∙NNRR·N∙S N. S | {z } #Tupel in#Rtuples in R Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 134 30 Verbund-als-geschachtelte-Schleifen Nur 3 Seiten nötig (zwei Seiten fürs Lesen von R und S und eine um das Ergebnis zu schreiben) I/O-Verhalten: Leider sehr viele Zugriffe • Annahme pR = pS = 100, NR = 1000, Ns = 500: 1000 + 5 ∙ 107 Seiten zu lesen • Mit einer Zugriffszeit von 10ms für jede Seite dauert der Vorgang 140 Stunden • Vertauschen von R und S (kleinere Relation S nach außen) verbessert die Situation nur marginal Seitenweises Lesen bedingt volle Plattenlatenz, obwohl beide Relationen in sequentieller Ordnung verarbeitet werden. 31 Blockweiser Verbund mit Schleifen Block Nested Loops Join Again we canvon saveKosten random durch access cost by reading Rand Sin Einsparung wahlfreien Zugriff durch blocksof, say, bR and bS pages. blockweises Lesen von R und S mit bR und bS vielen Seiten 1 Function: bl ock nl j oi n ( R, S, p) 2 foreach bR-sized block in Rdo foreach bS-sized block in Sdo find matches in current R- and S-blocks and append them to the result ; 3 4 Ris still read once,gelesen, but now with only dNRnur / bRe disk seeks. • RI wird vollständig aber mit ⎡NR/b R⎤ I Sis scanned only dNR/ bRe times now, and we need to perform Lesezugriffen dNR/ bRe · dNS/ bSe disk seeks to do this. • S nur ⎡NR/bR⎤ mal gelesen, mit ⎡NR/bR⎤ ∙ ⎡NS/bS⎤ Plattenzugriffen Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 32 136 Wahl von bR und bS Choosing bR and bS Pufferbereich mit B B==100 Rahmen, NR =NS1000, E.g., buffer pool with 100 frames, NR = 1000, = 500: NS = 500: Blockgröße fürs Lesen von S (b ) block size used for reading S(bSs) Plattenzugriffe disk seeks 7000 90 80 70 60 50 40 30 20 10 7000 6000 6000 5000 5000 4000 4000 3000 3000 2000 2000 1000 1000 0 10 20 30 40 50 60 70 80 90 0 block size used reading R(b Blockgröße fürsfor Lesen von R (bR)) R Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 137 33 Datenbanken Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Karsten Martiny (Übungen) Blockweiser Verbund mit Schleifen Block Nested Loops Join Again we canvon saveKosten random durch access cost by reading Rand Sin Einsparung wahlfreien Zugriff durch blocksof, say, bR and bS pages. blockweises Lesen von R und S mit bR und bS vielen Seiten 1 Function: bl ock nl j oi n ( R, S, p) 2 foreach bR-sized block in Rdo foreach bS-sized block in Sdo find matches in current R- and S-blocks and append them to the result ; 3 4 Ris still read once,gelesen, but now with only dNRnur / bRe disk seeks. • RI wird vollständig aber mit ⎡NR/b R⎤ I Sis scanned only dNR/ bRe times now, and we need to perform Lesezugriffen dNR/ bRe · dNS/ bSe disk seeks to do this. • S nur ⎡NR/bR⎤ mal gelesen, mit ⎡NR/bR⎤ ∙ ⎡NS/bS⎤ Plattenzugriffen Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 35 136 Performanz des Hauptspeicher-Verbunds In-Memory Join Performance • Zeile 4 in block_nljoin(R, S, p) bedingt einen I Line 4 in bl ock nl j oi n ( R, S, p) implies an in-memory join Hauptspeicherverbund Blocken aus R und between the R- and Szwischen -blocks currently in memory. S I Building a hash table over the R-block can speed up this join considerably. • Aufbau einer Hashtabelle kann den Verbund erheblich beschleunigen 1 Function: bl ock nl j oi n’ ( R, S, p) 2 3 4 5 6 foreach bR-sized block in Rdo build an in-memory hash table H for the current R-block ; foreach bS-sized block in Sdo foreach record s in current S-block do probe H and append matching hr, si tuples to result ; I Note that this optimization only helps equi-joins. • Funktioniert nur für Equi-Verbunde Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 138 36 Indexbasierte Verbunde R⋈S Index Nested Loops Join Verwendung eines Index für die innereofRelation S the The index nested loops join takes advantage an index on (ggf. innere und äußere inner relation (swap outer $vertauschen) inner if necessary): 1 Function: i ndex nl j oi n ( R, S, p) 2 foreach record r 2 Rdo probe index using r and append all matching tuples to result ; 3 • Index muss verträglich mit der Verbundbedingung I The index must be compatible with the join condition p. sein I Hash indices, e.g., only support equality predicates. I Remember about composite keys in – Hash-Index (nurthe fürdiscussion Gleichheitsprädikate) B+-trees (% slide 73). – Vergleiche auch die Diskussion über I Such predicates are also called sargable (SARG: search zusammengesetzte Schlüssel in B+-Bäumen argument % Selinger et al., SIGMOD 1979) • ArgumenteAccess heißen „sargable“ (SARG= search Path Selection in a Relational Database Management System, Selinger et al., SIGMOD 1979 argument) Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 37 139 I/O-Verhalten Für jeden Datensatz in R verwende Index zum Auffinden von korrespondierenden S-Tupeln. Für jedes R-Tupel sind folgende Kosten einzukalkulieren: 1. Zugriffskosten für den Index zum Auffinden des ersten Eintrags: Nidx I/O-Operationen 2. Entlanglaufen an den Indexwerten (Scan), um passende Rids zu finden (I/O-Kosten vernachlässigbar) 3. Holen der passenden S-Tupel aus den Datenseiten – Für ungeclusterten Index: n I/O-Operationen – Für geclusterten Index: ⎡n/ps⎤ I/O-Operationen Wegen 2. und 3. Kosten von der Verbundgröße abhängig 38 Zugriffskosten für Index Falls Index ein B+-Baum: • Einzelner Indexzugriff benötigt Zugriff auf h Indexseiten1 • Bei wiederholtem Zugriff sind diese Seiten im Puffer • Effektiver Wert der I/O-Kosten 1-3 I/O-Operationen Falls Index ein Hash-Index: • Caching nicht effektiv (kein lokaler Zugriff auf Hashfeld) • Typischer Wert für I/O-Kosten: 1,2 I/O-Operationen (unter Berücksichtigung von Überlaufseiten) Index rentiert sich stark, wenn nur einige Tupel aus einer großen Tabelle im Verbund landen 1 h = Höhe des B+-Baumes 39 Sortier-Misch-Verbund Sort-Merge Join Verbundberechnung wird einfach wenn Join computation becomes particularly simple if both inputssortiert are Eingaberelationen bzgl. Verbundattribut(en) sorted with respect to the join attribute(s). • Misch-Verbund mischt Eingabetabellen ähnlich I The merge join essentially mergesboth input tables, much wie likebeim we didSortieren for sorting. I Contrast to sorting, however, we need to be careful • Es gibt aber mehrfache Korrespondenzen in der wheneverRelation a tuple has multiple matches in the other relation: anderen A " f oo" " f oo" " bar " " baz" " baf " B 1 2 2 2 4 1 B= C C 1 2 2 3 D false true false true I Merge join is typically equi-joinsonly. • Misch-Verbund nurused fürfor Equi-Verbünde verwendbar Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 142 40 Misch-Verbund 1 2 3 4 5 6 8 9 10 11 13 14 / / ↵ , β: join columns in R, S r position of first tuple in R; s position of first tuple in S; while r 6 = eof and s 6 = eof do while r.↵ < s.β do advance r ; / / r, s, s0: cursors over R, S, S / / eof: end of file marker while r.↵ > s.β do advance s ; 7 12 Function: mer ge j oi n ( R, S, ↵ = β) s0 s ; / / Remember current position in S while r.↵ = s0.β do / / All R-tuples with same ↵ value s s0 ; / / Rewind sto s0 while r.↵ = s.β do / / All S-tuples with same β value append hr, si to result ; advance s; advance r ; 15 Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 143 41 I/O-Verhalten • Wenn beide Eingaben sortiert und keine außergewöhnlich langen Sequenzen mit identischen Schlüsselwerten vorhanden, dann ist der I/OAufwand NR + NS (das ist dann optimal) • Durch blockweises I/O treten fast immer sequentielle Lesevorgänge auf • Es kann sich für die Verbundberechnung auszahlen, vorher zu sortieren, insbesondere wenn später eine Sortierung der Ausgabe gefordert wird • Ein abschließender Sortiervorgang kann auch mit einem Misch-Verbund kombiniert werden, um Festplattentransfers einzusparen 42 Aufgabe: Bei welchen Eingaben tritt beim Sortier-Misch-Verbund das schlimmste Verhalten auf? 43 Lösung • Wenn all verbundenen Attribute gleiche Werte beinhalten, dann ist das Ergebnis ein Kreuzprodukt. • Der Sortier-Misch-Verbund verhält sich dann wie ein geschachtelte-Schleifen-Verbund. 44 Hash-Verbund • Sortierung bringt korrespondierende Tupel in eine „räumliche Nähe“, so dass eine effiziente Verarbeitung möglich ist • Ein ähnlicher Effekt erreichbar mit Hash-Verfahren Hash Join I Sorting effectively brought related tuples into spacial • Zerlege R und Teilrelationen R1, ..., Rn und proximity, which S we in exploited in the merge join algorithm. I We can achieve a similar effect with hashing, too. S1,...,S der gleichen Hashfunktion (angewendet n mit I Partition Rand Sinto partitions R1, . . . , Rn and S1, . . . , Sn auf dieusing Verbundattribute) the same hash function (applied to the join attributes). Partition 1(R1 and S1) Relation R h Partition 2 (R2 and S2) Partition 3 (R3 and S3) Relation S .. . h Partition n (Rn and Sn ) Sj = ?i ≠ for jall i 6 = j. • Ri ⋈I RObserve fürRi 1alle j = that Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 145 45 Hash-Verbund • Durch Partitionierung werden kleine Relationen Ri and Si geschaffen • Korrespondierende Datensätze kommen garantiert in korrespondierende Partitionen der Relationen • Es muss Ri ⋈ Si (für all i) berechnet werden (einfacher) • Die Anzahl der Partitionen n (d.h. die Hashfunktion) sollte mit Bedacht gewählt werden, so dass Ri ⋈ Si als Hauptspeicher-Verbund berechnet werden kann • Hierzu kann wiederum eine (andere) Hashfunktion Warum eine verwendet werden (siehe blockweisen Verbund mit andere Schleifen) Hashfunktion? 46 Hash-Verbund-Algorithmus Join Algorithm Hash 1 2 3 4 5 6 7 8 9 10 Function: hash j oi n ( R, S, ↵ = β) foreach record r 2 Rdo append r to partition Rh(r.↵ ) foreach record s 2 Sdo append s to partition Sh(s.β) foreach partition i 2 1, . . . , n do build hash table H for Ri , using hash function h0; foreach block in Si do foreach record s in current Si -block do probe H and append matching tuples to result ; Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 47 147 Gruppierung und Duplikate-Elimination • Herausforderung: Finde identische Datensätze in einer Datei • Ähnlichkeiten zum Eigenverbund (self-join) basierend auf allen Spalten der Relation – Man könnte einen Hash-Verbund-ähnlichen Algorithmus verwenden oder Sortierung, um Duplikate-Elimination oder Gruppierung zu realisieren 48 Andere Anfrage-Operatoren Projektion p • Implementierung durch a. Entfernen nicht benötigter Spalten b. Eliminierung von Duplikaten • Die Implementierung von a) bedingt das Ablaufen (scan) aller Datensätze in der Datei, b) siehe oben • Systeme vermeiden b) sofern möglich (in SQL muss Duplikate-Eliminierung angefordert werden) Selektion s • Ablaufen (scan) aller Datensätze • Eventuell Sortierung ausnutzen oder Index verwenden 49 Organisation der Operator-Evaluierung Orchestrating Operator Evaluation So far wegehen have assumed that all database consume • Bisher wir davon aus, operators dass Operatoren and produce files(i.e., on-disk items): ganze Dateien verarbeiten ··· σ ⇡ 1 ··· ⇡ ··· file1 file2 file3 filen • Das erzeugt offensichtlich viel I/O I Obviously, this causes a lot of I/ O. I In addition,lange we sufferAntwortzeiten from long response times: • Außerdem: An operator cannot start computing its result before all – Ein Operator kann nicht anfangen solange nicht seine its input files are fully generated (“materialized”). Eingaben vollständig (materialisiert Effectively, all operatorsbestimmt are executedsind in sequence. sind) – Operatoren werden nacheinander ausgeführt I I Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 152 50 Pipeline-orientierte Verarbeitung • Alternativ könnte jeder Operator seine Ergebnisse direkt an den nachfolgenden senden, ohne die Ergebnisse erst auf die Platte zu schreiben • Ergebnisse werden so früh wie möglich weitergereicht und verarbeitet (Pipeline-Prinzip) • Granularität ist bedeutsam: – Kleinere Brocken reduzieren Antwortzeit des Systems – Größere Brocken erhöhen Effektivität von Instruktions-Cachespeichern – In der Praxis meist tupelweises Verarbeiten verwendet 51 Finding the right plan can dramatically impact performance. Auswirkungen auf die Performanz SELECT L. L PARTKEY, L. L QUANTI TY, L. L EXTENDEDPRI CE FROM LI NEI TEM L, ORDERS O, CUSTOMER C SELECT L.L_PARTKEY, L.L_QUANTITY, L.L_EXTENDEDPRICE WHFROM ERELINEITEM L. L ORD ERORDERS KEY =O,O.CUSTOMER O ORDER L, CKEY WHERE = O.O AND L.L O. OORDERKEY CUSTKEY = CORDERKEY . C CUSTKEY AND O.O_CUSTKEY = C.C_CUSTKEY AND AND C. CC.C_NAME NAME == ’ ’IBM I BMCorp.’ Cor p. ’ • 57 Tupelweises 57 Verarbeiten 1 1 14 der Relation C 6 mio 1 6 mio 1 L 1.5mio • Sofortiges Weiterleiten σ 1 1 σ O 150,000 1.5mio 6 mio nach der Selektion 150,000 L O C C • Kombiniert mit tupelweisem Verarbeiten I In terms of execution times, these differences can easily der Relationen O und L mean “seconds versus days.” Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 163 52 Volcano Iteratormodell • Aufrufschnittstelle wie bei Unix-Prozess-Pipelines • Im Datenbankkontext auch Open-Next-CloseSchnittstelle oder Volcano Iteratormodell genannt • Jeder Operator implementiert – open() Initialisiere den internen Zustand des Operators – next() Produziere den nächsten Ausgabe-Datensatz – close() Schließe allozierte Ressourcen • Zustandsinformation wird Operator-lokal vorgehalten Goetz Graefe. Volcano—An Extensibel and Parallel Query Evaluation System. Trans. Knowl. Data Eng. vol. 6, no. 1, February 1994 53 Beispiel: Selektion (s) Example: Selection (σ) I Input operator R, predicate p. Eingabe: Relation R, Prädikat p 1 Function: open ( ) 2 R.open ( ) ; 1 Function: cl ose ( ) 2 R.cl ose ( ) ; 1 Function: next ( ) 2 4 while ((r R.next ( ) ) 6 = eof) do if p(r) then return r ; 5 return eof ; 3 Fall 2008 Systems Group — Department of Computer Science — ETH Zürich 156 54 Geschachtelte Schleifen Verbund: VolcanoHow would you implement a Volcano-style nested loops join? Stil 1 Function: open ( ) 2 4 R.open ( ) ; S.open ( ) ; r R.next ( ) ; 1 Function: next ( ) 2 while (r 6 = eof) do while ((s S.next ( ) ) 6 = eof) do if p(r, s) then return hr, si ; 3 3 4 5 6 7 8 9 Fall 2008 S.cl ose ( ) ; S.open ( ) ; R.next(); sr ⟵ S .next ( ) ; 1 Function: cl ose ( ) 2 R.cl ose ( ) ; S.cl ose ( ) ; 3 R <- R.next() return eof ; Systems Group — Department of Computer Science — ETH Zürich 157 55 Blockierende Operatoren • Pipelining reduziert Speicheranforderungen und Antwortzeiten, da jeder Datensatz gleich weitergeleitet • Funktioniert so nicht für alle Operatoren • Welche? – Externe Sortierung – Hash-Verbund – Gruppierung und Duplikate-Elimination über einer unsortierten Eingabe • Solche Operatoren nennt man blockierend • Blockierende Operatoren konsumieren die gesamte Eingabe in einem Rutsch bevor die Ausgabe erzeugt 56 werden kann (Daten auf Festplatte Zusammenfassung Teile-und-Herrsche • Zerlegung einer großen Anfrage in kleine Teile • Beispiel: – Laufgenerierung und externe Sortierung – Partitionierung mit Hashfunktion (Hash-Verbund) Blockweises Durchführen von I/O • Lesen und Schreiben von größeren Einheiten kann die Verarbeitungszeit deutlich reduzieren, da wahlfreier Zugriff auf Daten vermieden wird Pipeline-orientierte Verarbeitung – Speicherreduktion und Laufzeitverbesserung durch Vermeidung der vollständigen Materialisierung von Zwischenresultaten Beim nächsten Mal... Architecture of a DBMS / Course Outline Applications Anwendungen SQL Interface SQL-Schnittstelle Figure inspired by Ramakrishnan/ Gehrke: “Dat abase Management Systems”, McGraw-Hill 2003. Webformulare Web Forms Ausführer Executor Parser Parser Operator Evaluator Operator-Evaluierer Optimizer Optimierer Transaction Transaktions Manager Dateiverwaltungsund Zugriffsmethoden Files and Access Methods Verwalter Puffer-Verwalter Buffer Manager Lock SperrVerwalter Manager Verwalter für Manager externen Disk Space RWiederecovery herstellungsManager Verwalter dieser Teil des thiscourse Kurses SQL-Kommandos SQLCommands Speicher DBMS Dateien für Daten und Indexe... data files, indices, Fall 2008 Datenbank Database Systems Group — Department of Computer Science — ETH Zürich 3 58