PTA_DB_OracleDBTuning_Schulung

Werbung
Beratung
Organisation
Softwareentwicklung
Tuning
Tuningvon
vonOracle-Datenbanken
Oracle-Datenbanken
(Version
(Version8.1.7)
8.1.7)
seit 1969
Tuning von Oracle-Datenbanken
Gliederung
Gliederung
1.
Einleitung
2.
Performance: Abläufe und Messungen
2.1 Optimizer
2.2 Statistiken
2.3 SQL Trace
3.
Zugriffsoptimierung
3.1 Datenbankdesign (Parallelisierung, Anzahl Hintergrundprozesse usw.)
3.2 Speicherstrukturen (Extents, Cluster, Indizes usw.)
3.3 Anwendungsbezogene Optimierung
4.
Datenbankoptimierung
4.1 Optimierung externer Ressourcen (I/O, Hauptspeicher, Prozessoren usw.)
4.2 Optimierung interner Ressourcen (SGA, Latches usw.)
5.
Quellen
12.02.2007
PTA GmbH, Unternehmensberatung
2
Tuning von Oracle-Datenbanken
Aufgabenspektrum
Aufgabenspektrum der
der Datenbankadministration
Datenbankadministration
•
•
•
•
•
•
•
•
Datenbankverfügbarkeit verwalten
Datenbanken planen und erstellen (Zugriffsoptimierung)
Physikalische Strukturen verwalten
Speicherplatz entsprechend Design verwalten
Sicherheit verwalten
Netzwerkadministration
Backup und Recovery
Datenbankoptimierung
Quelle: Oracle Schulung „K3308 Oracle8i Datenbankadministration“
12.02.2007
PTA GmbH, Unternehmensberatung
3
Tuning von Oracle-Datenbanken
Ziele
Zieledes
desDB-Tunings
DB-Tunings
•
Online Transaction Processing (OLTP) Anwendungen
– Performance über den Durchsatz (throughput) definiert
– Pro Tag tausende oder sogar hunderttausende von kleinen Transaktionen.
•
Decision Support Systeme (DSS Anwendungen)
– Performance (unter anderem) über die Antwortzeit (response time) definiert.
– Abfragen, lesen und sortieren tausende von Datensätzen aus verschiedenen
Tabellen.
Quelle: Oracle8i Tuning Release 8.1.7
12.02.2007
PTA GmbH, Unternehmensberatung
4
Tuning von Oracle-Datenbanken
Tuningziele
Tuningziele(gemäß
(gemäßOracle)
Oracle)
•
Klare Ziele fürs Tuning setzen:
– Man kann keinen Erfolg haben, wenn man „Erfolg“ nicht definiert hat.
•
“Machen Sie die Anwendung so schnell wie möglich."
– Sehr schwierig herauszufinden, wann dieses Ziel erreicht wurde
– Sind die Ergebnisse den Anforderungen der Anwendung gerecht?
•
Besseres Beispiel: "Für 90% aller Transaktionen eine Antwortzeit von
weniger als drei Sekunden"
•
Behalten Sie die Ziele im Kopf während jede einzelne Tuningmaßnahme
durchdacht wird.
•
Behalten Sie auch im Kopf, daß Ziele kollidieren können
– Damit die beste Performance für einen SQL Befehl erreicht wird, nimmt ev. die
Performance anderer SQL Befehle ab.
Quelle: Oracle8i Tuning Release 8.1.7
12.02.2007
PTA GmbH, Unternehmensberatung
5
Tuning von Oracle-Datenbanken
Vorgehensweise
VorgehensweiseTuningmaßnahmen
Tuningmaßnahmen
•
Business Rules
– Allgemeine Anforderung, Eigenschaften der Datenbank
•
•
Datendesign
- Normalisierung der Daten
- Indizes auf Primary- und Foreign-Keys
- Zugriffskonflikte:
-
•
Wie groß ist die Datenmenge?
z.B. die DB hat eine Größe von 1TB, auf nur auf 0,5% der Daten wird
zugegriffen => "hot spot"
Anwendung
- Effiziente Kommunikation mit der Datenbank: Netzwerkverkehr
12.02.2007
PTA GmbH, Unternehmensberatung
6
Tuning von Oracle-Datenbanken
Vorgehensweise
VorgehensweiseTuningmaßnahmen
Tuningmaßnahmen
•
Logische Datenbankstruktur
– Nutzung von Views
– Tabellen u. Indizes in verschiedenen Tablespaces?
•
Datenbankoperationen
– Wann Stored Procedures, Backups laufen
– Wie viele Ressourcen sie brauchen
•
Datenzugriff
– Indizes, Optimizer Hints
•
Hauptspeicher (Memory)
– Größe der verschiedenen Cache-Bereiche
– Blockgröße: db_block_size
•
I/O, physische Struktur
– Effizientes Setzen der Extentgröße
12.02.2007
PTA GmbH, Unternehmensberatung
7
Tuning von Oracle-Datenbanken
Vorgehensweise
VorgehensweiseTuningmaßnahmen
Tuningmaßnahmen
Quelle: Oracle8i Tuning Release 8.1.7
12.02.2007
PTA GmbH, Unternehmensberatung
8
Tuning von Oracle-Datenbanken
Wann
WannTuning
Tuningdurchgeführt
durchgeführtwerden
werdensollte
sollte
Quelle: Oracle8i Tuning Release 8.1.7
12.02.2007
PTA GmbH, Unternehmensberatung
9
Tuning von Oracle-Datenbanken
Gliederung
Gliederung
1.
Einleitung
2.
Performance: Abläufe und Messungen
2.1 Optimizer
2.2 Statistiken
2.3 SQL Trace
3.
Zugriffsoptimierung
3.1 Datenbankdesign (Parallelisierung, Anzahl Hintergrundprozesse usw.)
3.2 Speicherstrukturen (Extents, Cluster, Indizes usw.)
3.3 Anwendungsbezogene Optimierung
4.
Datenbankoptimierung
4.1 Optimierung externer Ressourcen (I/O, Hauptspeicher, Prozessoren usw.)
4.2 Optimierung interner Ressourcen (SGA, Latches usw.)
5.
Quellen
12.02.2007
PTA GmbH, Unternehmensberatung
10
Tuning von Oracle-Datenbanken
Welche
WelcheBereiche
Bereichesind
sindrelevant?
relevant?
•
Online Transaction Processing (OLTP)
–
–
–
–
–
–
•
SQL Statements
Transaktionen
Bindevariablen
Rollbacksegmente
Größe der Shared Pool, Datenblöcke, Database Buffer Cache
Packages und Stored Procedures
Decision Support Systems (DSS)
–
–
–
–
–
SQL Statements
Indizes
Abfragen-Hints
Der Optimizer
Sort-Operationen
Quelle: Oracle8i Tuning Release 8.1.7
12.02.2007
PTA GmbH, Unternehmensberatung
11
Tuning von Oracle-Datenbanken
Phasen
Phaseneiner
einer SQL-Anweisung
SQL-Anweisung
Instanz
SGA
Shared Pool
Innerhalb des Shared Pool des System
Global Area (SGA):
Im Library Cache werden gespeichert:
-
Datenbank
12.02.2007
Der geparste Code
Die Ausführungspläne.
Der Data Dictionary Cache enthält die
zuletzt verwendeten Informationen über
DB-Objekte und Berechtigungen.
PTA GmbH, Unternehmensberatung
12
Tuning von Oracle-Datenbanken
Phasen
Phaseneiner
einer SQL-Anweisung
SQL-Anweisung
1. Parse
- Der Serverprozess sucht im Library Cache nach identischen Anweisungen
(Groß/Kleinschreibung wird beachtet).
- Überprüft Syntax des Statement,
- Überprüft Objektnamen und Privilegen des Benutzers
- Erzeugt und speichert den Ausführungsplan.
- Für das Statement wird ein Abschnitt (Cursor) im Library Cache vergeben.
2. Bind
- Die Anweisung wird nach Bindevariablen durchsucht
- Die Werte werden zugewiesen
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
12.02.2007
PTA GmbH, Unternehmensberatung
13
Tuning von Oracle-Datenbanken
Phasen
Phaseneiner
einer SQL-Anweisung
SQL-Anweisung
3. Ausführung (Execute):
-
Identifizierung der ausgewählten Zeilen anhand des Ausführungsplans
Änderungen an den Datenblöcken bei DML
4. Abrufen (Fetch):
-
Bei Abfragen werden die Zeilen abgerufen und an den Serverprozess
zurückgegeben
Sortierungen (wenn erforderlich) werden durchgeführt
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
12.02.2007
PTA GmbH, Unternehmensberatung
14
Tuning von Oracle-Datenbanken
Der
Der Optimizer
Optimizer
•
Der Optimizer stellt die effizienteste Weise fest, auf die eine SQL
Anweisung ausgeführt werden kann.
•
Dies ist ein wichtiger Schritt bei allen DML Anweisungen. SELECT,
INSERT, UPDATE oder DELETE.)
•
Verfahren (Instanz (siehe init.ora), pro Sitzung oder pro Statement):
a) Regelbasiert (rule based):
• eine Entscheidung wird auf der Basis fester Regeln getroffen
b) Kosten- bzw. Statistikbasiert (cost based, ab Oracle 7)
• das Anlegen von Statistiken zu den Tabellen und Indizes über den
Befehl ANALYZE ist unbedingt erforderlich.
12.02.2007
PTA GmbH, Unternehmensberatung
15
Tuning von Oracle-Datenbanken
Der
Der regelbasierte
regelbasierteOptimizer
Optimizer
•
Die Entscheidung über den besten Ausführungsplan wird nach festen
Regeln anhand Informationen aus dem Data Dictionary (indizierte Spalten,
Clustersegmente) getroffen.
– Bewertungsschema
• Rang 1: Einzelne Zeile über ROWID
• ...
• Rang 9: Einspaltiger Index
• ....
• Rang 15: Full Table Scan
– Wenn vorhanden, werden Indizes auf jeden Fall verwendet.
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
12.02.2007
PTA GmbH, Unternehmensberatung
16
Tuning von Oracle-Datenbanken
Der
Der kostenbasierte
kostenbasierteOptimizer
Optimizer
•
Verfahren
–
–
–
–
•
Der Optimizer generiert potentielle Zugriffspläne, basierend auf den verfügbaren
Zugriffspfaden und Hinweisen (Hints) im SQL-Statement.
Mittels der im Data Dictionary vorhandenen Statistiken über die Datenverteilung
und Speicherattribute der Tabellen und Indizes, auf die zugegriffen wird, schätzt
der Optimizer die Kosten jedes Plans.
Die Kosten: Ein geschätzter Wert, proportional zum erwarteten
Ressourceverbrauch. Ressourcen sind u.a. der I/O und Speicher, die bei der
Ausführung des Statements gebraucht werden.
Der Optimizer wählt den Plan mit den geringsten Kosten aus.
Mit der wachsenden Leistungsfähigkeit des statistikorientierten Optimizers
wird der regelbasierte Ansatz - vor allem für komplexe Zugriffe - immer mehr
in den Hintergrund gerückt.
12.02.2007
PTA GmbH, Unternehmensberatung
17
Tuning von Oracle-Datenbanken
Der
Der Optimizer:
Optimizer: Hints
Hints
•
Hints: Steuerung des Optimizers auf der Ebene einzelner SQL-Befehle.
•
Hints können so unterschiedliche Dinge regeln wie:
– Das Optimierungsziel des Optimizers
– Den Zugriffspfad für eine Tabelle
– Die Reihenfolge beim Joins von Tabellen
•
Beispiele (siehe auch später):
select /*+ ALL_ROWS */ * from TAB_KUNDE;
select /*+ FIRST_ROWS */ * from TAB_KUNDE;
•
Nachteil: Hints sind hart codiert, also statisch.
12.02.2007
PTA GmbH, Unternehmensberatung
18
Tuning von Oracle-Datenbanken
Der
Der Befehl
Befehl EXPLAIN
EXPLAIN PLAN
PLAN
•
In der Parse-Phase wird für jedes abgesetzte SQL-Anweisung ein
Ausführungsplan erzeugt.
•
Der Ausführungsplan kann mit dem Statement EXPLAIN PLAN untersucht
werden.
SQL> explain plan for
2 SELECT * FROM emp, dept
3 WHERE emp.deptno = dept.deptno;
Explained.
•
Voraussetzung ist die Existenz der plan_table, in der die Pläne
gespeichert werden.
– Sie wird mit dem Skript %oracle_home%\rdbms\admin\utlxplan.sql
erstellt.
12.02.2007
PTA GmbH, Unternehmensberatung
19
Tuning von Oracle-Datenbanken
Der
Der Befehl
Befehl EXPLAIN
EXPLAIN PLAN
PLAN
•
DBA Studio (8i Client): Instance Manager
12.02.2007
PTA GmbH, Unternehmensberatung
20
Tuning von Oracle-Datenbanken
Der
Der Befehl
Befehl EXPLAIN
EXPLAINPLAN
PLAN
•
Bei der Auswertung muss die plan_table direkt abgefragt werden:
– Die Zugriffspläne aller analysierten Befehle werden gemeinsam
abgelegt
– Es kann ein Statement-ID mitgegeben werden.
SQL> select operation from plan_table;
OPERATION
-----------------------------SELECT STATEMENT
NESTED LOOPS
TABLE ACCESS
TABLE ACCESS
INDEX
12.02.2007
PTA GmbH, Unternehmensberatung
21
Tuning von Oracle-Datenbanken
Der
Der Befehl
Befehl AUTOTRACE
AUTOTRACE
•
Der Ausführungsplan kann auch direkt (einfacher) in der SQL*Plus Sitzung
ausgewertet werden:
SET AUTOT[RACE] {OFF | ON | TRACE[ONLY] | [EXP[LAIN]] |
[STAT[ISTICS]]}
12.02.2007
PTA GmbH, Unternehmensberatung
22
Tuning von Oracle-Datenbanken
Der
Der Befehl
Befehl AUTOTRACE
AUTOTRACEund
undEXPLAIN
EXPLAINPLAN
PLAN
Bemerkungen zu dem Beispiel:
•
set autotrace trace explain statistics schaltet die Ausgabe
der Spalten aus und zeigt den Ausführungsplan an.
– Für die Statistik sind Zugriffsrechte auf die Dynamic Performance Views
und plan_table notwendig.
•
Die Tabelle emp hat eine (indizierte) Primary Key.
•
Die Ausführung fängt mit dem Full Table Scan von Tabelle emp an:
– Für jede Zeile in emp wird über den PK-Index die entsprechende Zeile
über die ROWID (siehe später) aus dept gelesen.
•
In diesem Beispiel handelt es sich um eine regelbasierte Optimierung. Es
sind keine Tabellenstatistiken vorhanden.
12.02.2007
PTA GmbH, Unternehmensberatung
23
Tuning von Oracle-Datenbanken
Ausführungsplan
Ausführungsplaninterpretieren
interpretieren
•
Jeder Schritt des Ausführungsplan nimmt entweder Zeilen aus der
Datenbank ab oder übernimmt Zeilen von anderen Schritten.
8
7
3
1
Auf dem gleichen Niveau.
Die Schritte sind nach ihrer
Ausführung nummeriert.
2
6
5
Joins
4
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
12.02.2007
PTA GmbH, Unternehmensberatung
24
Tuning von Oracle-Datenbanken
Messung
Messungder
der Performance
Performancemit
mit SQL
SQLTrace
Trace
•
Über SQL Trace können weitere Details zu der Performance SQL-Befehle
herausgefunden werden. SQL Trace hat folgende Eigenschaften:
– SQL Trace kann für eine Instanz oder eine Sitzung eingeschaltet
werden.
– Verschiedene Ausführungspläne der gleichen Statement lassen sich
damit vergleichen.
– Für die Phasen Parse, Execute und Fetch werden Zugriffs- und auch
Zeitstatistiken zurückgegeben, z.B.:
• CPU Zeit
• Leseoperationen von der Platte
• Nicht-Treffer im Library Cache
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
12.02.2007
PTA GmbH, Unternehmensberatung
25
Tuning von Oracle-Datenbanken
Utility
UtilitySQL
SQLTrace
Trace-- Aktivierung
Aktivierung
•
Ein Zugriff auf die Tabelle plan_table (utlxplan.sql) und die Rolle
plustrace (plustrce.sql) sind erforderlich.
•
Einträge in initSIDora:
timed_statistics = true
user_dump_dest = (Zielort für Tracedateien)
•
Trace aktivieren
– für gesamtes System (initSID.ora): sql_trace = true
– Pro Sitzung: ALTER SESSION SET sql_trace = true;
– Für eine andere Session:
Procedure DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION
•
Pro Session wird eine Trace-Datei im user_dump_dest geschrieben, die
nach dem Betriebssystemprozess (Windows Thread) benannt ist.
Quelle: Oracle8i Tuning Release 8.1.7
12.02.2007
PTA GmbH, Unternehmensberatung
26
Tuning von Oracle-Datenbanken
Utility
UtilitySQL
SQLTrace
Trace-- Auswertung
Auswertungmit
mitTKPROF
TKPROF
•
TKPROF wertet die Datei, die mit SQL Trace erstellt wurde, aus und erzeugt
eine formatierte Ausgabedatei.
System> TKPROF Ora00210.trc
abst_emp.txt
sys=no
explain=abst/abst@abst
table=abst.plan_table
•
Zahlreiche SORT-Optionen
12.02.2007
•
•
•
•
•
PTA GmbH, Unternehmensberatung
Input-Datei
Ausgabedatei
Die rekursive SQL wird
unterdrückt (Abfragen an sysTabellen).
Mit EXPLAIN PLAN wird für
jedes Statement ein
Ausführungsplan generiert:
Dies ist der Connect-String.
Temporäre Plan-Tabelle
27
Tuning von Oracle-Datenbanken
Utility
UtilitySQL
SQLTrace
Trace-- Ausgabe
Ausgabevon
vonTKPROF
TKPROF
SELECT * FROM dept, emp
WHERE emp.deptno = dept.deptno
call
count
------- -----Parse
1
Execute
1
Fetch
2
------- -----total
4
cpu
elapsed
disk
query
current
-------- ---------- ---------- ---------- ---------0.00
0.02
0
0
0
0.00
0.00
0
0
0
0.01
0.01
0
30
4
-------- ---------- ---------- ---------- ---------0.01
0.03
0
30
4
rows
---------0
0
14
---------14
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 20 (ABST)
Rows
------14
15
14
28
12.02.2007
Row Source Operation
--------------------------------------------------NESTED LOOPS
TABLE ACCESS FULL EMP
TABLE ACCESS BY INDEX ROWID DEPT
INDEX UNIQUE SCAN (object id 3732)
PTA GmbH, Unternehmensberatung
28
Tuning von Oracle-Datenbanken
Statistik
Statistikmittels
mittelsANALYZE
ANALYZEgenerieren
generieren
•
Statistiken werden für Cluster, Tabellen und Indices mit dem ANALYZEKommando generiert.
•
Der kostenbaserte Optimizer nutzt diese Statistiken um abzuschätzen,
welches der Ausführungsplan mit dem niedrigsten I/O und Speicheraufwand
für einen bestimmten SQL Befehl ist.
•
Die Statistiken werden im Data Dictionary gehalten und werden mit diesen
Views abgefragt (z.B. user_tables).
•
Durch die Zusätze compute statistics und estimate statistics
wird eine genaue oder überschlägige Berechnung der Statistiken
gewährleistet.
•
Tabellen, deren Inhalt häufig geändert wird, sollten regelmäßig analysiert
werden.
Quelle: Oracle8i Tuning Release 8.1.7
12.02.2007
PTA GmbH, Unternehmensberatung
29
Tuning von Oracle-Datenbanken
Statistik
Statistikmittels
mittelsANALYZE
ANALYZEgenerieren
generieren
SQL>
SQL>
SQL>
•
ANALYZE TABLE
ANALYZE table
for table for
ANALYZE table
emp ESTIMATE STATISTICS n%;
TAB_KUNDE compute statistics
all indexed columns for all indexes;
TAB_KUNDE compute statistics;
Ab Oracle 7.3 können Histogramme hinzugezogen werden, zum Beispiel,
wenn einige Werte sehr häufig vorkommen und andere sehr selten.
– Der Optimizer kann die Anzahl zu bearbeitenden Zeilen besser schätzen.
– Per Default wird von einer gleichmäßigen Datenverteilung ausgegangen.
•
Statistiken können auch über das Supplied Package SYS.DBMS_STATS
generiert werden (z.B. für ein ganzes DB-Schema)
12.02.2007
PTA GmbH, Unternehmensberatung
30
Tuning von Oracle-Datenbanken
Gliederung
Gliederung
1.
Einleitung
2.
Performance: Abläufe und Messungen
2.1 Optimizer
2.2 Statistiken
2.3 SQL Trace
3.
Zugriffsoptimierung
3.1 Datenbankdesign (Parallelisierung, Anzahl Hintergrundprozesse usw.)
3.2 Speicherstrukturen (Extents, Cluster, Indizes usw.)
3.3 Anwendungsbezogene Optimierung
4.
Datenbankoptimierung
4.1 Optimierung externer Ressourcen (I/O, Hauptspeicher, Prozessoren usw.)
4.2 Optimierung interner Ressourcen (SGA, Latches usw.)
5.
Quellen
12.02.2007
PTA GmbH, Unternehmensberatung
31
Tuning von Oracle-Datenbanken
Datenbankdesign
Datenbankdesign
•
Parallelisierung
– Tabellenzugriffe und Sortierungen können auch parallel durchgeführt
werden.
• Ein Konfigurieren von Parallel Query-Server Prozessen und ein Festlegen
des Grades der Parallelisierung sind erforderlich.
• Parallelisierung ist nur bei entsprechenden Hardwarevoraussetzungen
(mehrere CPU's, mehrere Platten und Plattencontroller,...) sinnvoll.
•
Anzahl Redo-Log-Gruppen
– Beim Wechsel der Redo-Log-Gruppe (Log Switch), wird gleichzeitig
auch ein Checkpoint angestoßen. DBWR (Database Writer) schreibt
geänderte Blöcke von Block Buffer in die Datendateien.
– Es besteht die Möglichkeit, dass beim nächsten Log Switch auf den
DBWR gewartet werden muss, wenn:
• Die Redo Log Members groß sind,
• Die Anzahl der Redo Log Gruppen ist klein,
• Keine anderen Parameter konfiguriert sind.
12.02.2007
PTA GmbH, Unternehmensberatung
32
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen
•
•
Bei der Erstellung Tabellen/ Indizes kann die Extent-Größe sowie der freie
Platz im Data Block festgelegt werden.
Diese Werte können sich auf die Performance einer Abfrage auswirken.
CREATE TABLE my_contacts
(
person_id
NUMBER NOT NULL,
first_name
VARCHAR2(10) NOT NULL,
last_name
VARCHAR2(10) NOT NULL,
address
VARCHAR2(200)
)
PCTFREE
5
PCTUSED
60
TABLESPACE abst
STORAGE(
INITIAL
1024
NEXT
1024
PCTINCREASE 0
MINEXTENTS 1
MAXEXTENTS 120);
12.02.2007
PTA GmbH, Unternehmensberatung
Kleine PCTFREE,
für Updates wenig Platz
Kleine Extents (1KB)
PCTINCREASE = 0
(Default 50 kommt von Oracle7,
max. 1023 Data Files)
33
Tuning von Oracle-Datenbanken
Datenblöcke
Datenblöcke-- PCTFREE
PCTFREE 55
•
5
•
5%
•
•
Der Parameter PCTFREE hat nur
mit der Befüllung der Datenblöcke
zu tun.
5% der Blockgröße bleiben für
zukünftige Updates zu bestehenden
Zeilen frei.
Der Block wird bis ca. 95% mit
Tabellendaten befüllt.
Default-Wert PCTFREE = 10%
Tabellendaten
Quelle: Oracle8i Concepts Release 8.1.5
12.02.2007
PTA GmbH, Unternehmensberatung
34
Tuning von Oracle-Datenbanken
Datenblöcke
Datenblöcke-- PCTUSED
PCTUSED 60
60
60
30%
60%
•
•
PCTUSED = 60%: Neue Zeilen
werden erst in diesen Block
gespeichert, wenn er unter 60%
befüllt ist.
In diesem Beispiel sind 30% frei
und daher ca. 70% belegt.
60%
Tabellendatenmenge
schrumpt wegen DELETEs
Quelle: Oracle8i Concepts Release 8.1.5
12.02.2007
PTA GmbH, Unternehmensberatung
35
Tuning von Oracle-Datenbanken
Datenbankblöcke
Datenbankblöcke--ROW
ROW PIECE
PIECE
Row Header hat
Informationen über:
•
•
•
eindeutige ROWID
Anzahl Spalten
Blocksplitting
Quelle: Oracle8i Concepts
Release 8.1.5
12.02.2007
PTA GmbH, Unternehmensberatung
36
Tuning von Oracle-Datenbanken
Datenbankblöcke
Datenbankblöcke--Block
BlockChaining
Chaining
•
•
In einem Block werden 1 bis n Zeilen einer Tabelle gespeichert.
Aus folgenden Gründen kann eine Zeile über mehr als ein Datenblock
gehen (Block Chaining):
-
Die Tabellenzeile ist größer als ein Datenblock (Spaltentyp wie z.B. LONG oder
VARRAY).
-
Nach einem Update kann die Tabellenzeile wegen Vergrößerung der
Dateninhalte nicht mehr in dem Datenblock gespeichert werden. Beispiel:
UPDATE my_contacts SET address =
'The Charles Dickens Inn, 145 Old Compton Street, London EC1 9QX, UK';
COMMIT;
12.02.2007
PTA GmbH, Unternehmensberatung
37
Tuning von Oracle-Datenbanken
Datenbankblöcke
Datenbankblöcke--Block
BlockChaining
Chaining
•
Chained Blocks bremsen den Lesezugriff über Indizes.
– Im Index ist die eindeutige Adresse (ROWID) der Zeile gespeichert.
– Das Lesen der ganzen Tabelle (full table scan) bleibt unbetroffen.
•
Die Anzahl an Chained Blocks wird bei ANALYZE TABLE im Data Dictionary
gespeichert.
SQL> ANALYZE TABLE abst.my_contacts COMPUTE STATISTICS;
-----------------------------------------------------------SQL> SELECT table_name, last_analyzed, chain_cnt
2 FROM user_tables
3 WHERE table_name = 'MY_CONTACTS';
TABLE_NAME
LAST_ANA CHAIN_CNT
------------------------------ -------- ---------MY_CONTACTS
04.01.02
17379
12.02.2007
PTA GmbH, Unternehmensberatung
38
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen--Tablespaces
Tablespacesund
undExtents
Extents
•
Extents werden zugewiesen, wenn das Segment:
– erzeugt wird (CREATE TABLE/INDEX, temporärer Segmente)
– wächst (INSERT oder UPDATE).
•
Extents werden freigegeben, wenn das Segment:
– gelöscht/ geleert wird (TRUNCATE TABLE, DROP TABLE/INDEX)
•
Empfehlungen:
– Segmente mit Extents einer Uniformgröße anlegen.
– Wenige größere statt viele kleine Extents anlegen.
– Tablespaces für verschiedene Zwecke und auf verschiedene Platten
anlegen: Ein paralleler Zugriff auf Indizes und Tabellen ist möglich.
– (Bei Datenbanken auf einer Platte oder auf RAID5 besteht gemäß
Oracle kein Performanceverlust, wenn Tabellen und Indizes getrennt
sind)
Quelle: Informationen aus Oracle MetaLink
12.02.2007
PTA GmbH, Unternehmensberatung
39
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen--Extents
Extentsund
undFragmentierung
Fragmentierung
•
Die Fragmentierung eines Tablespace entsteht durch:
– Das Löschen von Objekten mit kleinen Extents: Der freigegebene Platz reicht für
neue Objekt nicht und Lücken entstehen.
– Das rasche Wachsen eines Segments, das als Folge aus sehr vielen gestreuten
Extents besteht.
•
•
•
Tablespace-Fragmentierung kann zu gebremster Performance der
Abfragen durch zu starke I/O führen.
Die aktuell belegten Extents können mit Data Dictionary View
dba_segments/ dba_extents abgefragt werden.
Gute Erfahrung mit Tools anderer Hersteller, z.B. 'Toad' von Firma Quest,
'Hora' von der Firma KeepTool.
SQL> SELECT segment_name, owner, tablespace_name,
extents, min_extents, max_extents
FROM dba_segments;
12.02.2007
PTA GmbH, Unternehmensberatung
40
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen--Extents
Extents
12.02.2007
PTA GmbH, Unternehmensberatung
•
Tablespace Map
ist Teil des Oracle
Enterprise
Manager Tuning
Pack.
•
Die Belegung
sowie eventuelle
Fragmentierung
eines Tablespace
werden deutlich
angezeigt.
41
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen--Cluster
Cluster
•
Basis für Cluster sind Tabellen, die hauptsächlich auf Basis des
Clusterschlüssels abgefragt werden.
•
Zeilen werden gruppiert und physikalisch gemeinsam gespeichert.
•
Cluster können weniger Speicherplatz belegen und Abfrageperformanz
verbessern.
•
Zwei Arten: Index-Cluster und Hash-Cluster.
- Bei einem Index-Cluster wird ein indizierter Cluster-Key verwendet.
10 //
20 //
Accounting, New York
King, President ......
Research, Detroit
30//
40//
Index Cluster für dept und emp;
Gemeinsamer Schlüssel deptno
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
12.02.2007
PTA GmbH, Unternehmensberatung
42
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen--Hash
HashCluster
Cluster
•
Der Hash Cluster verwendet eine Hash-Funktion, um den Speicherort einer
Zeile zu berechnen (und nach der Zeile zu suchen).
-
Für eine neue Zeile in einer Tabelle des Cluster wird deren Schlüsselspalte/n zur
Berechnung des Hash-Wertes benutzt.
Nach diesem Wert wird die Zeile gespeichert.
•
Hash Cluster sind für große Tabellen und Gleichheitsabfragen geeignet und
für Full Table Scans ungeeignet.
•
Index-Cluster sind für einen gleichmäßig verteilten Schlüsselwert und
kleinere Datenmenge geeignet.
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
12.02.2007
PTA GmbH, Unternehmensberatung
43
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen--Partitionierung
Partitionierung
•
•
•
Sehr große Tabellen und Indizes (z.B. in Data Warehouse) können in
kleinere und handlichere Partitionen zerteilt werden.
SQL-Statements können statt der ganzen Tabelle nur bestimmte
Partitionen lesen und manipulieren.
Die Partitionen dürfen in verschiedene Tablespaces abgelegt werden
– die I/O Last kann ausgeglichen werden
•
Es wird entweder nach Range (z.B. Datum unten) oder nach einer HashFunktion partitioniert.
CREATE TABLE sales ( acct_no
NUMBER(5),
acct_name
CHAR(30),
amount_of_sale NUMBER(6),
week_no
INTEGER )
PARTITION BY RANGE ( week_no ) ...
(PARTITION sales1 VALUES LESS THAN ( 4 ) TABLESPACE ts0,
...
PARTITION sales13 VALUES LESS THAN ( 52 ) TABLESPACE ts12 );
Oracle8i Concepts
12.02.2007
PTA GmbH, Unternehmensberatung
44
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen--Indizes
Indizes
•
Indizes werden benutzt, entweder um Abfragen zu beschleunigen oder um
Eindeutigkeit zu prüfen.
•
Beim Anlegen eines Primary Key wird automatisch der Index erstellt.
– Der Index stellt sicher, dass alle Einträge einen eindeutigen Wert haben.
•
Foreign Keys werden nicht automatisch indiziert.
– Wenn die Spalten häufig in Join-Bedingungen benutzt werden, sollten sie
indiziert werden.
– Beim UPDATE oder DELETE in einer Parent-Tabelle wird auf der Child-Tabelle
eine Sperre gesetzt:
• Auf Tabellenebene, wenn kein FK-Index vorhanden
• Auf Zeilenebene, wenn ein Index besteht.
•
•
Indizes verlangsamen INSERT und UPDATE Statements, weil die neuen
Daten in die Indizes eingetragen werden müssen.
Bei Indexerstellung wird der Sortierungsbereich im PGA verwendet.
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
12.02.2007
PTA GmbH, Unternehmensberatung
45
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen--Struktur
Struktur Baumindex
Baumindex
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
rowid ADAMS
rowid ALLEN
•
Der Root-Block (Wurzel) enthält die Adressen der Branch-Blöcke.
•
Die Branch-Blöcke (Zweige) enthalten die Leaf-Block Adressen.
•
In den Blättern werden die individuellen Einträge der indizierten Spalten zusammen
mit dem eindeutigen ROWID gespeichert.
•
Über den ROWID erfolgt der Zugriff auf dem Datensatz am allerschnellsten.
12.02.2007
PTA GmbH, Unternehmensberatung
46
Tuning von Oracle-Datenbanken
Indizes
Indizesfür
fürAuswertungen
Auswertungen
•
Viele Abfragen werden durch Indizes beschleunigt: Indizierte Spalten, über
die in der WHERE-Bedingung gesucht wird.
•
Über die regelbasierte Optimierung greift eine SQL-Anweisung auf eine
indizierte Tabellenspalte immer über deren Index zu.
•
Wenn nur Spalten zu lesen sind, die im Index vorkommen, wird die Tabelle
gar nicht gelesen.
•
Beispiel auf nächster Folie (**regelbasierte Optimierung**):
1. Ohne Index wird ein Full Table Scan durchgeführt.
2. Über den vorhandenen Index werden die Daten aus der Tabelle gelesen.
3. Der Wert für ename wird nur aus dem Index gelesen.
12.02.2007
PTA GmbH, Unternehmensberatung
47
Tuning von Oracle-Datenbanken
Indizes
Indizesfür
fürAuswertungen
Auswertungen
-SQL> set autotrace trace expl
SQL> select * from emp where job='MANAGER';
1
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1
0
TABLE ACCESS (FULL) OF 'EMP'
-------------------------------------------------------------------------------------SQL> create index i_job_ename on emp(JOB, ENAME);
-------------------------------------------------------------------------------------SQL> select * from emp where job='MANAGER';
2
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1
0
TABLE ACCESS (BY INDEX ROWID) OF 'EMP'
2
1
INDEX (RANGE SCAN) OF 'I_JOB_ENAME' (NON-UNIQUE)
-------------------------------------------------------------------------------------SQL> select ename from emp where job='MANAGER';
3
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1
0
INDEX (RANGE SCAN) OF 'I_JOB_ENAME' (NON-UNIQUE)
12.02.2007
PTA GmbH, Unternehmensberatung
48
Tuning von Oracle-Datenbanken
Indizes
Indizesund
undStatistiken
Statistiken
•
Die kostenbasierte Optimierung entscheidet sich für einen
Ausführungsplan anhand der mit Kommando ANALYZE erstellten
Tabellenstatistik.
–
–
–
•
Die Selektivität (Eindeutigkeit) der Werte ist jetzt bekannt und spielt eine große
Rolle.
Die Größe der Tabelle ist bekannt (Datenblöcke) und ob es sich lohnt, sowohl
die Index- als auch die Tabellenblöcke zu lesen.
In vielen Fällen verursacht ein Full Table Scan weniger Kosten.
Beispiel auf nächster Folie: **kostenbasierte Optimierung**
1. Der Optimizer weißt, dass die Tabelle emp nur 16 Zeilen hat. Ein Full Table
Scan kostet weniger als ein Zugriff über Index.
– Oracle empfiehlt, Indizes auf einer Tabelle mit Größe erst ab 30-50 Blöcke
anzulegen.
2. Mit dem Optimizer Hint /*+ INDEX (<table> <index>) */ wird ein
Indexzugriff erzwungen.
12.02.2007
PTA GmbH, Unternehmensberatung
49
Tuning von Oracle-Datenbanken
Indizes
Indizesund
undSelektivität
Selektivität
SQL> analyze table emp compute statistics;
Table analyzed.
-----------------------------------------------------------------------------------SQL> select * from emp
2 where ename='SMITH'
3 /
1
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=2 Bytes=64)
1
0
TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=2 Bytes=64)
-----------------------------------------------------------------------------------SQL> select /*+ INDEX (emp i_ename) */ * from emp
2 where ename='SMITH'
3 /
2
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=2 Bytes=64)
1
0
TABLE ACCESS (BY INDEX ROWID) OF 'EMP' (Cost=2 Card=2 Bytes=64)
2
1
INDEX (RANGE SCAN) OF 'I_ENAME' (NON-UNIQUE) (Cost=1 Card=2)
12.02.2007
PTA GmbH, Unternehmensberatung
50
Tuning von Oracle-Datenbanken
Indizes
Indizesund
undSelektivität
Selektivität
•
Im Beispiel auf der nächsten Folie:
– Die Tabelle abs_ma_gs wurde analysiert => Statistiken vorhanden.
– Der Index 'X_ABS_MA_GS_3' indiziert eine Kombination von 3 Spalten,
von denen mdt_nr (Mandantnummer) die erste ist.
– Bei der regelbasierten Optimierung und mit dem INDEX Hint wird die
Tabellendaten über einen Index gelesen. (vermutlich X_ABS_MA_GS_3).
– Der Mandant PTA (mdt_nr=1) kommt schätzungsweise in 90% der
Zeilen vor.
– Bei einem erzwungene Zugriff über den vorhandenen Index (2) sind die
Kosten viel höher als bei einem Full Table Scan (1).
•
Indizes beschleunigen Abfragen, die einen kleinen Teil der Zeilen der
Tabelle zurückgeben. (5% bis ca. 15%)
12.02.2007
PTA GmbH, Unternehmensberatung
51
Tuning von Oracle-Datenbanken
Indizes
Indizesund
undSelektivität
Selektivität
SQL> analyze table abs_ma_gs compute statistics;
--------------------------------------------------------------------------------------------SQL> select * from abs_ma_gs
2
where mgs_mdt =1;
1
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=14 Card=3869 Bytes=88987)
1
0
TABLE ACCESS (FULL) OF 'ABS_MA_GS' (Cost=14 Card=3869 Bytes=88987)
--------------------------------------------------------------------------------------------SQL> select /*+ INDEX (abs_ma_gs X_ABS_MA_GS_3) */ * from abs_ma_gs
2 where mgs_mdt =1;
2
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=442 Card=3869 Bytes=88987)
1
0
TABLE ACCESS (BY INDEX ROWID) OF 'ABS_MA_GS' (Cost=442 Card=3869 Bytes=88987)
2
1
INDEX (RANGE SCAN) OF 'X_ABS_MA_GS_3' (NON-UNIQUE) (Cost=26 Card=3869)
12.02.2007
PTA GmbH, Unternehmensberatung
52
Tuning von Oracle-Datenbanken
Indizes
Indizesund
undSelektivität
Selektivität
•
Indizes beschleunigen Abfragen, die einen kleinen Teil der Zeilen der
Tabelle zurückgeben. (5% bis ca. 15%)
– Die Eindeutigkeit kann im View user_indexes (Spalte
DISTINCT_KEYS) oder mit Histogrammen abgefragt werden.
– Je eindeutiger der Schlüsselwert, desto wahrscheinlicher der Zugriff
über Index.
Arbeit'
Oracle 7 ca. 15%
Oracle 8.0 ca. 8%
Oracle 8i ca 5%
Index gelesen
Full Table Scan,
ohne Index
15
12.02.2007
50
PTA GmbH, Unternehmensberatung
Datenvolumen
(gelesene % der Tabelle)
53
Tuning von Oracle-Datenbanken
Bitmap
BitmapIndizes
Indizes
•
Jedes Bitmap enthält für jede indizierte Spalte Information über einen
bestimmten Wert.
•
Jede Position speichert Information zu einer bestimmten Zeile.
•
Bitmap Indices bringen bessere Performance in folgenden Fällen:
– Wenn eine Tabelle sehr viele Zeilen enthält und die Kardinalität der
Schlüsselspalte niedrig (1%) ist, d.h. wenige Werte, die mehrfach
auftreten.
– wenn Abfragen logische Verknüpfungen (AND, OR, NOT) in der WHERE
Klausel verwenden.
•
Bitmap Indizes haben eine B*Baum Struktur, aber sparen viel Platz, weil
keine Werte sondern nur die Bits gespeichert werden.
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
12.02.2007
PTA GmbH, Unternehmensberatung
54
Tuning von Oracle-Datenbanken
Bitmap
BitmapIndizes
Indizes--Beispiel
Beispiel
CUST #
MARITAL_ STATUS
REGION
GENDER
INCOME_ LEVEL
101
102
103
104
105
106
...
single
married
married
divorced
single
married
east
central
west
west
central
central
male
female
female
male
female
female
bracket_1
bracket_4
bracket_2
bracket_4
bracket_2
bracket_3
nur 3
eindeutige Werte
WHERE status ='married'
AND region='central'
OR region='west'
Quelle: Oracle8i Concepts Release 8.1.7
12.02.2007
PTA GmbH, Unternehmensberatung
55
Tuning von Oracle-Datenbanken
Funktionsbasierte
FunktionsbasierteIndizes
Indizes
•
Funktionen auf der Seite des Prädikats (WHERE-Bedingung) machen den
Index unbrauchbar.
SQL> SELECT * FROM emp WHERE upper(ename) = 'SMITH';
•
Das Problem kann gelöst werden:
– durch ein Umschreiben des Statements:
SQL> SELECT * FROM emp WHERE ename = upper('SMITH');
– Mit einem funktionsbasierten Index
•
Beim funktionsbasierten Index werden berechnete Ausdrücke abgelegt.
– Auch selbstgeschriebene Funktionen können verwendet werden.
•
Dieses bringt bessere Performance, weil eventuell komplizierte Ausdrücke
nicht für jede Zeile berechnet werden müssen.
Quelle: Oracle Schulung „K3308 8i Datenbankadministration“
12.02.2007
PTA GmbH, Unternehmensberatung
56
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen--Rollbacksegmente
Rollbacksegmente
•
In einem Rollback-Segment wird der alte Zustand (Before-Image) vor einer
INSERT, UPDATE, DELETE Operation gespeichert.
•
Lesekonsistenz: Grundsätzlich werden anderen Benutzern (Prozessen) die
alten Werte angezeigt, bis die offene Transaktion abgeschlossen wird.
•
Benutzer-Rollbacksegmente sollten aus Performancegründen in einem
eigenen Tablespace abgelegt werden.
– Rollbacksegmente können konfiguriert werden, um zu einem
vorgegebenen Wert (OPTIMAL) zu schrumpfen. Wenn sie schrumpfen,
wird der Platz für alle anderen Segmente freigegeben.
•
Das SYSTEM RBS wird nur für Änderungen an den Objekte im SYSTEM
Tablespace verwendet.
12.02.2007
PTA GmbH, Unternehmensberatung
57
Tuning von Oracle-Datenbanken
Speicherstrukturen
Speicherstrukturen--Rollbacksegmente
Rollbacksegmente
Die Extents eines Rollbacksegment werden zyklisch
beschrieben; wurde ein Extent gefüllt, so wird das nächste
inaktive, d.h. nicht mit Undo-Daten belegte Extent genutzt.
Wurde das letzte Extent beschrieben, so beginnt erneut das
Beschreiben des ersten nicht-aktiven Extents. Sind alle
vorhandenen Extents belegt, so wird ein neuer Extent
angelegt.
Quelle: Oracle8i Concepts Release 8.1.5
12.02.2007
PTA GmbH, Unternehmensberatung
58
Tuning von Oracle-Datenbanken
Rollbacksegmente
Rollbacksegmente--High
HighWater
Water Mark
Mark
•
Das High Water Mark ist die Grenze zwischen dem benutzten und dem
freien Platz in jedem Segment.
Beispiel: Eine Transaktion, die viele Daten bearbeitet, schiebt den High
Water Mark des RBS nach oben.
Quelle: Oracle8i Concepts Release 8.1.5
•
Nach Transaktionsabschluss schrumpft das Segment bis den (in Byte)
gesetzten OPTIMAL Wert. Die oberen Extents werden freigegeben.
12.02.2007
PTA GmbH, Unternehmensberatung
59
Tuning von Oracle-Datenbanken
Lesekonsistenz
Lesekonsistenzund
und"Snapshot
"Snapshot too
tooold"
old"
•
Im Beispiel auf der nächsten Folie handelt es sich um einen langen
Leseprozess (z.B. über einen Stored Procedure).
– Der Vorgang wird am Zeitpunkt (system change number) 10023
angefangen.
– Bis der Prozess den dritten Block liest, wurde dieser geändert (auch
COMMITed), deshalb hat er im Header eine spätere SCN (10024).
Um einen lesekonsistenten Zustand zu liefern, muss der Prozess den
alten Block (den bei 10023 gültigen Before-Image) aus dem
Rollbacksegment lesen.
– Wenn dieser Block nicht mehr vorhanden ist, weil er von einem neueren
Transaktion überschrieben würde, oder durch Schrumpfen des
Rollbacksegment freigegeben wurde, kommt der Oracle Fehler:
ORA-1555: snapshot too old
12.02.2007
PTA GmbH, Unternehmensberatung
60
Tuning von Oracle-Datenbanken
Lesekonsistenz
Lesekonsistenzund
und"Snapshot
"Snapshot too
tooold"
old"
BEGIN
Stored
Procedure
Zyklische Beschreibung des Rollbacksegments:
Der COMMIT der Transaktion bewirkt, dass das
Extent wieder freigegeben wird.
END
12.02.2007
(wenn keine anderen Transaktion dieses belegt)
PTA GmbH, Unternehmensberatung
61
Tuning von Oracle-Datenbanken
Anwendungsbezogene
AnwendungsbezogeneOptimierung
Optimierung
Optimierungsmöglichkeiten bei SQL-Anweisungen:
•
•
•
•
•
•
•
Index-Operationen (siehe vorherige Beispiele)
- Die Statistiken können die Abfrageperformance verbessern
Sortierungsoperation (ORDER BY; GROUP BY; DISTINCT)
-
Index anlegen, der die Daten bereits sortiert?
Join-Operationen
Optimizer Hints
- Sollten als letztes Mittel verwendet, z.B. wenn der Administrator mehr
über die Datenverteilung weiß als das System
Optimierung von Zugriffen über Views
Materialized Views
Verwendung von Bindevariablen statt hart codierte SQL-Anweisungen
12.02.2007
PTA GmbH, Unternehmensberatung
62
Tuning von Oracle-Datenbanken
Anwendungsbezogene
AnwendungsbezogeneOptimierung
Optimierung--Joins
Joins
•
•
•
•
Nested Loop-Joins
– Wird für Equi- und Non-Equi-Joins verwendet.
– Für jede Zeile in der äußeren Tabelle werden alle übereinstimmenden
Zeilen der inneren Tabelle abgerufen.
Sort/Merge-Joins
– Beide Zeilenquellen werden anhand der Werte/n in der Equi-JoinSpalte/n sortiert.
Hash-Joins
– siehe Beispiel
Cluster-Joins
– Erfolgt, wenn die zu verknüpfenden Tabellen Teil desselben Clusters
sind (ähneln Nested Loop Joins).
Der regelbasierte Optimizer kennt nur Nested Loop und Sort/Merge Joins.
Quelle: Oracle Schulung „K1110 SQL- und Zugriffsoptimierung“
12.02.2007
PTA GmbH, Unternehmensberatung
63
Tuning von Oracle-Datenbanken
Anwendungsbezogene
AnwendungsbezogeneOptimierung
Optimierung--Nested
NestedLoop
LoopJoin
Join
SQL> select * from emp, dept
2 where dept.deptno = emp.deptno;
Equi-Join
dept ist die führende Tabelle.
Execution Plan
Für jede Zeile in dept wird der Wert
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
aus emp gelesen. Dabei wird der
1
0
NESTED LOOPS
ganze Index FK_DEPTNO durchsucht.
2
1
TABLE ACCESS (FULL) OF 'DEPT'
3
1
TABLE ACCESS (BY INDEX ROWID) OF 'EMP'
4
3
INDEX (RANGE SCAN) OF 'FK_DEPTNO' (NON-UNIQUE)
?
SQL> select * from dept, emp
2 where dept.deptno = emp.deptno;
Execution Plan
emp ist die führende Tabelle.
---------------------------------------------------------Für jede Zeile in emp wird über den
0
SELECT STATEMENT Optimizer=CHOOSE
1
0
NESTED LOOPS
Index der Wert aus dept gelesen.
2
1
TABLE ACCESS (FULL) OF 'EMP'
3
1
TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'
4
3
INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)
12.02.2007
PTA GmbH, Unternehmensberatung
64
Tuning von Oracle-Datenbanken
Anwendungsbezogene
AnwendungsbezogeneOptimierung
Optimierung--Hash
HashJoin
Join
Der Hash-Join kann nur für Equi-Joins verwendet werden. Die Schritte im Beispiel:
1. Full Scan des virtuellen Views a und der Tabelle emp,beide werden in möglichst
viele Hash-Partitionen zerteilt.
2. Für jedes Paar Partition (einer aus jeder Tabelle) wird aus der kleineren eine HashTabelle erstellt. Mit der Größeren wird die Hash-Tabelle untersucht.
SQL> select * from emp, (select * from dept
2
order by deptno) s
3 where s.deptno = emp.deptno;
deptno in PK-Index schon sortiert!
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=15 Bytes=930)
1
0
HASH JOIN (Cost=5 Card=15 Bytes=930)
2
1
TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=16 Bytes=512)
3
1
VIEW (Cost=2 Card=5 Bytes=150)
4
3
TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (Cost=2 Card=5 Bytes=85)
5
4
INDEX (FULL SCAN) OF 'PK_DEPT' (UNIQUE) (Cost=1 Card=5)
12.02.2007
PTA GmbH, Unternehmensberatung
65
Tuning von Oracle-Datenbanken
Gliederung
Gliederung
1.
Einleitung
2.
Performance: Abläufe und Messungen
2.1 Optimizer
2.2 Statistiken
2.3 SQL Trace
3.
Zugriffsoptimierung
3.1 Datenbankdesign (Parallelisierung, Anzahl Hintergrundprozesse usw.)
3.2 Speicherstrukturen (Extents, Cluster, Indizes usw.)
3.3 Anwendungsbezogene Optimierung
4.
Datenbankoptimierung
4.1 Optimierung externer Ressourcen (I/O, Hauptspeicher, Prozessoren usw.)
4.2 Optimierung interner Ressourcen (SGA, Latches usw.)
5.
Quellen
12.02.2007
PTA GmbH, Unternehmensberatung
66
Tuning von Oracle-Datenbanken
Optimierung
Optimierungexterner
externer Ressourcen
Ressourcen
Hardware und Betriebssystem:
• I/O
• Hauptspeicher
• Prozessoren
• Generelle Systemempfehlung
12.02.2007
PTA GmbH, Unternehmensberatung
67
Tuning von Oracle-Datenbanken
Optimierung
Optimierunginterner
interner Ressourcen
Ressourcen
SGA
•
Tuning Shared Pool (im schlimmsten Fall Instanzabsturz)
• Dictionary Cache (Row Cache)
• Library Cache (Shared SQL Area)
•
•
Database Buffer Cache.
Standardisierte Abfragen (Standard Packages bei 8i) die die Trefferquote
beim Zugriff auf die verschiedenen Caches wiedergeben.
Sort Area innerhalb des PGA:
•
•
•
•
Pro Sitzung zugewiesen und wächst nach Platzbedarf.
Wird aber erst bei Abmeldung wieder freigegeben.
Vermeidet Auslagern in temp- Segmente bei großen Sortierungen.
Größe bestimmt durch sort_area_size = n .
12.02.2007
PTA GmbH, Unternehmensberatung
68
Tuning von Oracle-Datenbanken
Optimierung
Optimierunginterner
interner Ressourcen
Ressourcen-- SGA
SGA
•
•
Anzahl der Treffer im Library Cache abfragen
Kann durch den Einsatz von Bindevariablen beeinflusst werden
select namespace, gets, gethits, gethitratio, pins, pinhits,
pinhitratio, reloads
from v$librarycache;
NAMESPACE
GETS
GETHITS
GETHITRATI PINS
PINHITS
PINHITRATI RELOADS
--------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------SQL AREA
18612785
18605992 .999635036 172232212 172205046 .999842271
13092
TABLE/PROCEDURE
135741
118379 .872094651
73944417
73918569 .99965044
66
BODY
8690
8685 .999424626
8690
8685 .999424626
0
TRIGGER
100
99
.99
100
98
.98
0
INDEX
31
5 .161290323
31
5 .161290323
0
CLUSTER
27
12 .444444444
15
5 .333333333
0
OBJECT
0
0
1
0
0
1
0
PIPE
0
0
1
0
0
1
0
12.02.2007
PTA GmbH, Unternehmensberatung
69
Tuning von Oracle-Datenbanken
Optimierung
Optimierunginterner
interner Ressourcen
Ressourcen-- SGA
SGA
•
Library Cache
Empfehlung: Reloads zu Treffern < 1%
select round(sum(reloads) / sum(pins) * 100,2) "% Reloads"
from v$librarycache;
•
Dictionary Cache
Empfehlung: Fehlschläge zu Treffern < 15%
select (round(sum(getmisses) /
decode(sum(gets), 0,1,sum(gets)),4)) "% getmisses"
from
v$rowcache;
12.02.2007
PTA GmbH, Unternehmensberatung
70
Tuning von Oracle-Datenbanken
Optimierung
Optimierunginterner
interner Ressourcen
Ressourcen-- SGA
SGA
•
•
Database Buffer Cache
Empfehlung: Trefferrate > 90%
SQL>
2
3
4
5
6
7
select round ((1 - (s1.value /
(s2.value + s3.value))) * 100,2) "Cache Hits %"
from v$sysstat s1, v$sysstat s2, v$sysstat s3
where s1.name = 'physical reads'
and
s2.name = 'db block gets'
and s3.name = 'consistent gets'
/
Cache Hits %
-----------86.34
12.02.2007
(gerade geöffnete DB)
PTA GmbH, Unternehmensberatung
71
Tuning von Oracle-Datenbanken
Optimierung
Optimierunginterner
interner Ressourcen
Ressourcen
•
•
•
Latches
Kopfbereich der Rollbacksegmente
Freelists
12.02.2007
PTA GmbH, Unternehmensberatung
72
Tuning von Oracle-Datenbanken
Gliederung
Gliederung
1.
Einleitung
2.
Performance: Abläufe und Messungen
2.1 Optimizer
2.2 Statistiken
2.3 SQL Trace
3.
Zugriffsoptimierung
3.1 Datenbankdesign (Parallelisierung, Anzahl Hintergrundprozesse usw.)
3.2 Speicherstrukturen (Extents, Cluster, Indizes usw.)
3.3 Anwendungsbezogene Optimierung
4.
Datenbankoptimierung
4.1 Optimierung externer Ressourcen (I/O, Hauptspeicher, Prozessoren usw.)
4.2 Optimierung interner Ressourcen (SGA, Latches usw.)
5.
Quellen
12.02.2007
PTA GmbH, Unternehmensberatung
73
Tuning von Oracle-Datenbanken
Quellen
Quellen
•
•
•
•
Oracledokumentation für Oracle Server 8i
Lehrmaterial zur Oracleschulung
„K3308 Oracle8i Datenbankadministration“
Lehrmaterial zur Oracleschulung
„K1110 Oracle SQL und Zugriffsoptimierung “
„Oracle 8 für den DBA - Verwalten, optimieren, vernetzen“
Uwe Herrmann, Dierk Lenz, Günter Unbescheid
Verlag Addison-Wesley
ISBN 3-8273-1310-0
12.02.2007
PTA GmbH, Unternehmensberatung
74
Herunterladen