Kapitel 4 Anfrageauswertung

Werbung
4. Anfrageoptimierung
Es gibt zwei Stufen für die Optimierung einer SELECT-FROM-WHERE-Anfrageauswertung:
a) Optimierung jeder einzelnen Operation
=> systematische Schätzung der Kosten versch. Ausführungsstrategien, Auswahl eines
Plans mit den geringsten Kosten (s. Kap. 4.1)
b) Optimierung der Reihenfolge der einzelnen Operationen einer Anfrage
=> heuristische Regeln durch die die Operatoren in einem Anfragebaum vertauscht
werden (s. Kap. 4.2)
4.1. Optimierung einzelner Operationen
‣
Optimierung bei der Auswertung von
• Selektion
• Verbund (Join)
‣
Runtime-DB-Prozessor bestimmt
• welche Auswertungsstrategien für Selektion / Verbund möglich sind (es gibt i.d.R.
viele) und
• was diese kosten würden (Ausführungszeit in Anzahl Blockzugriffen)
‣
billigste (effizienteste) Strategie wird genommen
• stellt Schätzung dar, keine exakte mathematische Bestimmung
• die optimale Strategie zu berechnen ist normalerweise zu zeitaufwändig
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
1
4. Anfrageoptimierung
Für die Aufwandsschätzung relevante Informationen aus dem Katalog des Datenbanksystems:
‣ je Datei/ Relation:
•
•
•
•
•
•
Anzahl Sätze/ Tupel r
(durchschnittliche) Datensatzgröße R
Anzahl Datenblöcke b (oder guter Schätzwert)
Block-Faktor bfr für die Datei (= Blockgröße/R)
Art der Primärordnung und Ordnungsattribut
Arten der Sekundärordnung (Primär-, Cluster-, Sekundärindexe; jeweils mit Anzahl x der
Level/ Stufen/ Ebenen und der Anzahl Index-Blöcke für die unterste Index-Ebene bI1)
‣ ferner je Attribut einer Relation:
sl=1 alle Datensätze erfüllen die Bedingung,
sl=0 kein Datensatz erfüllt die Bedingung
• Anzahl unterschiedlicher Werte d eines Attributes
Für Schlüsselattribut gilt d = r, s = 1
und somit sl = 1/r
• Selektivität sl (zwischen 0 und 1) eines Attributes
- Verhältnis der Anzahl von Datensätzen (Tupeln) die die Bedingung erfüllen, zur
Gesamtzahl der Datensätze (Tupeln) in der Datei (Relation)
• Selektionskardinalität s = sl*r, die Anzahl von Datensätzen, die eine Bedingung auf Gleichheit
auf diesem Attribut erfüllen
- Anzahl Sätze, die bestimmte Gleichheitsabfrage erfüllen
Der Anfrageoptimierer benötigt möglichst aktuelle Werte dieser Parameter (Statistiken) für die
Schätzung der Kosten versch. Ausführungsstrategien.
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
2
4. Anfrageoptimierung
→ 4.1. Einzelne Operationen
‣ Suchmethoden für Selektion:
• lineares Suchen („Brute-Force-Ansatz“)
-
erforderlich, falls keine (Primär-/ Sekundär-) Ordnung vorhanden
jeden Satz der Datei lesen und Attribut gemäß Bedingung prüfen
Auf jede Datei
anwendbar
4.1.1. Selektion
-
bei Gleichheits- und Bereichs-Suche über Ordnungsfeld einer
geordneten Datei
• Hash-Suche
-
geht nur bei Gleichheitsbedingung über Hash-Attribut einer Hash-Datei
• Index-Suche (B+ - Baum)
-
bei Gleichheits- und Bereichs-Suche über indexiertes Attribut
‣ vereinfachende Annahmen für die Kostenabschätzung:
•
•
Abhängig von Zugriffspfad
auf gewähltes Attribut
• binäres Suchen
Die Datensätze sind gleichverteilt.
Bei einer Bereichssuche qualifizieren sich im Schnitt die Hälfte aller Datensätze.
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
3
4. Anfrageoptimierung
→ 4.1. Einzelne Operationen
‣ Formeln zur Schätzung der Zugriffskosten für SELECT (= Anzahl Blockzugriffe - AnzBZ)
• lineares Suchen („Brute-Force-Ansatz“)
-
alle Dateiblöcke (b) durchsuchen, um Datensätze auszuwählen die die
Selektionsbedingungen erfüllen (für s > 1): AnzBZ = b
für eine Bedingung auf Gleichheit auf einen Schlüssel (für s=1), wird im Durchschnitt die
Hälfte der Dateiblöcke durchsucht: AnzBZ = b /2
Falls Gleichheitsbedingung ein
erfüllt kein Datensatz die Bedingung gilt: AnzBZ = b
einziges Schlüsselattribut betrifft gilt
s=1 und damit AnzBZ= log2 b
• binäres Suchen
-
es gilt durchschnittlich: AnzBZ = log2 b + ⌈(s/ bfr)⌉ - 1
• Index-Suche (B+ - Baum)
-
s Datensätze erfüllen Gleichheitsbedingung, wobei s die Selektionskardinalität des
Indexattributs ist
jeder der s Datensätze kann in einem anderen Block gespeichert sein (= worst-case),
so dass: AnzBZ = x + s
bei einem Schlüsselindexierattribut (= eindeutig) gilt s =1, so dass: AnzBZ = x + 1
ist die Vergleichbedingung >, >=, <, <=, und wird ferner angenommen, dass die Hälfte
der Datensätze die Bedingung erfüllen, dann wird auf die Hälfte der Indexblöcke der
ersten Stufe, und über den Index auf die Hälfte der Dateidatensätze zugegriffen, so
dass ungefähr: AnzBZ = x + (bI1/2) + (r/2)
(r/2 kann verfeinert werden wenn besserer Selektivitätsschätzungen verfügbar sind)
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
4
4. Anfrageoptimierung
→ 4.1. Einzelne Operationen → 4.1.1. Selektion
‣ Beispiel 4-1 zur Kostenschätzung:
•
•
•
•
Angestellte
mit r = 10.000 Sätzen (Tupeln)
AngNr Name GebDatum Adresse
Geschlecht
Gehalt AbtNr
in b = 2.000 Datenblöcken
…
…
…
…
…
…
…
und bfr = 5 Datensätze/ Block
…
…
…
…
…
…
…
Vorhandene Zugriffspfade:
- Cluster-Index auf Gehalt (Angestellte also physisch nach Gehalt geordnet) mit
ð x = 3 Stufen
ð einer Selektionskardinalität s = 20
- Sekundärindex auf Schlüsselattribut AngNr mit
ð x = 4 Stufen (s = 1)
- Sekundärindex auf Nichtschlüsselattribut AbtNr mit
ð x = 2 Stufen
ð bI1 = 4 Indexblöcke auf 1. Ebene
ð d = 125 verschiedenen Werten (Selektionskardinalität s = (r/d) = 80)
Frage: Wie sollen die folgenden Anfragen ausgeführt werden?
(1) SELECT * FROM Angestellte WHERE AngNr = 4711
(2) SELECT * FROM Angestellte WHERE AbtNr = 99
(3) SELECT * FROM Angestellte WHERE AbtNr > 99
(4) SELECT * FROM Angestellte WHERE AbtNr = 99 AND Gehalt > 30.000
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
5
4. Anfrageoptimierung
zu (1):
→ 4.1. Einzelne Operationen → 4.1.1. Selektion
SELECT * FROM Angestellte WHERE AngNr = 4711
AngNr Name
…
…
…
…
Angestellte
GebDatum Adresse Geschlecht
…
…
…
…
…
…
Gehalt AbtNr
…
…
…
…
- lineare Suche (sequentielles Lesen/ Brute-Force):
Anzahl Blockzugriffe = b/2
= 1.000
= 2.000
falls der Lösungssatz gefunden wird
falls kein Lösungssatz gefunden wird
- Verwendung des Sekundärindexes (B+-Baum):
Anzahl Blockzugriffe = x + 1
=5
=4
=> Sekundärindex wählen
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
falls der Lösungssatz gefunden wird
falls kein Lösungssatz gefunden wird
Gleichheitsbedingung auf ein
einziges Schlüsselattribut:
AngNr = 4711 und damit gilt s=1
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
6
4. Anfrageoptimierung
zu (2):
→ 4.1. Einzelne Operationen → 4.1.1. Selektion
SELECT * FROM Angestellte WHERE AbtNr = 99
AngNr Name
…
…
…
…
Angestellte
GebDatum Adresse Geschlecht
…
…
…
…
…
…
Gehalt AbtNr
…
…
…
…
- lineare Suche (sequentielles Lesen):
Anz.BZ = b
= 2.000
da normalerweise mehrere Lösungssätze (MAs in Abteilung 99)
(oder keine Lösung – falls es die AbtNr nicht gibt)
- Verwendung des Sekundärindexes auf AbtNr:
Anz.BZ = x + s
= x + r/d
= 2 + 80
= 82
=2
Für AbtNr gibt es d=125
mit s = r/d
unterschiedliche Werte, so dass die
x + 10.000/ 125
Selektionskardinalität s=r/d = 80 ist.
falls es die AbtNr gibt
(im Schnitt 80 MAs je Abteilung - je MA neuen Block lesen)
falls es die AbtNr nicht gibt
=> Sekundärindex wählen
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Für die Gleichheitsbedingung
AbtNr = 99 gilt eine
Selektionskardinalität s > 1
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
7
4. Anfrageoptimierung
zu (3):
→ 4.1. Einzelne Operationen → 4.1.1. Selektion
SELECT * FROM Angestellte WHERE AbtNr > 99
AngNr Name
…
…
…
…
Angestellte
GebDatum Adresse Geschlecht
…
…
…
…
…
…
Gehalt AbtNr
…
…
…
…
- sequentielles Lesen:
Anz. BZ = b
= 2.000
da mehrere Lösungen (s > 1)
- Verwendung des Sekundärindexes auf AbtNr:
Anz. BZ = x + (bI1/2) + r/2
= 2 + (4/2) + (10.000/2)
= 5.004
im Schnitt; je Satz neuen Block lesen
=> sequentielles Lesen wählen
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
8
4. Anfrageoptimierung
zu (4):
→ 4.1. Einzelne Operationen → 4.1.1. Selektion
SELECT * FROM Angestellte WHERE AbtNr = 99 AND
Gehalt > 30.000
AngNr Name
…
…
…
…
Angestellte
GebDatum Adresse Geschlecht
…
…
…
…
…
…
Gehalt AbtNr
…
…
…
…
- sequentielles Lesen:
Anz.BZ = b
= 2.000
da mehrere Lösungen (oder evtl. keine)
- einzelne Selektionsbedingungen betrachten:
•
•
Sekundärindex auf AbtNr (eindeutig):
Anz.BZ = 82 (im Allgemeinen) bzw. 2 (falls es die AbtNr nicht gibt)
--> siehe (2)
Gehalt (Datei physisch nach Gehalt sortiert):
-- binäres Suchen (ohne Index - Suche erst mit Gleichheit, dann sequentiell die Daten-Blöcke):
Im Durchschnitt qualifizieren sich die
Anz.BZ = log2 b + (b/2 - 1)
Hälfte aller Datensätze, Annahme: jeder
= 11 + 999 = 1.010
Datensatz in einem sep. Block => s = b/2
-- Verwendung des Clusterindexes (Suche erst mit Gleichheit, dann sequentiell die Daten-Blöcke):
Anz.BZ = x + (b/2)
= 3 + 1.000 = 1.003
=> Sekundärindex über AbtNr wählen
→ dann Lösungssätze mit restlichen Bedingung(en) prüfen
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
9
4. Anfrageoptimierung
→ 4.1. Einzelne Operationen
4.1.2. Verbund (Join)
ANG.AngNr = ABT.Leiter
(PS)
(FS)
‣ Verbund ist der aufwendigste relationale Operator
‣ meist wird Equi / Natural Join benötigt (zwischen zwei Relationen, ANG ►◄ ABT)
‣ Join-Methoden:
•
Nested Loop Join
- erforderlich, falls keine (Primär-/ Sekundär-) Ordnung vorhanden
- jeden Satz der einen Relation (outer loop) mit jedem Satz der anderen Relation (inner loop)
vergleichen
•
Single Loop Join
- möglich, falls für eines der beiden Attribute eine Zugriffsstruktur (Index oder Hash-Ordnung)
existiert
- lese eine Relation sequentiell (single loop) und ermittle über die Zugriffsstruktur der anderen
Relation die Lösungssätze
•
Sort Merge Join
- möglich, falls beide Relationen über das Join-Attribut physisch sortiert sind oder
Zugriffsstrukturen existieren
- parallel für beide Relationen die sortierten Blöcke sequentiell lesen und die Sätze vergleichen
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
10
4. Anfrageoptimierung
→ 4.1. Einzelne Operationen → 4.1.2. Verbund (Join)
4.1.2.1. Aufwandsabschätzung für Nested Loop Join
‣
ANG.AngNr = ABT.Leiter
Beispiel 4-2:
•
(PS)
•
Nested Loop Join zwischen den Relationen ANG und ABT
Relation ANG mit rANG = 6.000 Sätze, verteilt auf 2.000 Datenblöcke
•
Relation ABT mit rABT = 50 Sätzen, verteilt auf 10 Datenblöcke
(FS)
‣ Vorgehen:
a) erforderliche Mindestanzahl Hauptspeicher-Blöcke: bHS = 3
• jeden ANG-Datenblock einlesen und für diesen jeden ABT-Datenblock einlesen und
mit ANG-Datenblock vergleichen:
➡ 2.000 x 10 = 20.000 Blockzugriffe für die Vergleiche (ABT Blöcke werden 20.000x eingelesen)
➡ insg. 22.000 Zugriffe (bzw. 20.010 falls ABT zuerst eingelesen)
• dritter Hauptspeicherblock für Ergebnisaufnahme der resultierenden Datensätze nach JOIN
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
11
4. Anfrageoptimierung
→ 4.1. Einzelne Operationen → 4.1.2. Verbund (Join)
→ Nested Loop Join
b) Annahme: bHS = 7 freie Blöcke im Hauptspeicher
➡ Heuristik: möglichst viele Blöcke der outer loop-Relation in den Hauptspeicher laden
‣ Alternative 1: ANG als outer loop-Relation
• Blockzugriffe, um ANG einzulesen = 2.000
(jeweils in 5er-Paketen)
• ABT-Blöcke werden 400 Mal eingelesen (immer einzeln)
• Blockzugriffe für die ABT-Relation = 400 x 10 = 4.000
➡ Blockzugriffe insgesamt = 2.000 + 4.000 = 6.000
‣ Alternative 2: ABT als outer loop-Relation
• Blockzugriffe, um ABT einzulesen = 10
( bHS = 7 )
(jeweils in 5er-Paketen)
• ANG-Blöcke werden 2 Mal eingelesen (immer einzeln)
• Blockzugriffe für die ANG-Relation = 2 x 2.000 = 4.000
➡ Blockzugriffe insgesamt = 10 + 4.000 = 4.010
‣ Erkenntnisse:
• mit mehr Hauptspeicher geht Nested Loop Join schneller
• wähle die Relation mit den wenigsten Datenblöcken für outer loop
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
12
4. Anfrageoptimierung
→ 4.1. Einzelne Operationen → 4.1.2. Verbund (Join)
→ Nested Loop Join → Hauptspeicheranpassung DB2
Dynamischer Hauptspeicher Beispiel DB2
• Kontinuierliche Systemüberwachung um geteilten Hauptspeicher bestmöglich zwischen den
unterschiedlichen DB2 Speicher und Bufferpools je nach Bedarf zu verteilen
• Iterativer Überwachungsprozess wird durch Kontrollalgorithmen gestützt, die eine Oszillation
der Speicherbereiche vermeiden
Datenbankspeicher
BufferPool1
BufferPool1
BufferPool1
Sorts and Hash
Joins
Lock List
Package Cache
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
13
4. Anfrageoptimierung
→ 4.1. Einzelne Operationen → 4.1.2. Verbund (Join)
4.1.2.2. Aufwandsabschätzung für Single Loop Join
‣
(PS)
Beispiel 4-3:
(FS)
unique
not null
•
Single Loop Join zwischen ANG und ABT (Relationen aus Bsp. 4-2)
•
Zusatzinformation zur Join-Selektivität (= Info aus Fremdschlüsselattribut-Definition):
-
•
jeder Satz der ABT-Relation hat genau ein eigenes Gegenstück in der ANG-Relation
für die Join-Attribute existiert jeweils ein mehrstufiger Sekundärindex
-
‣
ANG.AngNr = ABT.Leiter
für ANG ist dieser 4-stufig, für ABT 2-stufig
Vorgehen:
a) ANG sequentiell lesen und mittels ABT-Index Gegenstück in ABT suchen
•
Blockzugriffe, um ANG seq. einzulesen = 2.000 (6.000 Datensätze)
•
erfolgreiche Suchvorgänge im ABT-Index = 50
(jeweils 2 Index-Block-Zugriffe und 1 Daten-Block-Zugriff)
•
erfolglose Suchvorgänge im ABT-Index = 5.950 (6.000 - 50)
(jeweils 2 Index-Block-Zugriffe)
=> Blockzugriffe insgesamt = 2.000 + (2+1) x 50 + 2 x 5.950 = 14.050
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
14
4. Anfrageoptimierung
→ 4.1. Einzelne Operationen
→ 4.1.2. Verbund (Join)
→ Single Loop Join
b) ABT sequentiell lesen und mittels ANG-Index Gegenstück in ANG suchen
•
Blockzugriffe, um ABT seq. einzulesen = 10
•
erfolgreiche Suchvorgänge im ANG-Index = 50
(jeweils 4 Index-Block-Zugriffe und 1 Daten-Block-Zugriff)
Hohe JOIN Selektivität
=> Blockzugriffe insgesamt = 10 + (4+1) x 50 = 260
‣
Erkenntnisse:
• mit kleiner Anfangsrelation und insbesondere mit hoher Join-Selektivität
(= viele Treffer) geht es schneller
=> (kleinere) Relation mit hoher Join-Selektivität sequentiell lesen
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
15
4. Anfrageoptimierung
→ 4.1. Einzelne Operationen
→ 4.1.2. Verbund (Join)
4.1.2.3. Aufwandsabschätzung für Sort Merge Join
‣
(PS)
Beispiel 4-4:
•
•
Beispiel 4-5:
•
(FS)
Sort Merge Join zwischen ANG und ABT (Relationen aus Bsp. 4-2)
ANG und ABT jeweils nach dem Join-Attribut sortiert
Durch jede Datei genügt ein einziger
=> Anz. BZ: 2.000 + 10 = 2.010 Blockzugriffe
‣
ANG.AngNr = ABT.Leiter
Durchlauf. Folglich entspricht die
Anzahl der Blockzugriffe der Summe
der Anzahl von Blöcken in beiden
Dateien.
•
Sort Merge Join zwischen ANG und ABT (Relationen aus Bsp. 4-3)
=> Sort Merge Join über Index-Blöcke möglich
Anzahl Index-Blöcke von ANG auf unterster Ebene: bI1ANG = 300
•
Anzahl Index-Blöcke von ABT auf unterster Ebene: bI1ABT = 3
=> Anz. BZ:
•
•
Index-Blöcke von ANG lesen + Index-Blöcke von ABT lesen
je Index-Lösungssatz 1 ANG-Datenblock und 1 ABT-Datenblock lesen
= 300 + 3 + 50 + 50 = 403 Blockzugriffe insgesamt
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
16
4. Anfrageoptimierung
Übungsaufgabe zur Kostenschätzung
not NULL
Gegeben:
• rMitarbeiter = 30.000 Sätzen (Tupeln)
• bMitarbeiter = 1.000 Datenblöcken
PersNr
…
…
• rAbteilung = 1.000 Sätzen (Tupeln)
• bAbteilung = 100 Datenblöcken
• Zugriffspfade:
- Cluster-Index auf Gehalt mit
AbtNr
…
…
ð x = 2 Stufen
ð Selektionskardinalität s = 15
Mitarbeiter
Name
Gehalt
…
…
…
…
AbtNr
…
…
Abteilung
Name
Beschreibung
…
…
…
…
- Sekundärindex auf Schlüsselattribut PersNr mit
ð x = 3 Stufen
- Sekundärindex auf Schlüsselattribut Abteilung.AbtNr mit
ð x = 2 Stufen
Aufgabe:
Welche JOIN Methode bietet sich für folgende Anfrage an und wie viele Blockzugriffe sind dafür
notwendig?
SELECT * FROM Mitarbeiter, Abteilung
WHERE Abteilung.AbtNr = Mitarbeiter.AbtNr
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
17
4. Anfrageoptimierung
Lösung
• Single-Loop-Join, da ein Join Attribut indexiert ist (AbtNr von Abteilung)
i. AnzBZ um Mitarbeiter Datensätze zu lesen = 1.000
ii. Je Mitarbeiter genau ein zugehöriger Abteilungs-Datensatz
==> 30.000 Suchanfragen an Relation Abteilung
==> 2 Indexstufen + 1 Datenblockzugriff sind notwendig um erfolgreich auf Abteilung
zuzugreifen
==> AnzBz = 1.000 + (2 + 1) * 30.000 = 91.000
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
18
4. Anfrageoptimierung
4.2. Optimierung der Auswertungsreihenfolge
‣ ein SQL-Anfrageausdruck durchläuft mehrere Stufen
•
Scanner, Parser, Validation
-
Prüfung Syntax und relationale Semantik
•
Umwandlung in einen Anfragebaum
•
Optimizer
-
Bestimmung eines effizienten Ausführungsplans
meist nicht optimal, da dessen Bestimmung zu teuer
•
Code-Generator
•
Datenbank-Prozessor
-
Ausführung interpretierter / compilierter Code
Bestimmung effiziente Knotenauswertung
Quelle: Fig. 18.1,
Elmasri, R. / Navathe, S.B. (2000)
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
19
4. Anfrageoptimierung
→ 4.2. Anfragebaum
‣ aus jedem SELECT-FROM-WHERE-Block entsteht 1 Anfragebaum
•
•
•
Relationen als Blätter und relationale Operationen (= Selektionen und Joins) als innere Knoten
Views werden in Basisrelationen aufgelöst
geschachtelte SQL-Statements werden getrennt ausgewertet / optimiert
(innere Anfrage zuerst)
‣ relationale Operatoren (= Knoten des Anfragebaums):
•
•
•
•
Projektion: π
Selektion: σ
Verbund/Join: ►◄
kartesisches Produkt: X
‣ Beispiel 4-6:
Liste aus den Relationen:
•
•
•
Employee (SSN, FName, LName, BDate, Address)
Works_On (ESSN, PNo, Hours)
Project (PNumber, PName, Budget),
{ESSN referenziert SSN; PNo referenziert PNumber}
die Namen derjenigen Angestellten, die nach 1957 geboren wurden und im Projekt ‚Aquarius‘
mitgearbeitet haben.
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
20
4. Anfrageoptimierung
→ 4.2. Anfragebaum
‣ entsprechender SQL-Ausdruck:
SELECT LName
FROM
Employee, Works_On, Project
WHERE PName = ‘Aquarius‘ AND PNumber = PNo
AND ESSN = SSN AND BDate > ‚1957-12-31‘ ;
Projektion
‣ initialer (kanonischer) Anfragebaum:
Selektion
Leserichtung
Die direkte Ausführung des initialen
Anfragebaums ist auf Grund der
kartesischen Produkt Operationen sehr
ineffizient.
Aufgabe des heuristischen Optimieres ist
die Erstellung eines endgültigen
Anfragebaums zwecks effizienter
Ausführung
kartesisches
Produkt
Relationen als
Blätter
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Quelle: Fig. 18.5,
Elmasri, R. / Navathe, S.B. (2000)
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
21
4. Anfrageoptimierung
‣
die Auswertung des Baumes erfolgt von den Blättern zur Wurzel
•
•
‣
→ 4.2. Anfragebaum
Beginn auf der untersten Ebene
auf einer Ebene von links nach rechts auswerten
Regeln für die Optimierung des Anfragebaumes:
1
möglichst frühzeitig Selektionen ausführen
ð Selektionen im Baum möglichst weit nach unten schieben
=> weniger Sätze => kleinere Relationen
2
sofern möglich, stelle Blätter bzw. Teilbäume um,
damit sehr restriktive Selektionen / Joins noch frühzeitiger ausgeführt werden
ð Selektionen / Joins weiter nach links bzw. weiter nach unten bringen
3
sofern möglich, beseitige kartesische Produkte durch Joins
(Join = kartesisches Produkt mit entsprechender Selektionsbedingung)
4
möglichst frühzeitig Projektionen ausführen
ð Projektionen im Baum möglichst weit nach unten schieben,
d.h. für Relationen nur diejenigen Attribute führen, die weiter oben im Anfragebaum noch
benötigt werden
=> kürzere Sätze => kleinere Relationen
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
22
4. Anfrageoptimierung
→ 4.2. Anfragebaum
→ Beispiel
‣ Fortsetzung Beispiel 4-6:
Schritt 1:
Selektionen nach unten schieben
=> Relationen Employee und Project
frühzeitig reduzieren
Quelle: Fig. 18.5,
Elmasri, R. / Navathe, S.B. (2000)
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
23
4. Anfrageoptimierung
→ 4.2. Anfragebaum
→ Beispiel
Schritt 2:
restriktive Selektionen / Joins
nach links bzw. nach unten
schieben
=> Employee (viele qualifizierende Datensätze)
und Project (wenig qualifizierende Datensätze)
samt Selektionen tauschen
=> Works-On wird zuerst
mit der kleineren Relation
Project verknüpft
(daher auch die Umstellungder Selektionen für die
kartesischen Produkte)
Quelle: Fig. 18.5,
Elmasri, R. / Navathe, S.B. (2000)
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
24
4. Anfrageoptimierung
→ 4.2. Anfragebaum
→ Beispiel
Schritt 3:
kartesische Produkte beseitigen
‣ dafür deren „Selektionsbedingungen“
als Join-Bedingungen
einsetzen
Quelle: Fig. 18.5,
Elmasri, R. / Navathe, S.B. (2000)
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
25
→ 4.2. Anfragebaum
→ Beispiel
4. Anfrageoptimierung
Schritt 4:
5b)
Projektionen nach unten schieben
=> Project, Works_On, deren JoinErgebnis und Employee
werden frühzeitig reduziert
5a)
3b)
4b)
3a)
1b)
4a)
2)
1a)
Quelle: Fig. 18.5,
Elmasri, R. / Navathe, S.B. (2000)
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
26
4. Anfrageoptimierung
Übungsaufgabe zur Optimierung der Auswertungsreihenfolge
Gegeben:
• rMitarbeiter = 30.000 Sätzen (Tupeln)
• rAbteilung = 1.000 Sätzen (Tupeln)
PersNr
…
…
Mitarbeiter
Name
Gehalt
…
…
…
…
AbtNr
…
…
Abteilung
Bezeichnung
Beschreibung
…
…
…
…
• Anfrage: Welcher Mitarbeiter der Abteilung „Marketing“ verdient
mehr als 60.000 EUR im Jahr?
• Initialer Anfragebaum:
π Name, Gehalt
AbtNr
…
…
σ Gehalt > 60.000 AND MITARBEITER.AbtNr = ABTEIUNG.AbtNr AND Bezeichnung = „Marketing“
X
MITARBEITER
ABTEILUNG
Aufgabe:
Optimieren Sie den initialen Anfragebaum und markieren Sie die Knoten mit fortlaufenden Nummern, um
die Reihenfolge der Abarbeitung anzugeben (Zwischenschritte müssen nicht gezeichnet werden).
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
27
4. Anfrageoptimierung
Lösung:
3 b)
3 a)
►◄ MITARBEITER.AbtNr = ABTEIUNG.AbtNr
1 b)
1 a)
π Name, Gehalt
π AbtNr
σ Bezeichnung = „Marketing“
ABTEILUNG
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
π Name, AbtNr, Gehalt
2 b)
σ Gehalt > 60.000
2 a)
MITARBEITER
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
28
4. Anfrageoptimierung
→ 4.3. Beispiel DB2
§ System-R (70er Jahre)
– Das IBM System-R Projekt entwickelte einen Optimierer der den einzelnen
Zugriffsoperationen geschätze „Kosten” zuweist. Auf Basis dieser Kosten wird dann der
optimale Plan ausgewählt.
§ Starburst (1984 – 1992)
– Starburst (das Query Graph Model) ist eine alternative Architektur, bzw. eine
Weiterentwicklung von System-R. Jede Anfrage wird in Form eines Graphen dargestellt. Der
Graph wird manipuliert (Query Rewrite) um den optimalsten Zugriff zu finden.
§ System-RX (2000 - 2005)
– System-RX ist eine Weiterentwicklung von System-R/ Starburst zu einem hybriden
Datenbanksystem das neben einer relationalen Speicherung auch XML Daten nativ verwalten
kann. Dazu ist es erforderlich den Optimierer um entsprechende Laufzeitoperatoren zu
erweitern, die eine Navigation in der hierarchischen XML Struktur ermöglichen.
§ System-S (2004 - 2009)
– System-S ist ein völlig neues Paradigma der Datenverarbeitung - Stream Computing. Massive
Datenmengen werden in Echtzeit analysiert und ausgewertet. Völlig neue Optimierungswege
werden implementiert, die sich im Wesentlichen in einer sich selbst optimierenden
Laufzeitumgebung widerspiegeln.
Der DB2 Optimierer ist ein kostenbasierter Optimierer
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
29
4. Anfrageoptimierung
→ 4.3. Beispiel DB2
Alles dreht sich um Kosten...
§ Beide, QGM und System-R/X Optimierer nutzen eine kostenbasierte Optimierung
§ Kosten entsprechen dem Aufwand eine SQL Anfrage zu beantworten
§ Kosten werden in einer künstlichen Einheit „timerons” ausgedrückt, die die Nutzung von
Ressourcen repräsentiert. Timerons sind nicht als absolute Werte zu verstehen, sondern
sind innerhalb eines Plans relativ zueinander zu bewerten. Timerons entsprechen nicht der
tatsächlichen Zeit.
§ Kosten werden auf Basis von Statistiken berechnet. Diese Statistiken ergeben sich aus
der Anzahl der Zeilen („Kardinalität“), Anzahl der eindeutigen Werte in einer Tabelle,
Informationen über CPU- (# von Instruktionen) und I/O- (# von seeks und page transfers) Nutzung
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
30
4. Anfrageoptimierung
→ 4.3. Beispiel DB2
Die Optimierungsphase innerhalb des DB2 Compilers
SQL/ XQuery
Gegeben:
DB2 Compiler
§ ein QGM (Query Graph Model)
Parse Query
§ Datenbank-Konfiguration
Check
Semantics
§ Statistik über Datenverteilung
Rewrite
Query
Zu bestimmen:
Pushdown
Analytics
§ der optimale QEP (Query Execution Plan)
Optimize
Access Plan
Unter Verwendung von:
Access
Plan
§ alternativen QEPs
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Remote SQL
Generation
Generate
Executable Code
§ Modellierung von IO, CPU, Speicher
pro Alternative
§ Auswahl des effizientesten QEPs
Query
Graph
Model
Visual Explain
Execute Plan
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
31
4. Anfrageoptimierung
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
→ 4.3. Beispiel DB2
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
32
4. Anfrageoptimierung
→ 4.3. Beispiel DB2
DB2 Besonderheiten:
§ Just in Time Statistics (JIT)
– Liefert online Statistiken die vom Optimierer benötigt werden
– Analysiert die Anfrage, ermittelt bei Bedarf Statistiken welche dem Optimierer beim
Finden des optimalen Plans helfen
§ Erfassen von Statistiken in 3-Ebenen:
– Ist die automatisierte Statistik aktuell? Nein …
– JIT – früh genug fertig? Nein …
– sog. „Enhanced statistics fabrication“
© DHBW Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Vorlesung Datenbanktechnik (Informationstechnologie) V2.0
33
Herunterladen