Create your own awesome maps

Even on the go

with our free apps for iPhone, iPad and Android

Get Started

Already have an account?
Log In

Oracle Performance Tuning by Mind Map: Oracle
Performance
Tuning
5.0 stars - 1 reviews range from 0 to 5

Oracle Performance Tuning

Optimizer

Regelbasiert (RBO)

verwendet vordefinierte Regeln

OPTIMIZER_MODE = RULE

Problem, Kann nur Inidizies einzelner Spalten verknüpfen, Hint INDEX_JOIN, Bevorzugt Indexe mit wenigen Spalten, Gibt es Indexe mit ähnlichen Spalten, wird der zuletzt erstellte verwendet, Unique und Primärschlüssel Indizies haben Vorrang, Reihenfolge der Spalten im Index wichtig

Kostenbasiert (CBO)

verwendet keine festen Regeln

ausgereifter

ermittelt Ausführungsplan anhand, Datenbankinformation, Tabellengrösse, Zeilenanzahl, Schlüsselverteilung

OPTIMIZER_MODE =, CHOOSE, Default bis 10g, Fallback zu RBO möglich, wenn keine Statistiken, FIRST_ROWS, bevorzugt Pläne die eine schnelle Rückgabe der ersten Zeilen ermöglicht, für OLTP-Datenbanken, ALL_ROWS, Maxmierung des Durchsatzes ermöglichen, Default für PL/SQL, für Batch-Verarbeitung/DWH

Statistik für mind. eine Tabelle liegt vor

Hints

Syntax

/*+ HintText */

Falsche Hint-Syntax wird ignoriert

NOLOGGING

ALL_ROWS

optimiert Zugriff auf eine Zeile

kann überschreiben, Nested Loop, SORT MERGE, HASH JOIN

AND_EQUAL

verknüpft Ein-Spalten-Index

nicht mehr als 5 erlaubt

APPEND

ermöglicht Direkten Zugriffspfad

Buffer Cache wird umgangen

Integritätsregeln werden ignoriert

Vorsicht!, nutzt den freigewordenen Speicherplatz von Delete-Statements nicht, wenn möglich TRUNCATE

CACHE(table)

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

vorwiegend für kleine Tabellen verwenden

CURSOR_SHARING_EXACT

verhindert, das Literale in Bind-Variablen übersetzt werden

CHOOSE

verwendet CBO, wenn Statistiken existieren

FACT(table)

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

FIRST_ROWS(n)

Antwortzeit optimieren

bevorzugt, Index vor Full Table Scan, Nested Loop vor Sort/Merge Joins, wenn möglich Index für ORDER BY

FULL(table)

erzwingt Full Table Scan

HASH_AJ

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

Einsatz in Unterabfrage

Verbesserte Performance

MERGE_AJ

wandelt Nested Loop in Merge Join bei NOT IN um

HASH_SJ

Antwortzeiten von EXISTS-Unterabfragen optimieren

Einschränkungen, Unterabfrage enthält nur eine Abfrage (Tabelle), keine versachtelten Unterabfragen, Es dürfen nur Gleichheitsprädikate in der WHERE-Klausel vorhanden sein, in Unterabfrage kein, GROUP BY, CONNECT BY, ROWNUM

MERGE_SJ

ermittelt Zeilen der Unterabfrage nur einmal

NO_EXPAND

verhindert Aufsplittung der Abfrage

NO_FACT(table)

für CBO keine Fact-Tabelle

PARALLEL(table, integer, integer)

explizite Anzahl der Prozesse

PQ_DISTRIBUTE

Verbessern der Parallel Join Performance

PUSH_PRED(table)

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

ermöglicht CBO bessere Entscheidungsfindung

PUSH_SUBQ

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

EXISTS

STAR

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

STAR_TRANSFORMATION

ähnlich STAR, CBO hat jedoch mehr Freiräume

UNNEST

Session muss gesetzt sein, UNEST_SUBQUERY = true

Platzierung in der Hauptabfrage

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

verbessert Optimizer-Entscheidung

USE_CONCAT

erzwingt Konvertierung von OR in UNION ALL

USE_HASH (table 1, table 2)

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

init.ora

tricky

pro Version gibt es neue Einstellungen bzw. fallen Bestehende weg

das setzen von undokumentieren Einstellungen vermeiden

COMPATIBLE auf die aktuelle Version, wenn möglich

