Grundlagen der SQL

Werbung
Grundlagen der
SQL-Optimierung
Dr. Frank Haney
1
Inhalt







Phasen der SQL-Verarbeitung
SQL-Optimierung – Grundlagen
Der kostenbasierte Optimizer – Funktionsweise
Entscheidungsgrundlagen
Indexverwendung
Ausführungspläne
Automatismen
Dr. Frank Haney
2
Bearbeiten von Abfragen (SELECT) I
Parse
Bind
Execute
Fetch
Parse-Phase:
 Sucht im Shared Pool nach der Anweisung
 Syntaxprüfung
 Prüft Semantik und Privilegien
 Führt View-Definitionen und Unterabfragen zusammen (Merging)
 Sperrt die währen der Parse-Phase verwendeten Objekte
 Erzeugt und speichert den Ausführungsplan (Optimizer)
Anmerkung: Die erste Wertzuweisung von BIND-Variablen ist ab 9i dem
Optimizer schon bekannt! = Bind Peeking
Dr. Frank Haney
3
Bearbeiten von Abfragen (SELECT) II
Parse
Bind
Execute
Fetch
Bind-Phase:
 Durchsucht die Anweisung nach Bind-Variablen
 Weist einen Wert (neu) zu
Execute-Phase
 Ausführungsplan wird angewendet
 I/Os werden ausgeführt
Fetch-Phase
 Zeilen werden abgerufen
 Erforderliche Sortierungen werden ausgeführt
 Array Fetch-Mechanismus wird verwendet
Dr. Frank Haney
4
SQL-Optimierung – Grundlagen
Bestimmumgsstücke
 Prinzipien der Plangenerierung
 Kostenfunktionen der verschiedenen Basisoperationen
 Transformationsregeln für SQL-Anweisungen
 Kostenmodell (plattformabhängig!)
 Informationen über die Daten (Statistiken etc.)
 Suchstrategie nach dem effizientesten Plan
Prinzipien




Selektion so früh wie möglich
Zusammenfassung von Basisoperationen
Möglichst wenig Zwischenergebnisse speichern (Pipelining)
Keine irrelevanten Berechnungen ausführen
Dr. Frank Haney
5
Logische Optimierung
Übersetzung der SQL in einen unoptimierten Plan, dabei:




Sichtexpansion
Standardisierung (z.B. in konjunktive Normalform bringen)
Vereinfachung (Propagierung von Konstanten, Ermittlung
unerfüllbarer Prädikate, Idempotenzen)
Entschachtelung (Auflösung von Unterabfragen)
Algebraische Optimierung




Entfernen redundanter Operationen
Verbundreihenfolge (logisch, ohne Kosten)
Vorgruppierungen
Verschiebung von Selektion und Projektion möglichst weit in
Richtung der Blätter des Plans
Dr. Frank Haney
6
Physische Optimierung
Kostenbasierte Auswahl aus einer Menge von Plänen





Anwendung der Berechnungsalgorithmen
(Transformationsregeln + Kostenfunktionen)
Einbeziehung von Statistiken über die Daten und ihre
Verteilung
Einsatz eines gewichteten Kostenmodells
Verwendung von Suchstrategien
Vermeidung teurer Operationen
Probleme



Gewicht der Kosten u.U. plattformabhängig
Deterministische Suchstrategien führen u.U zu aufwendiger
Optimierung (Parse-Zeit)
Heuristische Suchstrategien finden eventuell nicht den
optimalen Plan (Nebenminima)
Dr. Frank Haney
7
Optimizer – Geschichte
Dr. Frank Haney
8
Optimizermodi
Dr. Frank Haney
9
Kostenbasierter Optimizer
Der CBO






Anweisungstransformation (z.B. Unterabfragen in Joins)
Auswahl der Join-Reihenfolge
Auswahl der Join-Methode
erzeugt auf der Grundlage der möglichen Zugriffspfade eine Menge von
Ausführungsplänen
schätzt die Selektivität, Kardinalität und Kosten (mutmaßlicher
Ressourcenverbrauch) jedes Plans auf der Grundlage von Statistiken.
Kostenfaktoren:
•
Anzahl der logischen Lesevorgänge (wichtigster Faktor)
•
CPU-Nutzung
•
Netzwerkübertragungen
vergleicht die Kosten und wählt den günstigsten Plan.
Dabei gilt:



Ein I/O erzeugt eine COST Einheit
CPU-Zeit wird in COST Einheiten ausgedrückt
SORT (TEMP) wird in COST Einheiten ausgedrückt
Dr. Frank Haney
10
Grenzen des kostenbasierten Optimizer
Probleme bekommt der CBO bei
 Korrelierten Spalten  Erweiterte Statistiken in Oracle 11g
 Blöcke (Tupel) sind bereits von anderen Statements in den Cache
