next Stored Outlines
up High-Performance-Tuning
previous Verwalten von Indizes
  Contents   Index

Subsections


Optimierungen


Access-Methoden

Table-Scan   Eher schlecht, außer bei kleinen Tabellen
Rowid-Access   File-Nr + Block-Nr + Row-Nr (AAAB0?..)
Index-Lookup   Bevorzugte Methode bei großen selektiven Tabellen
Hash Key Access   Schnelle Zugriffsmethode bei großen Tabellen


Join-Methoden

Sort-Merge Nested Loops Hash Join


Der Optimierer

Regelbasiert   eher veraltet
Kostenbasiert   aktuell und möglichst zu bevorzugen


Der Optimierungsmodus

CHOOSE   Cost, wenn Tabellen analysiert sind. Rule, wenn Tabellen nicht analysiert sind.
RULE   Es wird immer Rule verwendet.
ALL_ROWS   Cost, optimiert für die Rückgabe aller Datensätze der Ergebnismenge.
FIRST_ROWS   Cost, optimier für die Rückgabe des ersten Datensatzes der Ergebnismenge.

Standard ist CHOOSE. Feststellen läßt sich die Einstellung mit

show parameters;
Ändern in der init.ora oder mit
ALTER SESSION SET OPTMIZER_GOAL=RULE;


Hints - Erzwingen einer Methode

SELECT /*+RULE*/ employeeid FROM employees;
SELECT /*+ALL_ROWS*/ employeeid FROM employees;


Analyse von Tabellen / Indizes

analyze table employees compute statistics;
analyze table employees estimate statistics sample 10 percent,
analyze table employees delete statistics;

Experiment 1

Voraussetzung:
Existenz der Tabelle order_details und set autotrace on exp;
Quantity = 10 bei 50% der Datensätze
Quantity = 20 bei 50% der Datensätze

Auf Quantity steht ein Index ->Wenig selektiv.

select /*+RULE*/ * from order_details where quantity=10;
select /*+ALL_ROWS*/ * from order_details where quantity=10;

analyze table order_details compute statistics;

select /*+RULE*/ * from order_details where quantity=10;

select/*+ALL_ROWS*/ * from order_details where quantity=10;

Experiment 2

Es wird die Tabelle auf mehr als 1 Mio. Datensätze vergrößert.
--Es wird ein Datensatz mit Quantity=30 hinzugefügt
insert into order_details values(11000,10,10,30,0);
 
select /*+RULE*/ * from order_details where quantity=10;
select /*+RULE*/ * from order_details where quantity=30;

select /*+ALL_ROWS*/ * from order_details where quantity=10;
select /*+ ALL_ROWS */ * from order_details where quantity=30;

Experiment 3

Es werden 10 Buckets gebildet (hier würden 3 ausreichen, da nur drei Werte in quantity stehen).
--Erstellen eines Histogramms
analyze table order_details
  compute statistics for columns quantity
  size 10
;
 
select /*+RULE*/ * from order_details where quantity=10;
select /*+RULE*/ * from order_details where quantity=30;

select /*+ALL_ROWS*/ * from order_details where quantity=10;
select /*+ ALL_ROWS */ * from order_details where quantity=30;

Übung Optimierung

Übungen siehe Seite [*].
next Stored Outlines
up High-Performance-Tuning
previous Verwalten von Indizes
  Contents   Index


Stefan Hietel dama.go GmbH, Robert Warnke http://rowa.giso.de