Parameter

OPTIMIZER_INDEX_COST_ADJ, Werte, 100 - default

STAR_TRANSFORMATION_ENABLED

Mengenoperation

IN

innere Abfrage wird zuerst ausgeführt

Ist performanter wenn die innere Abfrage weniger Records enthält als die äussere, bevorzugter Einsatz bei OLTP

EXISTS

besser bei grösseren Datenbanken

Statistiken

ANALYZE

für Oracle <= 8i

COMPUTE STATISTICS, zeitintensiv

ESTIMATE STATISTICS SAMPLE 2 PERCENT, schneller, Genauigkeit bis zu 95%

DBMS_STATS

GATHER_SCHEMA_STATS

GATHER_DATABASE_STATS, Einsatz bei Ver >= 10

ermöglicht das Transferieren von Statistiken zwischen Servern

MONITORING

ALTER TABLE ... MONITORING/NOMONITORING

options => GATHER STALE

Ausführungsplan

auswerten mit

EXPLAIN PLAN

Beeinflussbar

Parallele Vearbeitung

alter session enable parallel dml;

Löschen beschleunigen, wenn TRUNCATE nicht verwendet werden kann

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

Dynamic SQL

EXECUTE IMMEDIATE

BIND - Variablen nutzen, Zusätzlicher Schutz vor SQL-Injection, Hilfreich im OLTP-Bereich

Probleme

Anweisung ist nicht für Indexe ausgelegt

WHERE, SUBSTR, TRUNC, Verketten von Feldern, !=, Column + XXXX > XXXX, = NVL(XXX)

Fehlende oder ungeeignete Indizes

Einspalten-Index-Verknüpfung

Falsche Verwendung von

Nested Loop, Für OLTP die bessere Wahl, bei Berichtswesen und Batchläufen katastrophal, max. 10% der Zeilen einer Tabelle

Sort-Merge, funktioniert auch bei Abfragen mit Wertbereichen, ist nur schnell, wenn alle Spalten im WHERE indexiert sind

Hash-Join, legt Hash-Tabelle im Speicher an, kleinste Tabelle, vergleicht mit der Speicher-Tabelle, funktioniert nur mit = in der WHERE-Klausel

Falsche Verwendung von

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

EXISTS, häufig besser als IN, kann mit HINTS beschleunigt werden

NOT IN

NOT EXISTS

Tabellen-Joins, schneller als IN oder EXISTS

IF/ELSE

Decode verwenden

Unnötige Sortiervorgänge

CREATE INDEX

DISTINCT

GROUP BY

ORDER BY

INTERSECT

MINUS

UNIONS

UNINDEXED TABLE JOINS

zuviele Indizes

negativ bei, Batchprozessen, Löschvorgängen

OR statt UNION

verschachtelte Views

verhindert Optimierung

Verknüpfen zu vieler Tabellen

verhindert Optimierung

verleidet zu Datenbanken mit unnormalisierten Daten

Analyse

v$sql

v$session_longops

v$sql_plan

Ausführungspläne in der Vergangenheit

Wait-Events

v$session_wait

v$session_event

v$system_event

ALTER TABLE ... MONITORING

Real Application Testing Tool

für komplette Applikation

OPTIMIZER_USE_PENDING_STATISTICS

EXPLAIN PLAN

DBMS_XPLAN

DBMS_MONITOR

DBMS_ADVISOR

SQL_TRACE

Aktivierung in init.ora vermeiden

TKPROF, Tracefile formatieren

DBMS_PROFILER

für PL/SQL

DBMS_HPROF

Delta Processing

MINUS

entspricht EXCEPT auf SQL Server

MERGE

OUTER JOIN

Kann Abfrage-Ausdrücke in der WHERE-Bedingung vermeiden und eine schnellere Abarbeitung zur Folge haben.

Tabellen partitionieren

Verbesserung für, Delta-Ladung, Abfragen

Analytische Funktionen

bevorzugen vor

GROUP BY

Subselect-Update

Subselect-Kalkualtionen

OVER (PARTION BY... ORDER BY)

OVER (ORDER BY..)

LAG(Spalte, rows, Defautwert)

Kein Standard-SQL, SQL-Server implementiert diese Funktion nicht, es gibt aber Workarounds mit OVER

LEAD

Materialiserte Views

bei Abfragen mit mehr als 5 Joins