Oracle Database/Tuning
Zur Navigation springen
Zur Suche springen
Optimizer
Rule Based Optimizer / RBO
- Arbeitet bestimmte Regeln ab, nach denen die Abfrage optimiert wird
- Existiert noch in neueren Oracle-Versionen
- Verwendung wird nicht empfohlen, Weiterentwicklung wird von Oracle nicht weitergeführt
Cost Based Optimizer / CBO
- Existiert seit Oracle-Version 7, gut zu gebrauchen aber erst seit Version 8.1.7
- Berücksichtigt Anzahl und Verteilung der Daten
- Ausführungsplan wird anhand von Kosten (Prozessorzeit usw.) errechnet
- Benötigt Statistiken, um zu vernünftigen Ergebnissen zu kommen
Schritte des Optimizers:
- Berechnung von Ausdrücken und Bedingungen (z. B. "where kunde in (1,10)")
- Statement Transformation: gegebenenfalls umwandeln von Unterabfragen in Joins (u.a.)
- Wahl des Optimizers (RBO oder CBO)
- Wahl des Zugriffspfades für jede Tabelle
- Wahl der Reihenfolge, in denen die Tabellen mit JOIN verknüpft werden
- Wahl der Verknüpfungsmethode (z. B. Nested Loops, Hash Join usw.)
Full Table Scan
Beim Full Table Scan werden alle Blöcke einer Tabelle gelesen. Er wird verwendet wenn:
- grosser Anteil von Zeilen einer Tabelle zurückgeliefert werden muss
- kleine Tabelle
- alte Statistiken (Tabelle hatte mal wenig Zeilen)
ROWID-Scan
Über die ROWID kann eine bestimmte Zeile am schnellsten gefunden werden. Dabei werden zuerst die ROWIDs bestimmt und dann die Zeilen anhand der ROWIDs gelesen.
Index-Scan
Liefert ROWIDs aus einem Index zurück. Falls nur indizierte Spalten ausgewählt werden, so werden die Daten nur aus dem Index beschafft, die Tabelle muss dann nicht gelesen werden.
CBO-Statistik
- Anzahl der Zeilen
- Anzahl der Blöcke
- Die Selektivität beschreibt, wie gut ein Abfragekriterium den Suchraum einschränkt. Viele verschiedene Werte ergeben eine hohe Selektivität. Je höher die Selektivität, desto wahrscheinlicher wird ein Index verwendet.
- Systemstatistiken:
- Festplatte, Arbeitsspeicher (ab Version 9)
- Netzwerk (ab Version 10)
Befehl ANALYZE
- CCOMUTE STATISTICS: Analysiert eine Tabelle vollständig
- Ergebnisse können im Data-Dictionary über USER_TABLES/ALL_TABLES/DBA_TABLES abgefragt werden
- Beispiel:
ANALYSE TABLE Mitarbeiter COMPUTE STATISTICS;
- ESTIMATE STATISTICS: analysiert nur einen bestimmten Prozentsatz der Tabelle
- Beispiel:
ANALYZE TABLE Mitarbeiter ESTIMATE STATISTICS 10 PERCENT;