geladen  evt. SQL Result Cache verwenden (Oracle 11g)




Bindevariablen für sehr ungleichmäßig verteilte Spaltenwerte 
Adaptive Cursor Sharing in Oracle 11g
Subquery Unnesting und View Merging: Funktioniert regelbasiert
ohne Vergleich der Kosten des Original-Statements
Permutationen der Join-Reihenfolge bei vielen Tabellen im Join
(lange Parsezeit vs. Verfehlen des optimalen Plans)
Mögliche Lösungen
• Guten Plan durch Optimizer Hints realisieren
• Stored Outlines
• SQL Profile (ab Oracle 10g)
Dr. Frank Haney
11
CBO – Funktionsweise
Dr. Frank Haney
12
Wichtige Abfragetransformationen












IN-Liste: mehrfaches OR mit Gleichheitszeichen
Unterabfragen: Join
LIKE ohne Wildcard: Gleichheitszeichen
a > ANY (b, c): a > b OR a > c
a > ALL (b, c): a > b AND a > c
a > ANY (select b from c): EXISTS (select b from c where a > b)
a BETWEEN b AND c: a >= b AND a <= c
NOT a = (unterabfrage): a != (unterabfrage)
Verschiedene Bedingungen mit OR: UNION ALL
DISTINCT, GROUP BY, JOIN: eventuell implizite Sortierung
Views: View Merging oder Predicate Pushing
a operator Konstante AND a=b (Transitivität): b operator Konstante
Dr. Frank Haney
13
Beispiel Abfragetransformationen I
Subquery Unnesting
Dr. Frank Haney
14
Beispiel Abfragetransformationen II
Auflösung Transitivität
Dr. Frank Haney
15
Beispiel Abfragetransformationen III
Dr. Frank Haney
16
Entscheidungsgrundlagen für den CBO
OBJEKT
SYSTEM
STATISTIKEN
HISTOGRAM
HINTS
INITIALISIERUNGSPARAMETER
NLS
RUNTIME INFORMATION
OPTIMIZER
ZUGRIFFSPFADE
STORED OUTLINES
DYNAMIC SAMPLING
ORACLE RELEASE
Dr. Frank Haney
SQL PROFILE
SQL PLAN BASELINES
17
Was ist ein guter Ausführungsplan?
– Die steuernde Tabelle hat den besten Filter.
– An den nächsten Schritt werden so wenig Zeilen wie
nötig übergeben.
– Die Join-Methode entspricht der Zahl der
zurückgegebenen Zeilen.
– Views werden effizient verwendet.
– Es gibt keine ungewollten kartesischen Produkte.
– Auf jede Tabelle wird effizient zugegriffen.
– Die Prädikate in der SQL-Anweisung und die
Anzahl der Zeilen in der Tabelle müssen geprüft
werden.
– Ein Full Table Scan bedeutet nicht Ineffizienz.
Dr. Frank Haney
18
Statistiken für den CBO sammeln
ANALYZE SQL-Befehl, berechnet oder schätzt Statistik, relativ schlecht für die
Performance, wird eventuell in der Zukunft vom CBO nicht mehr unterstützt.
(Für Klausel VALIDATE STRUCTURE aber notwendig.)
Syntax:
ANALYZE {INDEX|TABLE|CLUSTER} name {COMPUTE|ESTIMATE|DELETE}
STATISTICS [FOR {TABLE|COLUMNS (col_name, ...)|ALL
COLUMNS|ALL INDEXED COLUMNS|ALL INDEXES} [SIZE n]] [SAMPLE
n {ROWS|PERCENT}];
Views: USER_TABLES, USER_TAB_COLUMNS, USER_TAB_COL_STATISTICS,
USER_INDEXES, DBA_HISTOGRAMS
DBMS_STATS PL/SQL-Package, von Oracle empfohlen, besser für die
Performance, Statistiken können exportiert und importiert werden. (Stabilität
des Ausführungsplans)
Syntax:
DBMS_STATS.GATHER_DATABASE_STATS()
DBMS_STATS.EXPORT_SCHEMA_STATS()
Dr. Frank Haney
19
Was wird gesammelt?
Tabellen:




Zeilenzahl
Anzahl der Blöcke
Durchschnittliche Zeilenlänge
Migration und Verkettung
Spalten:



Anzahl unterschiedlicher Werte (Kardinalität)
Anzahl der NULL-Marken
Werteverteilung (Histogramme – wenn erforderlich)
Indizes:




