Seminar „Intelligente Datenbanken“ AG „Intelligente Datenbanken

Werbung
Seminar „Intelligente Datenbanken“
AG „Intelligente Datenbanken“
Prof. Dr. Rainer Manthey
Sommersemester 2005
Materialisierte Sichten in Oracle
Kai-Lin Pang
07. Juni 2005
Inhaltsverzeichnis
1
Motivation
3
2
Anpassungsmethoden
3
2.1 Memoryless Refresh-Algorithmus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3
Syntax zur Erstellung von materialisierte Sichten
5
3.1 Refresh-Option. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4
Dimensionen
6
4.1 Syntax zur Erstellung von Dimensionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.2 Beispiel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5
Query Rewrite
9
5.1 Konzepte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.2 General Rewrite-Algorithmus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
6
Heuristic und Cost Based Rewrite
12
7
Zusammenfassung
12
A
Literatur
13
-2-
1 Motivation
Heutzutage besitzen viele Unternehmen ihre eigenen Datenbanken, in denen betriebliche
Informationen gespeichert werden. In vielen Fällen besitzt jede Filiale eines Unternehmens
ihre eigene Datenbank. Wie können nun die Daten aller Filialen gemeinsam effizient
ausgewertet werden? Eine Möglichkeit besteht darin Sichten in einem Data Warehouse zu
materialisieren. Ein Data Warehouse kann als eine Menge von (Materialisierten Sichten)
MVs aufgefasst werden.
Die MVs sind Resultate einer Anfrage in Form einer relationalen Tabelle gespeichert, um
komplexe Anfragen schneller zu beantworten. Aktualisierung der Basistabellen können
Inkonsistenzen zwischen einer MV und ihre Basisrelation bestehen. Die Herausforderungen
sind geeignete effiziente Methoden zur Anpassung MVs zu finden. In Kapitel 2 wird ein
effizienter Algorithmus zur Anpassung MVs vorgestellt.
Das Konzept der materialisierten Sichten wurde bis heute noch nicht im SQL-Standard
standardisiert. Die Erweiterungen von SQL um MVs sind bisher nur für einzelne DBMSProdukte verfügbar, z.B Oracle, IBM DB2 und MS SQL. Wobei IBM DB2 und MS SQL nicht
so eine Fülle von Möglichkeiten besitzen MVs zu definieren im Gegensatz zu Oracle, mit
dem sich Kapitel 3 auseinandersetzt.
Mit Oracle8i wurden neue Möglichkeiten im Data Warehousing-Bereich eingeführt welche
enormen Performanceverbesserungen ermöglichen. Eine Performanceverbesserung wird
mithilfe Dimensionen erreicht, welche in Kapitel 4 beschrieben wird.
Kapital 5 beschäftigt sich mit MVs, die selbst auch für Abfrageoptimierungen verfügbar sind,
bei denen Bestandteile der Abfrage, transparent für den Nutzer, durch Vorberechnete MVs
ersetzt werden (Query Rewrite).
2 Anpassungsmethoden
Eine Möglichkeit MVs zu aktualisieren ist die vollständige Rematerialisierung, jedoch ist
diese Methode sehr ineffizient und mit enormem Zeitaufwand verbunden. Für beliebig
komplexe Anfragen ist komplette Neuberechnung seitens Oracle vorgeschrieben.
Die inkrementelle Aktualisierung stellt eine andere Methode dar. Dabei werden
Datenänderungen an der Basisrelation protokolliert und diese Änderungen in die MVs
propagiert. Das Ziel dabei ist, Zugriffe auf die Basisrelation zu vermeiden. Ab Oracle8i
werden drei Klassen von inkrementell angepassten MVs unterstützt:

„Materialized Join View“ (MJV), die eine Materialisierung einer Anfrage mit INNER
und OUTER Equi-Join darstellt

„Materialisized Aggregate View“ (MAV), welches eine MJV mit Aggregationen ist

