8. Datenbanktuning Motivation § Fokus bisher lag bisher auf sinnvoller Abbildung eines Ausschnitts der realen Welt in einer relationalen Datenbank § Beliebige SQL-Anfragen können auf den Daten ausgewertet werden, sobald sie einmal in relationaler Datenbank gespeichert sind § RDBMSs bieten verschiedene Möglichkeiten, um die typischen Anfragen, die aus einer Anwendung heraus gestellt werden, in kürzerer Zeit beantworten zu können Datenbanken / Kapitel 8: Datenbanktuning 2 Inhalt § 8.1 Indizes § 8.2 Statistiken § 8.3 Systemparameter Datenbanken / Kapitel 8: Datenbanktuning 3 8.1 Indizes § RDBMS speichern die Datensätze (Tupel) einer Tabelle (Relation) in den Seiten einer Datendatei § Indizes erlauben eine Beschleunigung des Zugriffs auf die Datensätze anhand ihres Primärschlüssel oder anhand von Attributwerten § RDBMS muss angelegte Indizes synchron mit den Daten halten und Änderungen an den Daten in die entsprechenden Indizes übernehmen Datenbanken / Kapitel 8: Datenbanktuning 4 Anfragearten § Finde Tupel anhand von Primärschlüssel (z.B. Student mit der Matrikelnummer 196678) § Finde Tupel anhand eines Attributwerts (z.B. Studenten mit Name Müller) § Finde Tupel anhand mehrerer Attributwerte (z.B. Studenten mit Name Müller und Vorname Thomas) Datenbanken / Kapitel 8: Datenbanktuning 5 Anfragearten § Finde Tupel anhand eines Attributwertebereichs (z.B. Studenten zwischen vierten und sechsten Semester) § Finde Tupel anhand mehrerer Attributwertebereiche (z.B. Studenten mit Name M* und Vorname T*) Datenbanken / Kapitel 8: Datenbanktuning 6 Indizes in SQL § Anlegen von Indizes mittels CREATE INDEX Kommando 1 2 CREATE INDEX < Name des Index> ON < Name der Tabelle > ( < Attribute >) § Beispiele: 1 2 CREATE INDEX StudentenSemesterName ON Studenten ( Semester ASC , Name ASC ) 1 2 1 2 CREATE INDEX VorlesungenSWSTitel ON Vorlesungen ( SWS DESC , Titel ) CREATE INDEX Vo rl es un gen Ti te lV orl Nr ON Vorlesungen ( Titel , VorlNr ) Datenbanken / Kapitel 8: Datenbanktuning 7 Indexstrukturen § RDBMSs unterstützen meist verschiedene Indexstrukturen zur Umsetzung von Indizes § Suchbäume § Hashbasierte Indexstrukturen § Bitmaps für Attribute mit wenigen möglichen Werten § Indexstrukturen für mehrdimensionale Daten (z.B. R-Bäume) § Indexstrukturen für Textdaten (z.B. invertierte Datei) Datenbanken / Kapitel 8: Datenbanktuning 8 Rückblick: Binäre Suchbäume § Binäre Suchbäume zur effizienten Suche im Hauptspeicher 6 8 4 2 5 7 § Balancierte binäre Suchbäume (z.B. AVL-Bäume und Rot-Schwarz-Bäume) § Jeder Knoten hat bis zu zwei Kinder § Suchen, Einfügen, Löschen in O(log2 n) § Wieso nicht unverändert geeignet als Indexstrukturen? Datenbanken / Kapitel 8: Datenbanktuning 9 B-Bäume § B-Baum ist ein balancierter Suchbaum, bei dem sich die Gestalt der Knoten an der Seitengröße orientiert § Knoten muss in eine Seite passen § Knoten bestehen aus § mehreren Werten als Schlüssel § mehreren Verweisen auf Kindknoten § mehreren Tupelnummern (oder gar den Tupeln selbst) 12 (2,1) Datenbanken / Kapitel 8: Datenbanktuning 20 (7,2) 34 (9,3) 42 (2,3) 10 B-Bäume § B-Bäume haben damit typischerweise einen höheren Verzweigungsgrad (fan out) als binäre Suchbäume § Balancierung eines B-Baums wird mittels seiner Ordnung m und den Füllgraden der Knoten erreicht § jeder Knoten außer der Wurzel enthält mindestens m Einträge § jeder Knoten enthält höchstens 2*m Einträge § jeder Knoten ist entweder Blattknoten ohne Kinder oder hat ein Kind mehr als Einträge § alle Blattknoten liegen auf der gleichen Stufe Datenbanken / Kapitel 8: Datenbanktuning 11 B-Bäume § Beispiel: B-Baum der Ordnung m=1 12 2 4 13 Datenbanken / Kapitel 8: Datenbanktuning 20 15 50 25 35 27 31 65 37 55 77 79 12 Suche in B-Bäumen § Suche in B-Baum § Beginne beim Wurzelknoten § Falls der gesuchte Wert einem Schlüssel entspricht, gibt die zugehörige Tupelnummer zurück § Verfolge ansonsten Verweis zu Kindknoten, der § links vom kleinsten Schlüssel größer als gesuchter Wert steht § rechts vom größten Schlüssel kleiner als gesuchter Wert steht § Fahre mit Kindknoten analog fort § Höhe des B-Baums ist in O(logm n) § Suche auf B-Baum benötigt O(logm n) Zugriffe Datenbanken / Kapitel 8: Datenbanktuning 13 Suche in B-Bäumen § Beispiel: Suche nach dem Wert 22 im B-Baum 12 2 4 20 13 15 50 25 35 27 31 65 37 55 77 79 Wert 22 nicht enthalten Datenbanken / Kapitel 8: Datenbanktuning 14 Einfügen in B-Bäumen § Einfügen in B-Baum § Suche Blattknoten, in dem der einzufügende Wert stünde § Enthält der Blattknoten wenigstens m und weniger als 2*m Einträge, dann füge den Wert im Blattknoten ein § Enthält der Blattknoten bereits genau 2*m Einträge, dann zerteile diesen in zwei Blattknoten mit je m Einträgen und reiche mittleres Element an Elternknoten hoch; dort wird analog fortgefahren § Einfügen in B-Baum benötigt O(logm n) Zugriffe Datenbanken / Kapitel 8: Datenbanktuning 15 Einfügen in B-Bäumen § Beispiel: Einfügen des Werts 7 12 2 4 13 Datenbanken / Kapitel 8: Datenbanktuning 20 15 50 25 35 27 31 65 37 55 77 79 16 Einfügen in B-Bäumen § Beispiel: Einfügen des Werts 7 12 2 4 13 Datenbanken / Kapitel 8: Datenbanktuning 20 15 50 25 35 27 31 65 37 55 77 79 17 Einfügen in B-Bäumen § Beispiel: Einfügen des Werts 7 12 2 4 7 13 20 15 50 25 35 27 31 65 37 55 77 79 Knoten voll Datenbanken / Kapitel 8: Datenbanktuning 18 Einfügen in B-Bäumen § Beispiel: Einfügen des Werts 7 4 12 2 13 20 15 50 25 35 27 31 65 37 55 77 79 7 Datenbanken / Kapitel 8: Datenbanktuning 19 Löschen in B-Bäumen § Löschen im B-Baum § Suche Knoten, in dem der gesuchte Wert steht § Handelt es sich dabei um einen Blattknoten, so entferne den Eintrag und behandle evtl. Unterlauf des Knotens, falls Knoten danach weniger als m Einträge enthält § Handelt es sich um einen inneren Knoten, so ersetze den Eintrag durch den Eintrag von einem Blattknoten mit nächstkleineren Schlüssel und behandle evtl. Unterlauf Datenbanken / Kapitel 8: Datenbanktuning 20 Löschen in B-Bäumen § Behandlung eines Unterlaufs (weniger als m Einträge) durch Ausgleichen oder Verschmelzen mit Nachbarknoten § Hat der Nachbarknoten mehr als m Einträge, werden diese und die Einträge des untergelaufenen Knotens auf beide Knoten verteilt § Hat der Nachbarknoten genau m Einträge, so werden die beiden Knoten verschmolzen und der mittlere Eintrag, wie beim Einfügen, zum Elternknoten weitergereicht § Löschen im B-Baum benötigt O(logm n) Zugriffe Datenbanken / Kapitel 8: Datenbanktuning 21 Löschen in B-Bäumen § Beispiel: Löschen des Werts 25 12 2 4 13 Datenbanken / Kapitel 8: Datenbanktuning 20 15 50 25 35 27 31 65 37 55 77 79 22 Löschen in B-Bäumen § Beispiel: Löschen des Werts 25 12 2 4 20 13 15 50 25 35 27 31 65 37 55 77 79 25 in innerem Knoten, ersetze durch 20 aus Blattknoten Datenbanken / Kapitel 8: Datenbanktuning 23 Löschen in B-Bäumen § Beispiel: Löschen des Werts 25 12 2 4 15 50 20 35 27 13 31 65 37 55 77 79 Unterlauf des Blattknotens Datenbanken / Kapitel 8: Datenbanktuning 24 Löschen in B-Bäumen § Beispiel: Löschen des Werts 25 12 2 4 13 20 15 50 27 35 31 65 37 55 77 79 Ausgleichen mit Nachbarknoten Datenbanken / Kapitel 8: Datenbanktuning 25 B-Bäume § Im B-Baum enthalten sowohl innere Knoten als auch Blattknoten Tupelnummer (oder gar ganze Tupel) § B-Bäume unterstützen Suche nach einem bestimmten Wert effizient; die Suche nach allen Einträgen mit einem Schlüssel in einem bestimmten Wertebereich wird jedoch nicht effizient unterstützt, da eine Traversierung des entsprechenden Unterbaums notwendig wäre Datenbanken / Kapitel 8: Datenbanktuning 26 B+-Bäume § B+-Bäume sind eine verbesserte Variante der B-Bäume, die in der Praxis sehr häufig eingesetzt werden § B+-Bäume sind hohle Bäume, d.h. Tupelnummern (oder Tupel selbst) befinden sich nur in den Blattknoten; die inneren Knoten enthalten nur Schlüssel und Verweise, sie dienen somit nur der Navigation § B+-Bäume verketten die Blattknoten doppelt, wodurch Bereichsanfragen effizient ermöglicht werden Datenbanken / Kapitel 8: Datenbanktuning 27 B+-Bäume § Beispiel: B+-Baum der Ordnung m=1 55 31 1 15 5 12 2 4 12 13 Datenbanken / Kapitel 8: Datenbanktuning 55 31 15 20 25 27 31 35 37 50 55 65 28 Bereichsanfragen in B+-Bäumen § Bereichsanfrage in B+-Bäumen § Suche nach linker Grenze des Wertebereichs § Durchlaufe Blattknoten bis ein Schlüssel mit größerem Wert als rechte Grenze des Wertebereichs erreicht § Bereichsanfrage benötigt O(logm n + r/m) Zugriffe, mit r als Anzahl der zurückgelieferten Einträge Datenbanken / Kapitel 8: Datenbanktuning 29 Bereichsanfragen in B+-Bäumen § Beispiel: Suche Einträge mit Schlüssen im Bereich [13,31] 55 31 1 15 5 12 2 4 12 13 Datenbanken / Kapitel 8: Datenbanktuning 55 31 15 20 25 27 31 35 37 50 55 65 30 Rückblick: Hashverfahren § Hashtabellen zur effizienten Suche im Hauptspeicher § Werte werden mittels Hashfunktion auf Buckets eines Arrays abgebildet 0 31 1 § Typische Hashfunktion: h(k) = (k mod p) mod n mit Primzahl p und Kapazität n § Kollisionen können z.B. durch Verkettung behandelt werden § Suche, Einfügen, Löschen in O(1) (erwartet) Datenbanken / Kapitel 8: Datenbanktuning 2 3 10 24 4 5 6 13 p = 31 n = 7 31 Hashbasierte Indizes § Hashbasierte Indizes in Datenbanksystemen § Werte des Primärschlüssels oder anderer Attribute werden mittels einer Hashfunktion auf Buckets abgebildet § Jedes Bucket entspricht initial einer Seite, in der die Tupel oder Tupelnummern gespeichert werden § Kollisionen können wie im Hauptspeicher z.B. durch Verkettung von Seiten behandelt werden Datenbanken / Kapitel 8: Datenbanktuning 32 Hashbasierte Indizes § Hashbasierte Indizes unterstützen Suche, Einfügen und Löschen effizient, sofern vorab bekannt ist, wie viele Datensätze indiziert werden und die Zahl der Buckets entsprechend gewählt werden kann § Verwendet man zu viele Buckets (Seiten) wird übermäßig viel Speicher verwendet; bei zu wenigen häufen sich die Kollisionen und die Effizienz nimmt ab § Hashbasierte Indizes unterstützen nur die Suche nach einem bestimmten Wert, jedoch keine Bereichsanfragen Datenbanken / Kapitel 8: Datenbanktuning 33 Indizes in RDBMSs § RDBMSs (z.B. PostgreSQL und Oracle) implementieren verschiedene Arten von Indizes und erlauben dem Benutzer, die Art des Index sowie zusätzliche Parameter (z.B. den Füllgrad) anzugeben Beispiel: Hashbasierter Index in PostgreSQL 1 2 CREATE INDEX S t ud e n t e n_ M a t r Nr ON Studenten USING hash ( MatrNr ) § Beispiel: Index (B+-Baum) über mehrere Attribute 1 2 CREATE INDEX Studenten_Name_Vorname ON Studenten ( Name , Vorname ) Datenbanken / Kapitel 8: Datenbanktuning 34 Trick #1: Sortieren mit Indizes § Indizes können verwendet werden, um Daten vorsortiert zu speichern und dem RDBMS ein Sortieren zu sparen § Beispiel: 1 2 3 SELECT * FROM Studenten ORDER BY Name , Vorname lässt sich durch einen Index folgender Art unterstützen 1 2 CREATE INDEX S t u d e n t e n N a m e V o r n a m e ON Studenten ( Name ASC , Vorname ASC ) Datenbanken / Kapitel 8: Datenbanktuning 35 Trick #2: Vorberechnen mit Indizes § Einige RDBMSs erlauben Funktionsausdrücke in Indizes, so dass diese zum Vorberechnen genutzt werden können § Beispiel: 1 2 3 SELECT * FROM Studenten WHERE lower ( Name ) = ’m ü ller ’ AND lower ( Vorname ) LIKE ’ th % ’ lässt sich durch einen Index folgender Art unterstützen 1 2 CREATE INDEX S t u d e n t e n L o w e r N a m e L o w e r V o r n a m e ON Studenten ( lower ( Name ) ASC , lower ( Vorname ) ASC ) Datenbanken / Kapitel 8: Datenbanktuning 36 Trick #3: Anfragen nur mit Indizes § Sofern alle benötigten Attribute gespeichert sind, können einige RDBMSs Anfragen vollständig Index auswerten § Beispiel: 1 2 3 4 SELECT FROM WHERE ORDER BY MatrNr , Name , Vorname Studenten Semester = 3 Name , Vorname lässt sich durch einen Index folgender Art unterstützen 1 2 CREATE INDEX S t u d e n t e n S e m e s t e r M a t r N r N a m e V o r n a m e ON Studenten ( Semester , Name , Vorname , MatrNr ) Datenbanken / Kapitel 8: Datenbanktuning 37 8.2 Statistiken § SQL ist deklarativ, d.h. RDBMS muss selbst einen geeigneten Auswertungsplan zu einer gegebenen Anfrage bestimmen § RDBMS muss Kosten verschiedener Auswertungspläne abschätzen und miteinander vergleichen können § Statistiken über die gespeicherten Daten sind essentiell, um Kosten realistisch schätzen zu können und günstigen Auswertungsplan auszuwählen Datenbanken / Kapitel 8: Datenbanktuning 38 Histogramme Table 1 § Histogramme als vorherrschendes Verfahren in RDBMSs unterteilen Wertebereich eines Attributs in β Buckets Semester Anzahl 1 2 3 4 5 6 1.000 800 700 600 500 450 [1,3] 2500 [4,6] 1550 7[7,9] 400 [10,12] 8 9 390 380 [13,15] 10 11 12 13 14 15 280 250 150 75 20 5 1170 680 100 § Equiwidth-Histogramme § Buckets haben gleiche Breite 3,000 2,250 —=5 1,500 750 0 Datenbanken / Kapitel 8: Datenbanktuning [1,3] [4,6] [7,9] [10,12] [13,15] 39 Statistiken in SQL § RDBMSs benötigen Statistiken, um effiziente Auswertungspläne auswählen zu können § Syntax zum Berechnen von Statistiken systemabhängig § MS SQL Server 1 2 UPDATE STATISTICS < Tabelle > WITH SAMPLE 10 PERCENT berechnet Statistiken auf Tabelle mittels 10% Stichprobe § PostgreSQL 1 ANALYZE < Tabelle > berechnet Statistiken auf Tabelle Datenbanken / Kapitel 8: Datenbanktuning 40 8.3 Systemparameter § RDBMSs bieten systemspezifische Parameter, um Einfluss auf Verhalten des Systems zu nehmen, z.B. § Maximale Größe des verwendeten Hauptspeichers § Maximale Anzahl paralleler Threads § Größe verschiedener Puffer § Verfügbare Operatoren § etc. § Tuning der Systemparameter (z.B. Hauptspeicher) ist essentiell, aber leider hochgradig systemabhängig und wird von daher hier nicht weiter vertieft Datenbanken / Kapitel 8: Datenbanktuning 41 Zusammenfassung § Indizes erlauben die Beschleunigung von Anfragen, die aus einer Anwendung heraus gestellt werden § B+-Bäume und Hashing als gängigste Indexstrukturen § Indizes können nicht nur das Finden von Tupeln, sondern auch Sortieren, Funktionsberechnung oder ganze Anfragen beschleunigen § Statistiken sind essentiell, damit RDBMS zu gegebener Anfrage effizienten Auswertungsplan bestimmen kann Datenbanken / Kapitel 8: Datenbanktuning 42 Literatur [1] A. Kemper und A. Eickler: Datenbanksysteme – Eine Einführung, De Gruyter Oldenbourg, 2013 (Kapitel 7) [2] G. Saake, K.-U. Sattler und A. Heuer: Datenbanken - Konzepte und Sprachen, mitp Professional, 2013 (Kapitel 7) Datenbanken / Kapitel 8: Datenbanktuning 43