Anzahl der Blätter (Leaf Blocks)
Zahl der Ebenen
Anzahl der Einträge pro Indexschlüssel
Clustering-Faktor
System:


I/O-Performance (Single und Multi Block Read)
CPU-Verwendung
Dr. Frank Haney
20
B*Baum-Indizes
Indexstruktur
Wurzel (root)
Zweig 2
Zweig 1
Blatt 1 (leaf)
Blatt 2
Blatt 3
Blatt 4
Blatt 5
Doppelte Verkettung
Indexeintrag
Indexzeilenheader
Dr. Frank Haney
Spaltenlänge
Spaltenwert
ROWID
21
Beispiele für Indexzugriff oder Full Table Scan
Index auf einer Spalte (fett):
... WHERE SUBSTR(name,1,6)='SCHULZ';
... WHERE name LIKE 'SCHULZ%';
... WHERE name LIKE '%UELLER';
... WHERE name IN ('SMITH', 'KING');
... WHERE TRUNC(einstellungsdatum)=TRUNC(sysdate-7);
... WHERE gehalt IS NULL;
... WHERE gehalt IS NOT NULL;
... WHERE gehalt < '2000';
... WHERE gehalt != 2000;
... WHERE gehalt > provision;
... WHERE gehalt + 3000 < 5000;
... WHERE name=COALESCE(&var, name);
... WHERE name || vorname = 'MUELLERGEHILFE';
Index über mehrere Spalten (name, abteilungs_nr):
... WHERE abteilungs_nr = 10;
... WHERE name LIKE ('KRA%');
Dr. Frank Haney
22
Beispiele NOT IN vs. NOT EXISTS
Gesucht sind Abteilungen, zu denen es keine Mitarbeiter gibt:
SELECT abteilungsname, abteilungs_nr
FROM abteilungen
WHERE abteilungs_nr NOT IN
(SELECT abteilungs_nr FROM mitarbeiter);
Oder?
SELECT abteilungsname, abteilungs_nr
FROM abteilungen
WHERE NOT EXISTS
(SELECT 1 FROM mitarbeiter
WHERE abteilungen.abteilungs_nr = mitarbeiter.abteilungs_nr);
Dr. Frank Haney
23
Tools für das Anzeigen der Ausführungspläne








EXPLAIN PLAN
SQL*Plus Autotrace
SQL Trace und TKPROF
V$SQL_PLAN
DBMS_XPLAN.DISPLAY_CURSOR
SQLDeveloper
Extended SQL-Tracing (Events 10046 und 10053)
SQLTXPLAIN
Dr. Frank Haney
24
Ausführungspläne
PDB1@ORCL> select * from mitarbeiter natural join abteilungen;
Execution Plan
---------------------------------------------------------Plan hash value: 4182503278
-------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
-------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
14 | 1680 |
6
(0)| 00:00:01
|* 1 | HASH JOIN
|
|
14 | 1680 |
6
(0)| 00:00:01
|
2 |
TABLE ACCESS FULL| ABTEILUNGEN |
4 |
120 |
3
(0)| 00:00:01
|
3 |
TABLE ACCESS FULL| MITARBEITER |
16 | 1440 |
3
(0)| 00:00:01
PDB1@ORCL> select * from mitarbeiter natural join abteilungen where abteilungs_nr=10;
Execution Plan
---------------------------------------------------------Plan hash value: 3200959053
----------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
-----------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
3 |
360 |
5 (0) | 00:00:01 |
|
1 | NESTED LOOPS
|
|
3 |
360 |
5 (0) | 00:00:01 |
|
2 |
TABLE ACCESS BY INDEX ROWID| ABTEILUNGEN
|
1 |
30 |
2 (0) | 00:00:01 |
|* 3 |
INDEX UNIQUE SCAN
| ABT_PRIMARY_KEY |
1 |
|
1 (0) | 00:00:01 |
|* 4 |
TABLE ACCESS FULL
| MITARBEITER
|
3 |
270 |
3 (0) | 00:00:01 |
Dr. Frank Haney
25
Automatismen (Überblick)
–
–
–
–
–
–
–
–
Dynamic Sampling (9i , erweitert in 12c)
Automatic Database Diagnostic Monitor (10g)
Cardinality Feedback (11g, erweitert in 12c)
Adaptive Cursor Sharing (11g)
SQL Plan Baselines und Plan History (11g)
Automatic SQL-Tuning (11g)
Automatic Column Group Detection (12c)
Adaptive Query Optimization (12c)
• Adaptive Plans
• Adaptive Statistics
Dr. Frank Haney
26
Herunterladen