„Materialisierte Subquery View“ (MSV) mit materialisierten EXISTS Unteranfragen.
-3-
2.1 Memoryless Refresh-Algorithmus
Im Folgenden betrachten wir einen effektiven „memoryless“-Algorithmus für die
inkrementelle Anpassung MJVs. Die Deltas (∆) werden von zwei Quellen bezogen: RowDML Logs und Direct-Loader Logs.
Das Log einer MV ist ein Schemaobjekt, welches Änderungen der Daten in einer
Basisrelation aufzeichnet, sodass eine auf der Basisrelation definierende MV fortlaufend
aktualisiert werden kann.
Im Row-DML Log protokolliert Oracle, welche Zeilen in einer Tabelle mittels DML verändert
wurden. ∆X besteht aus drei Mengen: ∆X = {D} + {I} + {U}. In den Mengen {D}, {I} und {U}
werden Zeilen gespeichert, die gelöscht, eingefügt oder aktualisiert werden sollen. Zusätzlich
werden eine Kopie der geänderten Zeilen, die ROWID, der DML-Typ, und ein Zeitstempel
gespeichert. Bei ROWID handelt es sich um ein so genanntes Pseudoattribut. Das ROWIDAttibut identifiziert eindeutig den Speicherplatz jedes Tupels einer Tabelle. Der Zeitstempel
stellt fest, ob beim Aktualisieren der MV diese Zeile hinzugefügt, aktualisiert oder gelöscht
werden muss. Oracle protokolliert im Direct-Loader Log, welche neuen Zeilen eingefügt
werden müssen.
Wir erläutern nun den Aktualisierungsalgorithmus Anhang eines Beispiels. Falls die MV M
nur mit einer Tabelle verbunden ist, können wir die Änderungen einfach an die MV M
weitergeleitet werden. Wir betrachten zwei Tabellen R und S, auf denen durch einen
natürlichen Join (z.B. M = R
S) eine MV M definiert ist. Dieser Algorithmus lässt sich leicht
auf beliebig viele Tabellen verallgemeinern. Seien weiter ∆R bzw. ∆S die Änderungen, die
über DML an R bzw. S durchgeführt wurden und seien R' bzw. S' die geänderten Tabellen,
also gilt R' = R + ∆R bzw. S' = S + ∆S. Wenn ∆M die Veränderungen darstellt, die an der MV
M durchgeführt werden müssen, dann führt dies zur folgenden Gleichung:
Q1
∆M = (R
∆S) + (∆R
S) + (∆R
∆S) = (R
∆S) + (∆R
S')
Da die unveränderten Tabellen (z.B. R und S) nach der Aktualisierung nur unter
bestimmten Zeitkosten zu berechnen sind, formt man die bisherige Gleichung so um, dass
sie keine der ursprünglichen Tabelle mehr enthält, damit die ursprüngliche Tabelle nicht
mehr wiederberechnet werden muss (memoryless):
Q2
∆M = (R'
∆S) - (∆R
∆S) + (∆R
S')
Die Wiederberechung der Basisrelation nach Datenänderungen wird beim „memoryless“Algorithmus vermieden. In vielen Situationen behandelt der Algorithmus ein Update durch
Löschung gefolgt von einer Einfügeoperation und fügt diese entsprechend in {D} und {I} ein.
-4-
3 Syntax zur Erstellung materialisierter Sichten
Eine MV in Oracle wird mit dem folgenden Statement erzeugt:
CREATE MATERIALIZED VIEW <MV name>
TABLESPACE <tbs name> { <storage parameters> }
<build option>
REFRESH <refresh option> <refresh mode>
[ ENABLE | DISABLE ] QUERY REWRITE
AS (SQL STATEMENTS);
Im Gegensatz zur Definition einer virtuellen Sicht, wird bei der MV seht das Schlüsselwort
MATERIALIZED vor VIEW als Präfix. Die TABLESPACE-Option erlaubt den
Speicherbereich der Tabellen in Oracle zu definieren.
Die <build option> bestimmt, wann eine MV erzeugt wird:
•
BUILD IMMEDIATE:
Die MV wird sofort erzeugt.
•
BUILD DEFFERED:
Die MV wird zu einem späteren Zeitpunkt erstellt.
•
ON PREBUILT TABLE:
Die MV kann über existierende Tabelle gelegt werden.
3.1 Refresh-Option
Wir diskutieren nun die wichtigsten Optionen von REFRESH:
[ REFRESH [ FAST | COMPLETE | FORCE ]
[ ON COMMIT | DEMAND ]
[ START WITH date ] [ NEXT date ]
[ WITH { PRIMARY KEY | ROWID } ] ]
REFRESH-Methoden (Wie wird aktualisiert?):
•
FAST
Bei FAST werden Zeilenveränderungen der Basisrelation an die MV inkrementell
propagiert. Dabei muss ein MV-Log für jede Basistabelle angelegt werden. Viele
weitere Anforderungen müssen erfüllt werden.
•
NEVER
Bei NEVER findet keine Aktualisierung statt.
•
COMPLETE
Die MV wird vollständig rematerialisiert.
•
FORCE
-5-
Die FAST Strategie wird bei FORCE wenn möglich verwendet, sonst die COMPLETE.
REFRESH-Modus (Wann wird aktualisiert?):
•
ON COMMIT
Die Aktualisierung findet beim Abschluss einer Transaktion an einer Basistabelle
statt.
•
ON DEMAND
Die Aktualisierung wird bei Bedarf durch den Benutzer wird festgelegt.
REFRESH-Timing:
•
START WITH
Die MV wird zu einem bestimmten Zeitpunkt zum ersten Mal aktualisiert.
•
NEXT
Hierbei bestimmt man das Refresh-Intervall.
4 Dimensionen
Eine Dimension ist ein Gebilde, die geordneten Daten kategorisiert, um schnelle Anfragen
zu ermöglichen, ein Weg um komplexe Relationsbeziehungen zu beschreiben. Eine
Dimension kann bildlich als einen gerichteten Graph dargestellt werden, bei der jede Kante
eine hierarchische Beziehung und jeder Knoten eine Aggregationsebene repräsentiert. Eine
Hierarchie ist ein Pfad durch diesen Graphen. Jeder Wert eines „Kindes“ in einer Hierarchie
ist mit exakt mit einem Wert des „Elternteils“ verbunden.
Wozu überhaupt Dimensionen?
Häufige Anfragen wie z.B. „Wie viele Produkte X haben wir in Stadt Y im Monat Z
verkauft?“ sollen in einem Unternehmen materialisiert werden. Nun wollen wir nicht die
Umsätze nur nach Monaten, sondern auch nach Quartalen und Jahren verdichten. Es ist
nicht sinnvoll für jede dieser häufigen Anfragen eine entsprechende MV zu erstellen, wegen
Redundanzen wie z.B. Woche, Quartal, Jahr, etc. Mithilfe von Dimensionen können wir dem
Oracle-Optimizer die Beziehungen zwischen Attributen (z.B. zwischen Monat und Jahr)
verständlich machen.
-6-
4.1 Syntax zur Erstellung von Dimensionen in Oracle
Eine Dimension in Oracle wird mittels des CREATE DIMENSION Befehls erzeugt:
CREATE DIMENSION <dimension name>
LEVEL [ <level> IS <level_table.level_column>
<level> IS <level_table.level_column> … ]
HIERARCHY <hierarchy_name>
( [ <child_level> CHILD OF <parent_level>
<child_level> CHILD OF <parent_level> … ] )
ATTRIBUTE <level> DETERMINES <dependent_column>
<level> DETERMINES <dependent_column>, … ;
Die LEVEL-Klausel definiert den Namen einer Ebene. Eine oder mehrere Hierarchien
(Relationsbeziehungen) können mittels der HIERARCHY-Klauseln definiert werden. 1:1
funktionale Abhängigkeiten werden mit den ATTRIBUTE-Klauseln Oracle bekannt
gegeben.
Die Datenorganisation eines Data Warehouses unterscheidet zwischen Dimensionen und
Fakten. Dimensionen und Fakten werden anhand des Sternschemas modelliert.

Dimensionstabelle:
Die Dimensionstabellen enthalten die Stammdaten und sind in der Regel
denormalisiert. Jede Tabelle besitzt ihren eigenen Primärschlüssel.

Faktentabelle:
Es gibt zentrale Faktentabelle, um die sich „sternenförming“ herum diverse
Dimensionstabellen anordnen. Sie ist in der Regel normalisiert, hat einen eigenen
Primärschlüssel, enthält Fremdschlüssel zu allen anderen Dimensionstabellen und
beinhalten die Kennzahlen.
4.2 Beispiel
Wir wollen nun die Anfrage „Wie viele Produkte X haben wir in Stadt Y im Monat Z
verkauft?“ materialisieren. Dazu werden die Basisdaten anhand des Sternschemas
modelliert (Abb. 1).
-7-
Städte
Dimensionstabelle
Dimensionstabelle
Zeit
Datum
Sadt_Id
Faktentabelle
Faktentabelle
Region
Stadt
Umsätze
Umsatz_ID
Stadt_Id
Woche
Monatsname
Monat
Quartal
Jahr
Produkt_Id
Datum
Produkte
Umsatz
Produkt_Id
Produktname
Foreign
ForeignKeys
Keyszu
zu
allen
allen
Dimensionstabellen
Dimensionstabellen
Produktgruppe
Marke
Abb. 1
In diesem Beispiel besitzt die Faktentabelle Fremdschlüsseln Stadt_Id, Produkt_Id
und Datum auf die Dimensionstabellen Städte, Produkte und Zeit. Die Datenbank
verwaltet Fakten wie Umsätze und Verkaufszahlen je Region, Produkt und Zeit.
Um „Umsatz Anfragen“ nach Quartal oder Jahr effizient beantworten zu können, teilen wir
die Beziehungen zwischen den Attributen mithilfe von Dimensionen dem Oracle-Optimizer
mit. Dazu betrachten wir in diesem Beispiel die Zeitdimension (Abb. 2), die in Jahr, Quartal,
Monat, Woche und Datum unterteilt werden kann.

Wochenumsätze
Wochenumsätze
können
könnenzu
zuJahresumsätze
Jahresumsätze
„aufgerollt“
„aufgerollt“werden.
werden.
Jahr
Jahr
Jeder
JederMonat
Monatmuss
mussininexakt
exakt
einem
Quartal
einem Quartalenthalten
enthaltensein
sein
(hierarchische
(hierarchischeRelation).
Relation).
Quartal
Quartal
Monat
Monat

Monatsumsätze
Monatsumsätze
können
könnenzu
zuQuartalsQuartalsumsätzen
umsätzen„aufgerollt“
„aufgerollt“
werden.
werden.
Woche
Woche
Datum
Datum
Abb. 2
Jeder Monat muss exakt in einem Quartal enthalten sein, folglich können Monatsumsätze
zu einer Summe von Quartalumsätzen aufgerollt (ROLLUP) werden. „ROLLUP“ ermöglichst
Oracle innerhalb einer Dimension auf summierte Daten zuzugreifen.
Die Zeitdimension und die Beziehungen zwischen den Attributen in diesem Beispiel, wird
Oracle mittels des CREATE DIMENSION-Befehls bekannt gegeben:
CREATE DIMENSION zeit_dim
LEVEL Datum
IS Zeit.Datum
LEVEL Woche
IS Zeit.Woche
LEVEL Monat
IS Zeit.Monat
LEVEL Quartal IS Zeit.Quartal
LEVEL Jahr
IS Zeit.Jahr
-8-
HIERARCHY Kalender_rollup (
Datum CHILD OF Monat CHILD OF Quartal CHILD OF Jahr )
HIERARCHY woche_rollup (
Datum CHILD OF Woche CHILD OF Jahr )
ATTRIBUTE Monat DETERMINES Monatsname;
Zu beachten ist, dass Zeit.Datum in Oracle vom Typ DATE ist. Falls wir in der
Dimensionstabelle Zeit außerdem eine Spalte Monatsname enthält, dann kann
Monatsname von Monat funktional abhängig gemacht werden.
Da Oracle nun die Zeithierarchie bekannt ist, ist ein „intelligentes“ Query Rewrite durch den
Oracle-Optimierer möglich. Wenn wir eine MV die Umsätze nach Monat verdichtet haben,
dann können wir z.B. Umsätze nach Jahr, mittels der MV in welcher die monatsweise
verdichteten Daten abgespeichert sind, effizient beantwortet werden, anstelle auf die
Basisrelation zuzugreifen bzw. neu zu berechnen. Hierbei erlaubt es maximal 12-Tupel pro
Stadt und Marke aus den Umsätze MV zu aggregieren.
Die Implementierung vom „intelligenten“ Query Rewrite wurde seitens Oracle nicht
dokumentiert.
5 Query Rewrite
5.1 Konzepte
Der
Oracle-Optimierer
nutzt
Informationen
über
verlustfreie
Joins,
funktionale
Abhängigkeiten, Spaltenäquivalenz und Join-Ableitbarkeit, um grosse Mengen von Anfragen
mit einer kleinen Menge von MVs zu umschreiben.
Join-Ableitbarkeit ermöglichst uns einen Join in einer Abfrage durch einen Join in einer MV
wiederzuberechnen. Mit einem LEFT OUTER Join in einer MV ist es möglich INNER Join in
einer Anfrage durch Filterung von Anti-Join-Zeilen, Semi-Join durch Eliminierung duplizierter
Zeilen und Anti-Join durch Filterung Theinner Join-Zeilen wiederzuberechnen. Mit INNER
Join in einer MV ist es möglich Semi-Join in einer Anfrage durch Eliminierung von
duplizierten Zeilen zu berechnen. Die Join-Ableitbarkeit Unterstützung vom Oracle erlaubt
Anfragen mit IN und EXISTS Subanfragen (Semi-Joins) mit MVs mit Inner oder LEFT
OUTER Joins zu umschreiben. Abfragen mit NOT IN und NOT EXISTS Subanfragen (AntiJoins) können mit MVs mit Left Outer Joins umschrieben werden.
-9-
5.2 General Rewrite-Algorithmus
Bevor eine MV umschrieben wird, wird mittels verschiedenen Algorithmen überprüft, ob
eine MV überhaupt umschrieben werden kann. Die Abb. 3 zeigt uns welche Überprüfungen
auf verschiedene MVs durchzuführen sind.
Query Rewrite Checks
MV mit Joins
MV mit Joins und
MV mit Aggregaten auf
Aggregaten
Einzeltabellen
Full Exact Text Match
X
X
X
Partial Text Match
X
X
X
Join Compatibility
X
X
-
Data Sufficiency
X
X
X
Grouping Compatibility
-
X
X
Aggregate Compatibility
-
X
X
Abb. 3
Oracle führt Query Rewrite aus, indem die Join-Graphen eines Query Blocks (QB) mit
einer potentiellen MV verglichen werden. Jede MV ist ein potentieller Teilplan, um eine
Anfrage zu dienen. Die zwei Graphen sollten sich schneiden aber auch keine Überscheidung
des Subgraphen ist in einem QB, in einer MV oder beide erlaubt. Subanfrage Transformation
beinhaltet die Umwandlung von IN oder EXISTS Subabfragen in Semi-Joins und NOT IN und
NOT EXISTS Unterabfragen in Anti-Joins, welches höchst komplexe Abfragen ermöglichen.
Der Algorithmus ist in zwei Phasen aufgeteilt: Eligibility und Transformation:
Die Eligibility-Phase entscheidet ob überhaupt Rewrite möglich ist, entscheidet wie man eine
MV mit nicht überscheidende Relationen in einen QB joint und entscheidet welche
zusätzliche Join- oder Filterungsbedingungen erforderlich sind. Wenn ein QB
eine
Aggregation beinhaltet, dann entscheidet der Eligibility-Algorithmus, ob die QB Aggregate
durch Aggregate in einer potentiellen MAV berechenbar sind.
Die Transformation-Phase ersetzt überschneidende Relationen von einem QB mit einer
MV und fügt falls erforderlich zusätzliche „Joins“ und „Selection“ Eigenschaften ein um den
QB durch die MV wiederzuerlangen.
Die folgenden Eligibility-Prüfungen werden ausgeführt bevor ein QB umschrieben wird:
1. Join Compatibility Check: Der Join-Graph G(M) einer MV M wird mit dem JoinGraphen G(Q) eines QB verglichen. Der Subgraph G(I) stellt den Schnitt zwischen
G(M) und G(Q) dar, G(I)=G(M)∩G(Q). Der Delta Subgraph ∆G(Q) stellt den Bereich
- 10 -
von G(Q) der nicht in G(I) ist dar, ∆G(Q)=G(Q)-G(I), und der Delta Subgraph ∆G(M)
stellt den Bereich von G(M) der nicht in G(I) ist dar, ∆G(M)=G(M)-G(I). G(Q) kann
durch G(Q)=∆G(Q)
M verlustfrei berechnet werden, wenn alle Joins in ∆G(M)
verlustfrei und die Joins in G(I) zwischen der MV und QB vom selben Typ sind. Eine
Transformation ist erforderlich wenn einige Joins in G(I) nicht vom selben Typ, aber
kompatibel sind. Zum Beispiel, wenn G(M)=S←L→O („←“ bzw. „→“ bezeichnet einen
LEFT bzw. RIGHT OUTER Join) und G(G)=L
O
C, dann gilt ∆G(M)=S,
∆G(I)=L→O, G(Q)=C und wenn S←L verlustfrei ist, dann kann der QB umschrieben
werden als MV C mit Filterung von Anti-Join Zeilen in L→O.
2. Data Sufficiency Check: Alle erforderlichen Daten müssen in einer MV vorhanden
sein oder durch eine Join Back-Operation berechnet werden können. Zum Beispiel,
wenn der QB Referenzen auf die Spalte Produktname von der Relation Produkte
enthält, die funktional durch die Produkt_Id Spalte in einer MV bestimmt wird, so kann
Produktname berechnet werden durch MV
Produkte mit Produkt_Id. Und wenn
Produkt_Id in Produkte nicht UNIQUE ist, dann wird die MV mit einer abgeleiteten
Tabelle gejoint, die eindeutig Produkt_Id mit anderen benötigen Spalten von Produkte
wählt.
3. Grouping Compatibility Check: Wenn ein QB eine GROUP BY Klausel enthält, dann
sollte jede Gruppierungsspalte von einem QB exakt übereinstimmen mit einer oder
von einer Gruppierungsspalte einer potentiellen MAV funktionell abhängig sein. Wenn
eine QB-kompatiblere, funktional abhängige Gruppierung gefunden wurde, dann
sollten die Aggregate in MAV aufgerollt werden. Zum Beispiel, wenn ein QB
SUM(Umsaetze) BY Jahr anfragt und die potentielle MAV SUM(Umsaetze) BY Monat
enthält und weiter bekannt ist, dass Monat→Jahr, dann kann der QB umschrieben
werden durch aufrollen von SUM(Umsaetze) in einer MAV von der Monatsebene auf
Jahresebene.
4. Aggregate Compatibility Check: Wenn ein QB Aggregate enthält, dann muss jedes
Aggregat von einem Aggregat oder mehreren Aggregaten in einer potentiellen MAV
berechenbar sein. Zum Beispiel ist in einem QB SUM(x) nur durch COUNT(x) und
AVG(x) in einer MAV berechenbar. Eine Anfrage mit AVG(x) kann beantwortet
werden, wenn SUM(x) und COUNT(x) in einer MAV vorhanden ist. AVG(x) kann
aufgerollt werden, nur wenn COUNT(x) auch existiert. Aggregate mit Ausdrücken
werden ebenfalls unterstützt. Zum Beispiel, SUM(a+b) in einem QB wird entweder mit
SUM(a+b) oder SUM(b+a) in einer MAV bestimmt, und SUM(a)+SUM(b) in einem QB
wird mit SUM(a) und SUM(b) in einer MAV bestimmt.
- 11 -
6 Heuristic und Cost Based Rewrite
Eine MV wird auf eine Menge von Relationen definiert, es muss eine Schnittmenge von
dieser Menge mit der Menge von Relationen in einem QB existieren, damit die MV ein
Kandidat für „Umschreibung“ sein kann. Um eine Menge von potentiellen MVs für einen QB
zu erfassen wird eine Liste von MVs für jede Relation gehalten. Diese Liste enthält für die
Relation R alle MVs, die R als ihre Basistabelle referenziert.
Wenn ein QB Aggregate enthält, dann wird als erstes versucht, diese Aggregate mit einer
MAV zu umschreiben. Wenn noch Joins verbleiben, wird die Umschreibung mit MJVs oder
MAVs versucht. Rewrite wird solange wiederholt bis noch Joins in einem QB übrig bleiben
oder keine geeignete MV gefunden wird. Da die Datengröße durch Aggregation reduziert
wird, wird immer zuerst versucht Rewrite mit einer MAV durchzuführen, um diese Vorteile als
erstes zu erreichen.
Wenn es möglich ist einen QB mit mehreren geeigneten MVs zu umschreiben, wird eine
Heuristik namens „Query Reduction Factor“ verwendet um die beste geeignete MV in einer
Liste geeigneter MVs zu identifizieren.
Nachdem die gesamte Anfrage mit einer MV oder mehreren MVs umschrieben wurde, ist
die Anfrage nun optimiert und seine optimalen Kosten sind gefunden.
7 Zusammenfassung
Mithilfe von MVs in Oracle können selbst sehr komplexe Anfragen mittels Query Rewrite
effizient beantwortet werden. MVs sind transparent für den Nutzer, die können nach Bedarf
inkrementell oder mit „Scheduler“ aktualisiert werden. Die Auswahl und die Pflege der MVs
ist kein triviales Problem, deshalb wurde sie bis jetzt noch nicht im SQL-Standard
standardisiert.
Dimensionen erlauben den Oracle-Optimizer über komplexe Datenbeziehungen zu
„informieren“ um dadurch „intelligentes“ Query Rewrite zu ermöglichen.
- 12 -
A Literatur
[BDDFFNSWZ98]
R.G. Bello, K. Dias, A. Downing, J. Feenan, J. Finnerty, W.D.
Norcott, H. Sun, A. Witkowski, M. Ziauddin: Materialized Views
In Oracle, Proc. 24th VLDB Conf. New York, 1998, S. 659–664
[Or10g]
Oracle10g Database SQL Reference
[OrDWG9i]
Oracle9i Data Warehousing Guide
[OrAR9i]
Oracle9i Advanced Replication
[OrBI9i]
Business Intelligence with Oracle9i – An Oracle Technical
White Paper
- 13 -
Herunterladen