Organisatorisches

Werbung
Datenbanksysteme I
Anfragebearbeitung und -optimierung
21.12.2006
Felix Naumann
Folien: u.a. von Ulf Leser und Alfons Kemper,
Chris Olsten, Hector Garcia-Molina
Organisatorisches
2
■ Parallele Klausur „Modellierung“
■ Zugang zu Studentenrechnern
■ Zugang zu Lehrmaterialien
Felix Naumann | Datenbanksysteme I | WS 06/07
1
Anfragebearbeitung – Grundproblem
3
■ Anfragen sind deklarativ.
□ SQL, Relationale Algebra
■ Anfragen müssen in ausführbare (prozedurale) Form transformiert
werden.
■ Ziele
□ „QEP“ – prozeduraler Query Execution Plan
□ Effizienz
– Schnell
– Wenig Ressourcenverbrauch (CPU, I/O, RAM,
Bandbreite)
Felix Naumann | Datenbanksysteme I | WS 06/07
Ablauf der Anfragebearbeitung
4
1. Parsing
□ Parsen der Anfrage (Syntax)
□ Überprüfen der Elemente („Semantik“)
SQL Anfrage
□ Parsebaum
2. Wahl des logischen Anfrageplans
□ Baum mit logischen Operatoren
Parsing
□ Potentiell exponentiell viele
□ Wahl des optimalen Plans
–
Logische Optimierung
–
Regelbasierter Optimierer
–
Kostenbasierter Optimierer
3. Wahl des physischen Anfrageplans
□ Ausführbar
□ Programm mit physischen Operatoren
–
Algorithmen
–
Scan Operatoren
□ Wahl des optimalen Plans
–
physische Optimierung
Wahl des logischen
Anfrageplans
Wahl des physischen
Anfrageplans
Anfrageplan
ausführen
Felix Naumann | Datenbanksysteme I | WS 06/07
2
Überblick
5
■ Parsen der Anfrage
■ Transformationsregeln der RA
■ Logische Anfragepläne
■ Optimierung
■ Kostenmodelle
■ (Dynamische Programmierung)
Hinweis: Kapitel 16 im Lehrbuch
Felix Naumann | Datenbanksysteme I | WS 06/07
Syntaxanalyse
6
Aufgabe: Umwandlung einer SQL Anfrage in einen Parsebaum.
■ Atome (Blätter)
□ Schlüsselworte
□ Konstanten
□ Namen (Relationen und Attribute)
□ Syntaxzeichen
□ Operatoren
■ Syntaktische Kategorien
□ Namen für Teilausdrücke einer Anfrage
Felix Naumann | Datenbanksysteme I | WS 06/07
3
Eine Grammatik für einen Teil von
SQL
7
■ Anfragen
□ <Anfrage> :: = <SFW>
□ <Anfrage> :: = ( <SFW> )
□ Mengenoperatoren fehlen
■ SFWs
□ <SFW> ::= SELECT <SelListe> FROM <FromListe> WHERE <Bedingung>
□ Gruppierung, Sortierung etc. fehlen
■ Listen
□ <SelListe> ::= <Attribut>, <SelListe>
□ <SelListe> ::= <Attribut>
□ <FromListe> ::= <Relation>, <FromListe>
□ <FromListe> ::= <Relation>
■ Bedingungen (Beispiele)
□ <Bedingung> ::= <Bedingung> AND <Bedingung
□ <Bedingung> ::= <Tupel> IN <Anfrage>
□ <Bedingung> ::= <Attribut> = <Attribut>
□ <Bedingung> ::= <Attribut> LIKE <Muster>
■ <Tupel>, <Attribut>, <Relation>, <Muster> nicht durch grammatische Regel
definiert
■ Vollständig z.B. hier: http://docs.openlinksw.com/virtuoso/GRAMMAR.html
Felix Naumann | Datenbanksysteme I | WS 06/07
Abfragebearbeitung – Syntax
8
■ SELECT title
FROM StarsIn
WHERE starName IN (
SELECT name
FROM MovieStar
WHERE birthdate LIKE ‘%1960’
);
■ Filme in denen mindestens ein Schauspieler mitspielt, der 1960
geboren wurde.
Felix Naumann | Datenbanksysteme I | WS 06/07
4
Parse-Baum
9
<Anfrage>
SELECT Titel
FROM spielt_in
WHERE SchauspielerName IN (
SELECT Name
FROM Schauspieler
WHERE Geburtstag LIKE ‘%1960’
);
<SFW>
SELECT <SelListe>
FROM
<Attribut>
<FromListe>
WHERE
<Relation>
Titel
<Bedingung>
<Tupel> IN <Anfrage>
<Attribut>
spielt_in
( <Anfrage> )
Schauspielername <SFW>
SELECT
<SelListe>
<Attribut>
FROM
<FromListe>
<RelName>
Name
Schauspieler
<Bedingung>
WHERE
<Attribut> LIKE <Muster>
Geburtstag
‘%1960’
Felix Naumann | Datenbanksysteme I | WS 06/07
Parse-Baum
<Anfrage>
10
<SFW>
SELECT Titel
FROM spielt_in, Schauspieler
WHERE SchauspielerName = Name
AND Geburtstag LIKE ‘%1960’;
SELECT <SelListe>
<Attribut>
FROM <FromListe> WHERE
<Relation>
<Bedingung>
, <FromListe> <Bedingung>
AND <Bedingung>
Titel spielt_in <Relation> <Attribut> = <Attribut> <Attribut> LIKE <Muster>
Schauspieler SchauspielerName Name
Geburtstag
‘%1960’
Felix Naumann | Datenbanksysteme I | WS 06/07
5
Prüfung der Semantik
11
Während der Übersetzung semantische Korrektheit prüfen
■ Existieren die Relationen und Sichten der FROM Klausel?
■ Existieren die Attribute in den genannten Relationen?
□ Sind sie eindeutig?
■ Korrekte Typen für Vergleiche?
■ Aggregation korrekt?
■ ...
Felix Naumann | Datenbanksysteme I | WS 06/07
Überblick
12
■ Parsen der Anfrage
■ Transformationsregeln der RA
■ Logische Anfragepläne
■ Optimierung
■ Kostenmodelle
■ (Dynamische Programmierung)
Felix Naumann | Datenbanksysteme I | WS 06/07
6
Anfragebearbeitung –
Transformationsregeln
13
Transformation der internen Darstellung
■ Ohne Semantik zu verändern
■ Zur effizienteren Ausführung
□ Insbesondere: Kleine Zwischenergebnisse
Äquivalente Ausdrücke
■ Zwei Ausdrücke der relationalen Algebra heißen äquivalent, falls
□ Gleiche Operanden (= Relationen)
□ Stets gleiche Antwortrelation
Stets: Für jede mögliche
Instanz der Datenbank
Felix Naumann | Datenbanksysteme I | WS 06/07
Anfragebearbeitung – Beispiel
14
π(Nachname)
π(Nachname)
σ(p.Budget < 40.000)
σ(p.Budget < 40.000)
σ(m.p_id = p.p_id)
X
mitarbeiter
projekte
><m.p_id = p.p_id
mitarbeiter
projekte
Felix Naumann | Datenbanksysteme I | WS 06/07
7
Anfragebearbeitung – Beispiel
15
π(Nachname)
π(Nachname)
σ(p.Budget < 40.000)
><m.p_id = p.p_id
><m.p_id = p.p_id
σ(p.Budget < 40.000)
mitarbeiter
projekte
mitarbeiter
projekte
Felix Naumann | Datenbanksysteme I | WS 06/07
Kommutativität und Assoziativität
16
■ × ist kommutativ und assoziativ
□ R×S=S×R
Gilt jeweils für Mengen
und Multimengen
□ (R × S) × T = R × (S × T)
■ ∪ ist kommutativ und assoziativ
□ R∪S=S∪R
□ (R ∪ S) ∪ T = R ∪ (S ∪ T)
Ausdrücke können in beide
Richtungen verwendet werden.
■ ∩ ist kommutativ und assoziativ
□ R∩S=S∩R
□ (R ∩ S) ∩ T = R ∩ (S ∩ T)
■ ⋈ ist kommutativ und assoziativ
□ R⋈S=S⋈R
□ (R ⋈ S) ⋈ T = R ⋈ (S ⋈ T)
Gilt nicht unbedingt für θ-Join:
R(a,b), S(b,c), T(c,d)
(R ⋈R.b>S.b S) ⋈a<d T
≠
R ⋈R.b>S.b (S ⋈a<d T)
Felix Naumann | Datenbanksysteme I | WS 06/07
8
Transformationsregeln für Selektion
17
■ Selektion sind interessant für Optimierung
□ Reduzieren Ergebnis und Zwischenergebnisse
□ Deshalb: Im Baum soweit wie möglich nach unten verschieben
□ „pushing selections“
■ Aufbrechen von Konjunktionen und Disjunktionen im
Selektionsprädikat
□ σc1 AND c2(R ) = σc1(σc2 (R))
□ σc1 OR c2(R ) = σc1(R) ∪ σc2 (R)
– Nicht bei Multimengen
■ Reihenfolge der Anwendung
□ σc1(σc2(R)) = σc2(σc1(R))
Felix Naumann | Datenbanksysteme I | WS 06/07
Transformationsregeln für Selektion
18
■ Selektionen auf Mengeoperationen
■ Für Φ ∈ {∪, ∩ , − , ⋈} gilt:
□ σc(R Φ S) ≡ (σc (R)) Φ (σc (S))
■ Falls Bedingung C nur Attribute aus R betrifft
□ σc(R Φ S) ≡ (σc (R)) Φ S
■ Beispiel
□ Zwei Relationen R(a,b) und S(b,c)
□ σ(a=1 OR a=3) AND b<c(R ⋈ S)
□ = σ(a=1 OR a=3) (σ b<c(R ⋈ S))
□ = σ(a=1 OR a=3) (R ⋈ σ b<c(S))
□ = σ(a=1 OR a=3) (R) ⋈ σ b<c(S)
Felix Naumann | Datenbanksysteme I | WS 06/07
9
Pushing Selections
19
Es ist manchmal sinnvoll, Selektionen auch nach oben zu ziehen.
■ CREATE VIEW FilmeAus1996 AS
SELECT * FROM FILME
WHERE Jahr = 1996;
■ SELECT SchauspielerName, StudioName
FROM FilmeAus1996 NATURAL JOIN spielt_in
πSchauspielerName, Studioname
πSchauspielerName, Studioname
πSchauspielerName, Studioname
⋈
σJahr=1996
⋈
σJahr=1996
Filme
⋈
spielt_in
Filme
σJahr=1996
σJahr=1996
Filme
spielt_in
spielt_in
Felix Naumann | Datenbanksysteme I | WS 06/07
Transformationsregel für Projektion
20
■ Ziel: Projektionen soweit wie möglich im Baum nach unten schieben
□ „pushing projections“
□ Meist bleibt eine zusätzliche Projektion zurück
□ Nutzen nicht so stark wie bei Selektionen
■ Grundregel: Eine Projektion darf überall eingeführt werden, falls nur
Attribute eliminiert werden, die
□ Nicht im Anfrageergebnis verlangt werden
□ In keinem späteren Operator verwendet werden
■ πL(R ⋈ S) = πL(πM(R) ⋈ πN(S))
■ πL(R ⋈C S) = πL(πM(R) ⋈C πN(S))
■ πL(R × S) = πL(πM(R) × πN(S))
■ Beispiel
□ R(a,b,c), S(c,d,e)
□ πa+e→x, b→y(R ⋈ S) = πa+e→x, b→y(πa,b,c(R) ⋈ πc,e(S))
= πa+e→x, b→y(R ⋈ πc,e(S))
■ Entsprechende Regeln gelten nicht für Mengenoperationen
Felix Naumann | Datenbanksysteme I | WS 06/07
10
Transformationsregel für Projektion
21
■ πLσC(R)) = πL(σC(πM(R)))
□ Nur falls M die Menge L und alle Attribute, die in C verwendet
werden enthält.
■ SELECT SchauspielerName FROM spielt_in WHERE FilmJahr =
1996
πSchauspielerName
πSchauspielerName
σFilmJahr=1996
σFilmJahr=1996
πSchauspielerName, FilmJahr
spielt_in
spielt_in
Felix Naumann | Datenbanksysteme I | WS 06/07
Weitere Regeln
22
Joins und Kreuzprodukte
■ R ⋈C S = σC(R × S)
■ R ⋈ S = πLσC(R × S)
Duplikateliminierung
■ δ(R) = R
□ Falls R einen Primärschlüssel enthält
□ Falls R das Resultat einer Gruppierung ist: δ(γL(R)) = γL(R)
■ δ(R × S) = δ(R) × δ(S)
■ δ(R ⋈ S) = δ(R) ⋈ δ(S)
■ δ(R ⋈C S) = δ(R) ⋈C δ(S)
■ δ(σC(R) = σC(δ(R))
■ δ(R ∪ S) = R ∪ S
□ Gilt auch für andere Mengenoperationen
Felix Naumann | Datenbanksysteme I | WS 06/07
11
Überblick
23
■ Parsen der Anfrage
■ Transformationsregeln der RA
■ Logische Anfragepläne
■ Optimierung
■ Kostenmodelle
■ (Dynamische Programmierung)
Felix Naumann | Datenbanksysteme I | WS 06/07
Vom Parsebaum zum logischen
Anfrageplan
24
■ Schritt 1: Knoten des Parsebaums umwandeln
□ In Knoten mit Operatoren der RA
□ In entsprechenden Gruppen
■ Schritt 2: Voroptimierung
□ Selektionen pushen
□ Subanfragen entfernen (nicht hier)
□ Operatoren gruppieren
Felix Naumann | Datenbanksysteme I | WS 06/07
12
Vom Parsebaum zur relationalen
Algebra
25
■ Basisregel
□ Kreuzprodukt aller Relationen der FromListe
□ Danach Selektion entsprechend der Bedingung
– Falls Bedingung keine Subanfrage enthält
□ Danach Projektion entsprechend der SelListe
■ Subanfragen entfernen
□ Nicht hier!
<Anfrage>
<SFW>
SELECT <SelListe>
FROM <FromListe> WHERE
<Bedingung>
Felix Naumann | Datenbanksysteme I | WS 06/07
Parse-Baum
<Anfrage>
26
<SFW>
SELECT Titel
FROM spielt_in, Schauspieler
WHERE SchauspielerName = Name
AND Geburtstag LIKE ‘%1960’;
SELECT <SelListe>
<Attribut>
FROM <FromListe> WHERE
<Relation>
<Bedingung>
, <FromListe> <Bedingung>
AND <Bedingung>
Titel spielt_in <Relation> <Attribut> = <Attribut> <Attribut> LIKE <Muster>
Schauspieler SchauspielerName Name
Geburtstag
‘%1960’
πTitel
σSchauspielerName=Name AND Geburtstag LIKE ‘%1960’
×
spielt_in
Schauspieler
Felix Naumann | Datenbanksysteme I | WS 06/07
13
Überblick
27
■ Parsen der Anfrage
■ Transformationsregeln der RA
■ Logische Anfragepläne
■ Optimierung
■ Kostenmodelle
■ (Dynamische Programmierung)
Felix Naumann | Datenbanksysteme I | WS 06/07
Grundsätze der Anfrageoptimierung
28
■ High-level SQL (deklarativ nicht prozedural)
□ „was“, nicht „wie“.
■ Das „wie“ bestimmt sich aus der Abbildung der mengenorientierten Operatoren auf die 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.
□ Äquivalenzerhaltende Transformationen
■ Im Allgemeinen wird nicht die optimale Auswertungsstrategie
gesucht, sondern eine einigermaßen effiziente Variante.
□ Ziel: „Avoid the worst case“
Felix Naumann | Datenbanksysteme I | WS 06/07
14
Anfragebearbeitung - Optimierung
29
Regelbasierte Optimierung
■ Fester Regelsatz schreibt Transformationen gemäß der genannten
Regeln vor.
■ Prioritäten unter den Regeln
□ Heuristik
Kostenbasierte Optimierung
■ Kostenmodell
■ Transformationen um Kosten zu verringern
■ Bestimmung des optimalen Plans
□ Bestimmung der optimalen Joinreihenfolge
Felix Naumann | Datenbanksysteme I | WS 06/07
Logische und physische Optimierung
30
■ Logische Optimierung
□ Jeder Ausdruck kann in viele verschiedene, semantisch äquivalente
Ausdrücke umgeschrieben werden.
□ Wähle den (hoffentlich) besten Ausdruck (=Plan, QEP)
■ Physische Optimierung
□ Für jede relationale Operation gibt es viele verschiedene
Implementierungen.
□ Zugriff auf Tabellen
– Scan, verschiedene Indizes, sortierter Zugriff, …
□ Joins
– Nested loop, sort-merge, hash, …
□ Wähle für jede Operation die (hoffentlich) beste Implementierung
■ Abhängigkeit beider Probleme!
Felix Naumann | Datenbanksysteme I | WS 06/07
15
Logische Optimierung
31
Grundsätze der logischen Optimierung
■ Selektionen können so weit wie möglich im Baum nach unten geschoben
werden.
□ Manchmal lohnt es sich, sie nach oben zu schieben
■ Selektionen mit AND können aufgeteilt und separat verschoben werden.
■ Projektionen können so weit wir möglich im Baum nach unten verschoben
werden,
□ bzw. neue Projektionen können eingefügt werden.
■ Duplikateliminierung kann manchmal entfernt werden oder verschoben
werden.
■ Kreuzprodukte können mit geeigneten Selektionen zu einem Join
zusammengefasst werden.
Noch nicht hier erwähnt: Suche nach der optimalen Joinreihenfolge
Felix Naumann | Datenbanksysteme I | WS 06/07
Anwendung der Transformationsregeln
πs.Semester
32
σp.Name = ´Sokrates´ and ...
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
In welchen Semestern
sind die Studenten, die
VLen bei Sokrates hören?
×
×
×
s
p
v
h
Folie: Prof. Alfons Kemper, TU München
Felix Naumann | Datenbanksysteme I | WS 06/07
16
Aufspalten der Selektionsprädikate
33
πs.Semester
πs.Semester
σp.PersNr=v.gelesenVon
σp.Name = ´Sokrates´ and ...
σv.VorlNr=h.VorlNr
×
σp.Name = ´Sokrates´
p
×
×
s
σs.MatrNr=h.MatrNr
×
×
v
p
×
h
v
Folie: Prof. Alfons Kemper, TU München
s
h
Felix Naumann | Datenbanksysteme I | WS 06/07
Verschieben der Selektionsprädikate
„Pushing Selections“
πs.Semester
34
πs.Semester
σp.PersNr=v.gelesenVon
σp.PersNr=v.gelesenVon
σv.VorlNr=h.VorlNr
σs.MatrNr=h.MatrNr
σp.Name = ´Sokrates´
×
×
s
×
p
×
σv.VorlNr=h.VorlNr
σp.Name = `Sokrates`
×
σs.MatrNr=h.MatrNr
v
s
h
Felix Naumann | Datenbanksysteme I | WS 06/07
v
×
p
h
Folie: Prof. Alfons Kemper, TU München
17
35
Zusammenfassung von Selektionen
und Kreuzprodukten zu Joins
πs.Semester
σp.PersNr=v.gelesenVon
πs.Semester
⋈p.PersNr=v.gelesenVon
×
σv.VorlNr=h.VorlNr
σp.Name = ´Sokrates´
×
⋈v.VorlNr=h.VorlNr
σs.MatrNr=h.MatrNr
p
σp.Name = ´Sokrates´
v
×
p
⋈s.MatrNr=h.MatrNr
s
h
v
Folie: Prof. Alfons Kemper, TU München
s
h
Felix Naumann | Datenbanksysteme I | WS 06/07
36
Optimierung der Joinreihenfolge:
Kommutativität und Assoziativität
ausnutzen
πs.Semester
πs.Semester
⋈s.MatrNr=h.MatrNr
⋈p.PersNr=v.gelesenVon
⋈v.VorlNr=h.VorlNr
s
⋈v.VorlNr=h.VorlNr
⋈s.MatrNr=h.MatrNr
s
h
σp.Name = ´Sokrates´
⋈p.PersNr=v.gelesenVon
v
p
h
σp.Name = ´Sokrates´
Felix Naumann | Datenbanksysteme I | WS 06/07
p
v
Folie: Prof. Alfons Kemper, TU München
18
37
Was hat´s gebracht?
πs.Semester
4
⋈s.MatrNr=h.MatrNr
⋈p.PersNr=v.gelesenVon
4
⋈v.VorlNr=h.VorlNr
13
⋈v.VorlNr=h.VorlNr
13
⋈s.MatrNr=h.MatrNr
s
πs.Semester
4
3
σp.Name = ´Sokrates´
⋈p.PersNr=v.gelesenVon
p
v
1
h
σp.Name = ´Sokrates´
h
Felix Naumann | Datenbanksysteme I | WS 06/07
p
v
Folie: Prof. Alfons Kemper, TU München
Einfügen von Projektionen
πs.Semester
πs.Semester
38
⋈s.MatrNr=h.MatrNr
⋈s.MatrNr=h.MatrNr
⋈v.VorlNr=h.VorlNr
πh.MatrNr
s
⋈v.VorlNr=h.VorlNr
h
h
v
s
⋈p.PersNr=v.gelesenVon
⋈p.PersNr=v.gelesenVon
σp.Name = ´Sokrates´
s
σp.Name = ´Sokrates´
p Naumann | Datenbanksysteme I | WS 06/07
Felix
p
v
Folie: Prof. Alfons Kemper, TU München
19
Gruppierung assoziativer /
kommutativer Operatoren
39
Fasse Teilbäume mit gleichen assoziativen und kommutativen Operatoren zu nären Operatoren zusammen
■ Natürlicher Join, Vereinigung, Schnittmenge
⋈
∪
⋈
⋈
⋈
U
V
W
∪
R
S
T
∪
U
V
W
R S T
■ Klappt manchmal auch für θ-Joins und Natural Joins zusammen
□ Natural Joins zu θ-Join mit entsprechenden Bedingungen umwandeln
□ Projektion um doppelte Attribute zu entfernen
□ Bedingungen müssen assoziativ sein
Felix Naumann | Datenbanksysteme I | WS 06/07
Überblick
40
■ Parsen der Anfrage
■ Transformationsregeln der RA
■ Logische Anfragepläne
■ Optimierung
■ Kostenmodelle
■ (Dynamische Programmierung)
Felix Naumann | Datenbanksysteme I | WS 06/07
20
Kostenbasierte Optimierung
41
■ Konzeptionell: Generiere alle denkbaren
Anfrageausführungspläne
■ Bewerte deren Kosten anhand eines
Kostenmodells
□ Statistiken und Histogramme
□ Kalibrierung gemäß verwendeter Rechner
□ Abhängig vom verfügbaren Speicher
Achtung: Nicht
zu lange
optimieren!
□ Aufwands-Kostenmodell
– Durchsatz-maximierend
– Nicht Antwortzeit-minimierend
■ Führe billigsten Plan aus
Felix Naumann | Datenbanksysteme I | WS 06/07
Problemgröße (Suchraum)
42
■ Konzeptionell: Generiere alle denkbaren Anfrageausführungspläne
■ Anzahl Bushy-Pläne mit n Tabellen
n
2n
(2(n-1))!/(n-1)!
2
4
2
(2(n-1))!
5
32
1.680
(n-1)!
10
1.024
1,76*1010
20
1.048.576
4,3*1027
■ Plankosten unterscheiden sich um viele Größenordnungen.
■ Optimierungsproblem ist NP-hart
Folie: Prof. Alfons Kemper, TU München
Felix Naumann | Datenbanksysteme I | WS 06/07
21
Kostenmodell
43
Indexinformationen
Algebraischer
Ausdruck
Ballungsinformationen
Kostenmodell
DB-Kardinalitäten
Ausführungskosten
Attributverteilungen
Folie nach Prof. Alfons Kemper, TU München
Felix Naumann | Datenbanksysteme I | WS 06/07
Statistiken
44
■ Zu jeder Basisrelation
□ Anzahl der Tupel
□ Tupelgröße
■ Zu (jedem) Attribut
□ Min / Max
Problem: Erstellung und Update der
Statistiken
■ Deshalb meist nur explizit/manuell
zu initiieren
□ runstats()
□ Werteverteilung
(Histogramm)
□ Anzahl der distinct Werte
■ Zum System
□ Speichergröße
□ Bandbreite
□ I/O Zeiten
□ CPU Zeiten
Felix Naumann | Datenbanksysteme I | WS 06/07
22
Kosten von Operationen
45
Projektion:
■ Keine Kosten falls mit anderem Operator kombiniert
Selektion
■ Ohne Index: Gesamte Relation von Festplatte lesen
■ Mit Baum-Index: Teil des Index von Platte lesen (Baumtiefe) und gesuchte
Seite von Platte lesen
■ Bei Pipelining: (Fast) keine Kosten
Join
■ Je nach Joinalgorithmus
■ Nested Loops, Hash-Join, Sort-Merge Join
Sortierung: Nicht hier
Felix Naumann | Datenbanksysteme I | WS 06/07
Kosten von Operationen
46
Wesentliches Kostenmerkmal: Anzahl der Tupel im Input
■ Insbesondere: Passt die Relation in den Hauptspeicher?
■ Selektion, Projektion, Sortierung, Join
Output ist Input des nächsten Operators.
Deshalb: Ein Kostenmodel schätzt u.a. für jede Operation die Anzahl
der Ausgabetupel.
■ „Selektivität“ in Bezug auf Inputgröße
■ #Ausgabetupel = #Eingabetupel x Selektivität
■ Auch „Selektivitätsfaktor“ (selectivity factor, sf)
Felix Naumann | Datenbanksysteme I | WS 06/07
23
Selektivität
47
Selektivität schätzt Anzahl der qualifizierenden Tupel relativ zur
Gesamtanzahl der Tupel in der Relation.
Projektion:
■ sf = |R|/|R| = 1
Selektion:
■ sf = |σC(R)| / |R|
Join:
■ sf = |R ⋈ S| / |R x S| = |R ⋈ S| / (|R| · |S|)
Felix Naumann | Datenbanksysteme I | WS 06/07
Selektivität schätzen
48
Selektion:
■ Selektion auf einen Schlüssel:
□ sf = 1 / |R|
■ Selektion auf einen Attribut A mit m verschiedenen Werten:
□ sf = (|R| / m) / |R| = 1/m
□ Dies ist nur geschätzt!
Join
■ Equijoin zwischen R und S über Fremdschlüssel in S
□ sf = 1/ |R|
□ „Beweis“: sf = |R ⋈ S| / (|R| x |S|) = |S| / (|R| · |S|)
Felix Naumann | Datenbanksysteme I | WS 06/07
24
Selektivität schätzen
49
Felix Naumann | Datenbanksysteme I | WS 06/07
Modelle zum besseren Schätzen der
Selektivität
50
Gleichverteilung der Werte
■ Platzsparend (count, max, min), einfach
■ Schlechte Abschätzung bei “skew” (ungleiche Verteilung)
Histogramme (Beispiel gleich)
■ Parametrisierte Größe, einfach
■ Güte der Abschätzung hängt von Histogrammtyp und -größe ab.
■ Außerdem: Aktualität
Sampling
■ Repräsentative Teilmenge der Relation
■ Parametrisierte Größe, schwierig zu finden
■ Güte hängt von Samplingmethode und Samplegröße ab
■ Außerdem: Aktualität
Felix Naumann | Datenbanksysteme I | WS 06/07
25
Beispiel zu Histogrammen
1600
51
1400
1200
1000
Frequency
SELECT *
FROM product p, sales S
WHERE
p.id=s.p_id and
p.price > 100
800
600
400
200
0
0-1
1-2
2-5
Gegeben 3300 products, 1M sales
5-10
10-20
20-50
50-100
1001000
Price Range
Gleichverteilung
■ Preisspanne ist 0-1000 => Selektivität der Bedingung ist 9/10
□ Erwartet: 9/10*3300 ≈ 3000 Produkte
Histogramm-basiert
■ Angenommen 10 equi-width buckets
■ Selektivität der Bedingung ist 5/3300 ≈ 0,0015 also 5 Produkte
Felix Naumann | Datenbanksysteme I | WS 06/07
Kosten – Weitere Komplikationen
52
Parallelität / Pipelining
■ Kosten aller Operatoren können nicht addiert werden.
Hauptspeichergröße
■ Pufferung und Caching
I/O Kosten (Lesen einer Seite) vs. CPU Kosten
Multiuser: Durchsatz statt Antwortzeit
=> Kostenmodelle sind hochkomplex
Felix Naumann | Datenbanksysteme I | WS 06/07
26
Herunterladen