|
SQL Abfragen auf OLAP Cubes, Teil 2
von Frank Schneede, ORACLE Deutschland GmbH
In der letzten Ausgabe wurden Abfragen mit Standard SQL auf einen OLAP
Cube ausführlich beschrieben. Die dort vorgestellte Abfragetechnik verwendet nur die relationalen Cube Views, die im Zuge der Generierung des OLAP Cubes im Analytic
Workspace Manager (AWM) automatisch erzeugt werden. Die direkte Abfrage der relationalen Cube Views hat hierbei unmittelbar Auswirkungen auf die Formulierung des
SQL-Statements. Es dürfen in dieser Art von Abfrage nämlich keine Aggregat- oder Gruppierungsfunktionen mehr verwendet werden. Das Ergebnis der Aggregationen ist direkt
im Cube - oder besser der Cube View - als Spalte enthalten. Eine Abfragetechnik unter Verwendung der Cube Views würde sich also demnach für ein eigenes Reporting
von Endbenutzern anbieten, da die zu erstellenden Statements wenig Komplexität besitzen und sehr einfach formuliert werden können. Besondere SQL Kenntnisse sind an dieser
Stelle nicht notwendig.
Die in diesem zweiten Teil vorgestellte Abfragetechnik verwendet sogenannte Cube-organized Materialized Views, auf die mit komplexen SQL-Statements und mit Verwendung
von Query Rewrite zugegriffen wird. Diese Art von Statements enthalten Aggregat- sowie auch Gruppierungsfunktionen und werden häufig durch BI Abfragetools erzeugt.
Ein Berichtsgenerator wird ebenfalls eher mit Aggregat- und Gruppierungsfunktionen auf die Tabellen des zugrundeliegenden STAR Schemas zugreifen und auf diese Weise
die Vorteile des Query Rewrites nutzen.
Die Erstellung der in Oracle 11g eingeführten Cube-organized Materialized Views im Analytic Workspace Manager (AWM), deren Konfigurationsmöglichkeiten und schließlich die Erstellung von Abfragen wird in diesem Tipp
anhand von Beispielen demonstriert. Wie bereits der letzte Tipp ist auch dieser wieder so gestaltet, dass Sie die einzelnen Schritte selbst nachvollziehen sollten, um
das komplexe Thema besser nachvollziehen zu können.
Im ersten Schritt müssen die Voraussetzungen geschaffen werden, um die in diesem Tipp verwendeten SQL Statements ausführen zu können. Das geschieht,
indem der Tipp Erstellung von OLAP Cubes leicht gemacht mit dem Analytic Workspace Manager 11g (AWM)
oder alternativ die Schritte
- Installation der Oracle Datenbank 11g mit OLAP Option
- Installation des Analytic Workspace Manager 11g
- Installation des Beispiel-Schemas
ausgeführt werden.
Zum besseren Verständnis soll an dieser Stelle nocheinmal die Struktur des Schemas vorgestellt werden, das für die Abfragen verwendet wird. Die dem OLAP
Cube zugrunde liegenden Tabellen bilden ein sogenanntes STAR Schema. Es besteht aus den Tabellen
- CHANNELS - (Dimensions-)Tabelle mit Vertriebskanälen (Shops, Web-Shops)
- CUSTOMERS - (Dimensions-)Tabelle mit Kundeninformationen
- PRODUCTS - (Dimensions-)Tabelle für Produktinformationen (Lieferant, Abteilung, ...)
- TIMES - (Dimensions-)Tabelle mit Zuordnung der Kalendertage zu unterschiedlichen Zeitabschnitten (Kalenderjahr, Quartal, ...)
- SALES_FACT - (Fakten-)Tabelle aller Verkäufe mit Menge, Stückpreis, Gesamtpreis und Dimensionsinformationen (Datum, Produkt, Kunde, Vertriebskanal)
Die Dimensionstabellen sind jeweils mit der Faktentabelle über referentielle Integritäten verbunden, die man als Foreign Key Constraints in der Datenbank abbildet.
Auf die oben genannten Tabellen wird in den später formulierten Abfragen zugegriffen. Doch zuerst muss für die Erstellung der Abfragen die Basis gelegt werden,
das heißt, im folgenden Abschnitt wird die Technik der Cube-organized Materialized View beschrieben.
Verwendung von Cube-organized Materialized Views
Seit der Oracle Version 11g besteht die Möglichkeit, über den OLAP Cube eine sogenannte Cube-organized Materialized View
zu legen. Der SQL Query Optimizer erkennt automatisch, wann diese Materialized View bei einer Abfrage auf die Faktentabelle genutzt werden
kann und schreibt (Query Rewrite) das SQL Statement entsprechend um. Über Cube-organized Materialized Views kann somit nicht nur eine
Verbesserung in Hinblick auf die Verwaltung von Aggregattabellen erreicht werden, auch die Abfrage Performance wird signifikant
verbessert.
In diesem Abschnitt wird nun gezeigt, wie eine Cube-organized Materialized View mit der Query Rewrite Funktionalität eingerichtet wird.
Zum Abschluß wird dann durch die Ausführung mehrerer Statements und der Analyse der zugehörigen Ausführungspläne gezeigt, welchen
Performancevorteil Cube-organized Materialized Views bieten.
Erstellung der Cube-organized Materialized View und des Query Rewrites
Die Erstellung erfolgt wie im letzten
Artikel zum Thema beschrieben, durch Setzen der Check-Boxes im Analytic Workspace Manager (AWM). Die Checkbox für die Aktivierung des Query Rewrites
muss separat gesetzt werden. Nach Drücken des Buttons Anwenden wird die Erzeugung angestoßen, die in Abhängigkeit von der Datenmenge und der Datenkomplexität
eine Weile dauern kann. Die folgenden Screenshots zeigen den Ablauf
| Für eine größere Ansicht auf das betreffende Bild klicken |
Eine Cube-organized Materialized View belegt keinen zusätzlichen Speicherplatz, sondern ist lediglich eine Registrierung im Data Dictionary. Damit verhält sie sich
wie die bereits aus der relationalen Welt bekannten Materialized Views on prebuilt table - über den OLAP Cube hinaus werden keine redundanten Daten erzeugt.
Das folgende SELECT Statement zeigt den Platzbedarf des Schemas OLAPTRAIN vor und nach der Anlage der Materialized View.
Der Status einer Materialized View kann über die Spalte STALENESS in der View DBA_MVIEWS abgefragt werden. Sie gibt Auskunft über die Aktualität
der Daten in der Materialized View. Wenn der Status UNUSABLE sein sollte, ist eine vollständige Aktualisierung der Materialized View erforderlich,
in anderen Fällen, in denen der Status nicht FRESH ist, reicht ein inkrementeller Refresh, um das Query Rewrite nutzen zu können.
Ausführen von Statements ohne Query Rewrite
Die Ausführung von 4 verschiedenen Statements, die direkt auf die Originaltabellen zugreifen, soll jetzt zeigen, wie die Performance durch den Einsatz
einer Cube-organized Materialized View gesteigert werden kann. Die Statements werden im Schema OLAPTRAIN ausgeführt. Die
Statements in Skriptform finden Sie hier.
Im ersten Beispiel werden die Dimensionstabellen TIMES und PRODUCTS mit der Faktentabelle
SALES_FACT verknüpft, um die aggregierten Verkäufe je Kategorie und Kalenderjahr auszuwerten. Der Ausführungsplan zeigt jeweils Full Table Scans
und Hash-Joins, wobei der Join partitionsweise ausgeführt wird.
In der zweiten Abfrage kommen die zwei anderen Dimensionstabellen CHANNELS und CUSTOMERS hinzu, die Gruppierung
erfolgt zusätzlich zu dem oben ausgeführten Statement nach Klasse und Land. Der Ausführungsplan ähnelt dem oben gezeigten
Plan und arbeitet ebenfalls mit Full Table Scans, Hash Joins und einem partitionsweisen Join.
Im dritten Beispiel wird lediglich die Gruppierung geändert, indem nicht die Verdichtung je Land gewählt wird, sondern die Verdichtung
nach Regionen. Die Verknüpfung zwischen den Dimensions- und der Faktentabelle findet jeweils über den entsprechenden Fremdschlüssel statt.
Im letzten Beispiel wird eine Verdichtung nach Jahr, Department und Region durchgeführt, die Dimension
CHANNEL wird nicht berücksichtigt. Auch hier wird das Ergebnis durch den Oracle Optimizer über Full
Table Scans, Hash-Joins und die partitionsweise Verknüpfung ermittelt.
Ausführen von Statements mit Query Rewrite
Um Query Rewrite nutzen zu können, muss die Einstellung des Optimizers entsprechend gewählt sein. Da eine Materialized View nicht
grundsätzlich bei jeder Veränderung der Basistabellen aktualisiert wird bzw. werden kann, ist es häufig sinnvoll, den Parameter
QUERY_REWRITE_INTEGRITY auf STALE_TOLERATED zu stellen. Dies bewirkt, dass ein Rewrite auch dann erfolgen kann, wenn die Materialized
View "STALE" ist, also nicht auf dem aktuellen Stand ist. Bei Datawarehouses, die täglich in einem nächtlichen Ladeprozeß gefüllt werden,
ist diese Einstellung oft nicht relevant, da Ladeläufe und Auswertungen zeitlich vonenander entkoppelt sind. In anderen Szenarien, etwa
wenn operationale Daten ausgewertet werden, die auch im laufenden Betrieb aktualisiert werden müssen, ist es wichtig, nur dann ein Query
Rewrite zu erlauben, wenn sicher ist, dass zwischen Materialized View und Basistabellen keine Inkonsistenzen bestehen.
Das Query Rewrite kann auch erzwungen werden, indem der Parameter QUERY_REWRITE_ENABLED auf FORCE gesetzt wird. In diesem Fall wird grundsätzlich
die Materialized View herangezogen, es sei denn, die STALENESS hat den Status UNUSABLE. Da der Ausführungsplan in jedem der Beispiele fast
identisch aussieht, wird hier lediglich der erste gezeigt, danach nur noch die Zeiten der Ausführung.
Fazit
Die abschließend durchgeführten Statements unterstreichen auf eindrucksvolle Weise, wie sich die Performance von Abfragen mit Hilfe Cube-organized
Materialized Views und Query Rewrite steigern läßt. Zusammengefaßt in einer Aufstellung sprechen die Zahlen für sich:
| | Dauer ohne Query Rewrite | Dauer mit Query Rewrite |
| Statement 1 | 6,43 | 0,28 |
| Statement 2 | 34,76 | 4,43 |
| Statement 3 | 28,25 | 0,92 |
| Statement 4 | 24,12 | 0,56 |
Natürlich sind die Ergebnisse umso beeindruckender, je höher die zu berechnende Verdichtung ist. In Fällen hingegen, in denen eine Star-Query
Optimization greift, also auf sehr granulare Daten abgefragt wird, bringen die verdichteten Berechnungen in einem OLAP Cube
keinen signifikanten Vorteil - für die gute Performance sorgt die Star-Query Optimization dann selbst. Auf diese Weise tragen die unterschiedlichen Technologien im Oracle
Datawarehouse zu einer sehr guten Performance in nahezu allen Anwendungssituationen bei.
Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben ...
Zurück zur Community-Seite
|