Aus Linux-Magazin 03/2005

Tipps für das Datenbank-Tuning (Seite 5)

Der KBO weiß, dass es für diese Spalte nur zwei Werte gibt. Wenn er keine Statistik hat, nimmt er an, dass die Werte in etwa gleich verteilt sind, und benutzt daher den Index, obwohl in diesem Fall ein Full Table Scan viel schneller wäre. Kennt der KBO jedoch aufgrund einer zuvor berechneten Statistik die Werteverteilung (1:10000), ist ihm klar, dass der Index langsamer ist.

Welche Methode der Optimizer verwenden soll, kann der Anwender Oracle (bis 9i) in der Datei »init.ora« mitteilen: Oracle benutzt den RBO, wenn dort »OPTIMIZER_MODE = RULE« eingetragen ist. Steht die Variable jedoch auf dem Wert »CHOOSE«, hängt die Wahl der Methode von mehreren Faktoren ab: Gibt es keine Statistiken, verwendet Oracle den RBO, sind Statistiken vorhanden, benutzt Oracle den KBO.

Zudem kann der Admin auf Applikationsebene über Hints die Methode des Optimizers festlegen (etwa »SELECT /*+ RULE */ «….). Die Version 10g unerstützt den RBO nicht mehr, »OPTIMIZER_MODE« ist nicht mehr nötig. Applikationen, die eine regelbasierte Optimierung verwenden, sind umzuschreiben. E

Der KBO kannte bis vor Oracle 9i nur die Varianten »ALL_ROWS« und »FIRST_ROWS«-Optimierung. Bei »ALL_ROWS« versucht der Optimizer kostenbasiert, also mit minimalen Ressourcen, die beste Durchsatzrate für ein gesamtes SQL-Statement zu finden. Mit »FIRST_ROWS« verwendet er eine Mischung aus kostenbasierter und heuristischer Methode mit dem Ziel, die ersten paar Zeilen möglichst schnell zu ermitteln. Die heuristische Methode führt aber in manchen Fällen dazu, dass der Execution Plan wesentlich kostenintensiver wird.

Abbildung 3: Diese SQL-Anweisung kann durch die ungünstige Formulierung der Abfrage keinen Index verwenden und braucht daher relativ viel Zeit.

Abbildung 3: Diese SQL-Anweisung kann durch die ungünstige Formulierung der Abfrage keinen Index verwenden und braucht daher relativ viel Zeit.

Schnellstart

Deshalb gibt es seit Oracle 9i die Anweisung »FIRST_ROWS_ n«, wobei » n« einen der Werte 1, 10, 100 oder 1000 annehmen kann. Dieser Parameter verwendet – ungeachtet der Statistiken – eine kostenbasierte Methode, die die Rückgabe der 1, 10, 100 oder 1000 ersten Zeilen optimiert.

Listing 3: Lange laufende
Selects

01 SELECT sql_text , executions ,
02 disk_reads / decode(executions, 0, 1, executions)  / 300 "Antwort"
03 FROM v$sql
04 WHERE disk_reads / decode(executions,0,1,executions)/300 >15
05 AND executions > 0
06 ORDER BY hash_value, child_number;
07 
08 SELECT sql_text , executions ,
09 buffer_gets / decode(executions, 0, 1, executions)  / 4000 "Antwort"
10 FROM v$sql
11 WHERE buffer_gets / decode(executions,0,1,executions)  / 4000 >15
12 AND executions > 0
13 ORDER BY hash_value, child_number;

Mit dem Kommando: »ANALYZE TABLE Tabellenname ESTIMATE/COMPUTE STATISTICS« stellt Oracle Statistiken über die Tabelle und alle ihre Indizes zusammen. Das Schlüsselwort »COMPUTE« in diesem Kommando bewirkt, dass die Datenbank alle Zeilen der Tabelle einbezieht. Ist eine Tabelle groß, kann die Analyse sehr lange dauern. Deshalb ist mit »ESTIMATE« bestimmbar, dass sie sich auf einen Teil der Tabelle beschränken soll.

Die Statistiken muss man regelmäßig berechnen. Insbesondere nach dem Aufbau eines neuen Index oder sobald sich das Datenvolumen oder die Struktur eines Objekts verändert hat. Das Package »DBMS_STATS« erstellt eine Sicherheitskopie der letzten Statistik. So stehen dem KBO zumindest noch alte Daten zur Verfügung, falls bei der Neuberechnung etwas schief laufen sollte. Das letzte Analysedatum für alle Tabellen eines Schemas findet das Kommando:

SQL> SELECT table_name, num_rows,
SQL> last_analyzed FROM user_tables;

Abkürzungen

SQL ist eine sehr flexible Sprache, sodass unterschiedlich aufgebaute Statements zu gleichen Resultaten führen können. Allerdings variieren die Ausführungszeiten manchmal stark:

SELECT titel, autor, verlag
FROM titel, verlage
WHERE autor ='XXX' AND verlag ='YYY';

Diese simple Abfrage zwingt die Datenbank dazu, die Spalten selbst den richtigen Tabellen zuzuordnen. Verwendet der Admin jedoch explizit Aliases, spart das Zeit:

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Comments
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben