TAKTUM Logo


Oracle Schulung
Oracle Schulung

Oracle Tuning und Optimierung Tutorial: Optimierer
Beschreibung des Optimieres und seiner Einstellungen

Prinzip

Der Oracle Optimierer hat die Aufgabe für jeden SQL-Befehl, der ausgeführt wird einen Ausführungsplan zu erstellen. Prinzipiell gibt es zwei unterschiedliche Modi: regelbasiert oder kostenbasiert.

Der regelbasierte Optimierer geht nach starren Regeln vor und lässt sich durch den Aufbau des SQL-Befehls beeinflussen. So spielt z.B. die Reihenfolge der Tabellen in der From-Klausel eines Select-Befehls eine entscheidende Rolle.

Der kostenbasierte Optmierer benötigt Analysedaten um sinnvoll arbeiten zu können. Diese Daten geben Aufschluss über die Größen der beteiligten Tabellen sowie über die Selektivität der vorhandenen Indizes. Durch die Verwendung dieser Daten ist der kostenbasierte Optimierer dem regelbasierten im Allgemeinen deutlich überlegen. Es kommt nicht selten vor, dass komplexe SQL-Abfragen mit dem kostenbasierten Optimierer und aktuellen Analysedaten um Faktoren schneller ablaufen.

Optimierer-Modi

RULE

Der Ausführungsplan wird durch eine festgelegte Prioritätenvergabe gesteuert

ALL_ROWS

Kostenbasierter Ansatz mit dem Ziel den besten Durchsatz für das Gesamtergebnis zu erzielen

FIRST_ROW

Kostenbasierter Ansatz mit dem Ziel eine möglichst schnelle Antwortzeit zu erreichen

CHOOSE

Für jeden Befehl wird zwischen RULE und ALL_ROWS entschieden (default auch ohne Eintrag in init<SID>.ora):
ALL_ROWS: Es sind Analysedaten
mindestens einer Tabelle vorhanden
RULE: Es sind keine Analysedaten vorhanden

Einstellung des Optimierer-Modus

  • für die Instanz in der init<SID>.ora - Datei:
    OPTIMIZER_MODE=<modus>
  • für die aktuelle Session:
    alter session set optimizer_goal=<modus>;
  • für ein Statement durch Hinweise:
    select /*+<modus>*/ ...


Stichwörter

Datenbank database Optimierer Optimizer Mode Modus RULE ALL_ROWS CHOOSE FIRST_ROW kostenbasiert kostenbasierter cost based regelbasiert regelbasierter rule based