Oracle Performance Tuning

Grobübersicht Performance-Optimierung

Jetzt loslegen. Gratis!
oder registrieren mit Ihrer E-Mail-Adresse
Oracle Performance Tuning von Mind Map: Oracle Performance Tuning

1. Hints

1.1. Syntax

1.1.1. /*+ HintText */

1.1.2. Falsche Hint-Syntax wird ignoriert

1.2. NOLOGGING

1.3. ALL_ROWS

1.3.1. optimiert Zugriff auf eine Zeile

1.3.2. kann überschreiben

1.3.2.1. Nested Loop

1.3.2.2. SORT MERGE

1.3.2.3. HASH JOIN

1.4. AND_EQUAL

1.4.1. verknüpft Ein-Spalten-Index

1.4.2. nicht mehr als 5 erlaubt

1.5. APPEND

1.5.1. ermöglicht Direkten Zugriffspfad

1.5.2. Buffer Cache wird umgangen

1.5.3. Integritätsregeln werden ignoriert

1.5.4. Vorsicht!

1.5.4.1. nutzt den freigewordenen Speicherplatz von Delete-Statements nicht

1.5.4.2. wenn möglich TRUNCATE

1.6. CACHE(table)

1.6.1. Full-Table-Scan Blöcke an den Puffercache hängen

1.6.2. vorwiegend für kleine Tabellen verwenden

1.7. CURSOR_SHARING_EXACT

1.7.1. verhindert, das Literale in Bind-Variablen übersetzt werden

1.8. CHOOSE

1.8.1. verwendet CBO

1.8.1.1. wenn Statistiken existieren

1.9. FACT(table)

1.9.1. sagt CBO, dass es sich um eine FACT-Tabelle handelt

1.10. FIRST_ROWS(n)

1.10.1. Antwortzeit optimieren

1.10.2. bevorzugt

1.10.2.1. Index vor Full Table Scan

1.10.2.2. Nested Loop vor Sort/Merge Joins

1.10.2.3. wenn möglich Index für ORDER BY

1.11. FULL(table)

1.11.1. erzwingt Full Table Scan

1.12. HASH_AJ

1.12.1. wandelt Nested Loop in Hash Join bei Verwendung von NOT IN um

1.12.2. Einsatz in Unterabfrage

1.12.3. Verbesserte Performance

1.13. MERGE_AJ

1.13.1. wandelt Nested Loop in Merge Join bei NOT IN um

1.14. HASH_SJ

1.14.1. Antwortzeiten von EXISTS-Unterabfragen optimieren

1.14.2. Einschränkungen

1.14.2.1. Unterabfrage enthält nur eine Abfrage (Tabelle)

1.14.2.2. keine versachtelten Unterabfragen

1.14.2.3. Es dürfen nur Gleichheitsprädikate in der WHERE-Klausel vorhanden sein

1.14.2.4. in Unterabfrage kein

1.14.2.4.1. GROUP BY

1.14.2.4.2. CONNECT BY

1.14.2.4.3. ROWNUM

1.15. MERGE_SJ

1.15.1. ermittelt Zeilen der Unterabfrage nur einmal

1.16. NO_EXPAND

1.16.1. verhindert Aufsplittung der Abfrage

1.17. NO_FACT(table)

1.17.1. für CBO keine Fact-Tabelle

1.18. PARALLEL(table, integer, integer)

1.18.1. explizite Anzahl der Prozesse

1.19. PQ_DISTRIBUTE

1.19.1. Verbessern der Parallel Join Performance

1.20. PUSH_PRED(table)

1.20.1. verschiebt Join-Prädikat einer Tabelle in eine Inline-View

1.20.2. ermöglicht CBO bessere Entscheidungsfindung

1.21. PUSH_SUBQ

1.21.1. Erzwingt das Unterabfragen so früh wie möglich ausgewertet werden

1.21.2. EXISTS

1.22. STAR

1.22.1. erzwingt, dass die grösste Tabelle ans Ende gestellt wird

1.23. STAR_TRANSFORMATION

1.23.1. ähnlich STAR, CBO hat jedoch mehr Freiräume

1.24. UNNEST

1.24.1. Session muss gesetzt sein

1.24.1.1. UNEST_SUBQUERY = true

1.24.2. Platzierung in der Hauptabfrage

1.24.3. verküpft Rumpf der Unterabfrage mit der Hauptanweisung (NOT IN)

1.24.4. verbessert Optimizer-Entscheidung

1.25. USE_CONCAT

1.25.1. erzwingt Konvertierung von OR in UNION ALL

1.26. USE_HASH (table 1, table 2)

1.26.1. legt kleinste Tabelle in den Speicher, bevor die andere abgesucht wird

2. Mengenoperation

2.1. IN

2.1.1. innere Abfrage wird zuerst ausgeführt

2.1.2. Ist performanter wenn die innere Abfrage weniger Records enthält als die äussere

2.1.2.1. bevorzugter Einsatz bei OLTP

2.2. EXISTS

2.2.1. besser bei grösseren Datenbanken

3. Ausführungsplan

3.1. auswerten mit

3.1.1. EXPLAIN PLAN

3.2. Beeinflussbar

4. Parallele Vearbeitung

4.1. alter session enable parallel dml;

4.2. Löschen beschleunigen, wenn TRUNCATE nicht verwendet werden kann

4.2.1. delete /*+ parallel(table,2) */ FROM tabel

5. Dynamic SQL

5.1. EXECUTE IMMEDIATE

5.1.1. BIND - Variablen nutzen

5.1.1.1. Zusätzlicher Schutz vor SQL-Injection

5.1.1.2. Hilfreich im OLTP-Bereich

6. Delta Processing

6.1. MINUS

6.2. MERGE

6.3. OUTER JOIN

6.4. Tabellen partitionieren

6.4.1. Verbesserung für

6.4.1.1. Delta-Ladung

6.4.1.2. Abfragen

7. Analytische Funktionen

7.1. bevorzugen vor

7.1.1. GROUP BY

7.1.2. Subselect-Update

7.1.3. Subselect-Kalkualtionen

7.2. OVER (PARTION BY... ORDER BY)

7.3. OVER (ORDER BY..)

7.4. LAG(Spalte, rows, Defautwert)

7.5. LEAD

8. Materialiserte Views

8.1. bei Abfragen mit mehr als 5 Joins

9. Optimizer

9.1. Regelbasiert (RBO)

9.1.1. verwendet vordefinierte Regeln

9.1.2. OPTIMIZER_MODE = RULE

9.1.3. Problem

9.1.3.1. Kann nur Inidizies einzelner Spalten verknüpfen

9.1.3.1.1. Hint INDEX_JOIN

9.1.3.2. Bevorzugt Indexe mit wenigen Spalten

9.1.3.3. Gibt es Indexe mit ähnlichen Spalten, wird der zuletzt erstellte verwendet

9.1.3.4. Unique und Primärschlüssel Indizies haben Vorrang

9.1.3.5. Reihenfolge der Spalten im Index wichtig

9.2. Kostenbasiert (CBO)

9.2.1. verwendet keine festen Regeln

9.2.2. ausgereifter

9.2.3. ermittelt Ausführungsplan anhand

9.2.3.1. Datenbankinformation

9.2.3.2. Tabellengrösse

9.2.3.3. Zeilenanzahl

9.2.3.4. Schlüsselverteilung

9.2.4. OPTIMIZER_MODE =

9.2.4.1. CHOOSE

9.2.4.1.1. Default bis 10g

9.2.4.1.2. Fallback zu RBO möglich, wenn keine Statistiken

9.2.4.2. FIRST_ROWS

9.2.4.2.1. bevorzugt Pläne die eine schnelle Rückgabe der ersten Zeilen ermöglicht

9.2.4.2.2. für OLTP-Datenbanken

9.2.4.3. ALL_ROWS

9.2.4.3.1. Maxmierung des Durchsatzes ermöglichen

9.2.4.3.2. Default für PL/SQL

9.2.4.3.3. für Batch-Verarbeitung/DWH

9.2.5. Statistik für mind. eine Tabelle liegt vor

10. init.ora

10.1. tricky

10.2. pro Version gibt es neue Einstellungen bzw. fallen Bestehende weg

10.3. das setzen von undokumentieren Einstellungen vermeiden

10.4. COMPATIBLE auf die aktuelle Version, wenn möglich

10.5. Parameter

10.5.1. OPTIMIZER_INDEX_COST_ADJ

10.5.1.1. Werte

10.5.1.1.1. 100 - default

10.5.2. STAR_TRANSFORMATION_ENABLED

11. Statistiken

11.1. ANALYZE

11.1.1. für Oracle <= 8i

11.1.2. COMPUTE STATISTICS

11.1.2.1. zeitintensiv

11.1.3. ESTIMATE STATISTICS SAMPLE 2 PERCENT

11.1.3.1. schneller

11.1.3.2. Genauigkeit bis zu 95%

11.2. DBMS_STATS

11.2.1. GATHER_SCHEMA_STATS

11.2.2. GATHER_DATABASE_STATS

11.2.2.1. Einsatz bei Ver >= 10

11.2.3. ermöglicht das Transferieren von Statistiken zwischen Servern

11.3. MONITORING

11.3.1. ALTER TABLE ... MONITORING/NOMONITORING

11.3.2. options => GATHER STALE

12. Probleme

12.1. Anweisung ist nicht für Indexe ausgelegt

12.1.1. WHERE

12.1.1.1. SUBSTR

12.1.1.2. TRUNC

12.1.1.3. Verketten von Feldern

12.1.1.4. !=

12.1.1.5. Column + XXXX > XXXX

12.1.1.6. = NVL(XXX)

12.2. Fehlende oder ungeeignete Indizes

12.3. Einspalten-Index-Verknüpfung

12.4. Falsche Verwendung von

12.4.1. Nested Loop

12.4.1.1. Für OLTP die bessere Wahl

12.4.1.2. bei Berichtswesen und Batchläufen katastrophal

12.4.1.3. max. 10% der Zeilen einer Tabelle

12.4.2. Sort-Merge

12.4.2.1. funktioniert auch bei Abfragen mit Wertbereichen

12.4.2.2. ist nur schnell, wenn alle Spalten im WHERE indexiert sind

12.4.3. Hash-Join

12.4.3.1. legt Hash-Tabelle im Speicher an

12.4.3.1.1. kleinste Tabelle

12.4.3.2. vergleicht mit der Speicher-Tabelle

12.4.3.3. funktioniert nur mit = in der WHERE-Klausel

12.5. Falsche Verwendung von

12.5.1. IN

12.5.1.1. nur zu empfehlen, wenn das Ergebnis der Unterabfrage kleiner ist, als das der Hauptabfrage

12.5.2. EXISTS

12.5.2.1. häufig besser als IN

12.5.2.2. kann mit HINTS beschleunigt werden

12.5.3. NOT IN

12.5.4. NOT EXISTS

12.5.5. Tabellen-Joins

12.5.5.1. schneller als IN oder EXISTS

12.6. IF/ELSE

12.6.1. Decode verwenden

12.7. Unnötige Sortiervorgänge

12.7.1. CREATE INDEX

12.7.2. DISTINCT

12.7.3. GROUP BY

12.7.4. ORDER BY

12.7.5. INTERSECT

12.7.6. MINUS

12.7.7. UNIONS

12.7.8. UNINDEXED TABLE JOINS

12.8. zuviele Indizes

12.8.1. negativ bei

12.8.1.1. Batchprozessen

12.8.1.2. Löschvorgängen

12.9. OR statt UNION

12.10. verschachtelte Views

12.10.1. verhindert Optimierung

12.11. Verknüpfen zu vieler Tabellen

12.11.1. verhindert Optimierung

12.11.2. verleidet zu Datenbanken mit unnormalisierten Daten

13. Analyse

13.1. v$sql

13.2. v$session_longops

13.3. v$sql_plan

13.3.1. Ausführungspläne in der Vergangenheit

13.4. Wait-Events

13.4.1. v$session_wait

13.4.2. v$session_event

13.4.3. v$system_event

13.5. ALTER TABLE ... MONITORING

13.6. Real Application Testing Tool

13.6.1. für komplette Applikation

13.7. OPTIMIZER_USE_PENDING_STATISTICS

13.8. EXPLAIN PLAN

13.8.1. DBMS_XPLAN

13.9. DBMS_MONITOR

13.10. DBMS_ADVISOR

13.11. SQL_TRACE

13.11.1. Aktivierung in init.ora vermeiden

13.11.2. TKPROF

13.11.2.1. Tracefile formatieren

13.12. DBMS_PROFILER

13.12.1. für PL/SQL

13.13. DBMS_HPROF