DWH_Technik_im_Fokus_Feb_2017_TK_Fassung

Werbung
Oracle Data Warehouse Technik im Fokus
Praxis-Seminar, Oracle, Feb. 2017
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Die Themen
• Einführung und Konzepte
• Partitionierung
• Schlüssel und Indizierung
• Data Optimization
• Materialized Views
• In-Memory
• ETL
• Security
• Monitoring und Verwaltung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
2
Informationsbedarfe: Wen interessiert was?
Nutzen und
Wettbewerbsvorteile
Vergangenes -> reagieren
Zukünftiges -> agieren
Machine Learning
Standberichte
Interaktive Berichte
Statistik
Algorithmen, Modelle
Simulation
Data Mining
Data Mining
Tag, Monat, Quartal, Jahr
Was ist
geschehen
Warum ist
es geschehen
Was wird
geschehen
Was könnte
geschehen
Reife der Analyse-Aktivitäten im Unternehmen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Evolution des Data Warehouse
DWH-Systeme werden zunehmend auch in einem operativen Sinn genutzt
Hochvolumig / granular
Überschaubar / aggregiert
Operativ
überschaubar
Taktisch
DWH
Strategisch
Jahr/Quartal/Monat
Woche/Tag
Komplexe InformationsAusarbeitung und Analysen
Periodische Berichte
Stunde/Minute/Sekunde/Realtime
oft und schnell
wiederholbare Einzel-informationen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
4
Modelle und Schichten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
5
Unternehmensweites Data Warehouse
Logistik
D a t a
Service
Marketing
W a r e h o u s e
Zentral, unternehmensweit,
einheitlich, verstehbar,
angereichert, historisch
Controlling
Einkauf
Vertrieb
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
6
Historisches – DWH –Konzepte aus den 90ern
Service
Logistik
Stage
D
Kern-Schicht
Große Nähe
zu operativen
Systemen
Near 3NF
granular
F
D
D
F
D
D
D
Stage
Große Nähe
zu operativen
Systemen
Analyse-FokusBezogene
Data Marts
Multidimension
Inmon
D
Vertrieb
Marketing
D
D
Einkauf
Controlling
D
D
F
D
D
F
D
D
Zusammenhängende
multidimensionale
Modelle
(conformed dimensions)
D
D
F
F
D
Multidimension
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Kimball
DATA WAREHOUSE
7
Single Point of True – selten erreichtes Ziel
• Ursprung vieler Daten des Data Warehouse sind operative Vorsysteme mit
teils isolierter Datennutzung
• Viele Warehouse – Systeme sind oft nur eine Ansammlung von
Data Marts und zentraler technischer Administration
– Historisch entstanden, aus zeitlicher Abfolge einzelner Data Mart-Projekte
– Falsch verstandenem Fachabteilungs-Fokus
• Echte Integrationsaufgaben wurden oft vernachlässigt
– Fehlendes Verständnis
– Kostenscheu
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
8
Single Point Of True gelingt nur über die Eindeutigkeit und
Bestimmtheit aller Objekte in dem Data Warehouse
• Zentrales einmaliges Vorhalten von Daten auch wenn Daten durch
unterschiedliche (analytische) Anwendungen mehrfach genutzt werden
• Innerhalb des (Data Warehouse-) Systems werden Bezeichner nur
einmal zur Identifizierung von Objekten genutzt
– Synonyme / Homonyme auf Attribut + Objektebene sind aufzulösen
• Eindeutigkeit ist das Ergebnis echter Integrationsarbeit
* S. Brenner 1988
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
9
Das missverstandene Data Warehouse Prinzip
Stage
Technisches Data Warehouse
Service
B
Servicekunde
D
S
Logistikaufwand
B
Controlling
Vertrieb
Kundenhistorie
S
S
B
SCleansing
S
S
B
Marketing
Marketingsicht
D
S SS
Logistik
Einfache
Profitabilität Kopie
operativer
Einkauf
Daten
Produkte&Trends
Data Marts
B
S
S
S
Teilweise
isolierte
Daten
BI-Tool
D
F
D
D
F
D
Isolierte
Data
D
Marts
D
D
F
D
D
F
D
Sachgebietsbezogene
(isolierte)
Analysen
D
Eindeutigkeit
kaum
kontrollierbar
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
10
Das missverstandene Data Warehouse Prinzip
• Kein echter „Single Point of True“
• Bedeutungs-Schwergewicht liegt auf den Data Marts
–
–
–
–
Müssen permanent weiter entwickelt werden
Können nicht ad hoc neu aufgebaut werden
Unflexibel, fehlende Änderungsfreundlichkeit
Fehlendes übergreifende Abfragemöglichkeit
• Zentrale Warehouse-Schicht dient nur der Datenbereitstellung für die Data Marts
– keine konsolidierende Funktion
– nur Cleansing
• Stage: nur Durchgangs-Kopierfunktion aus Vorsystemen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
11
Informationsbeschaffung organisieren
• Integration Layer (Stage)
– Zusammenführen von Daten aus unterschiedlichen Vorsystemen
– Prüfen, harmonisieren, brauchbar machen
• Enterprise Layer (DWH-Kernschicht)
–
–
–
–
Zentrale Ablage aller Informationen des Data Warehouse
Stammdaten, Referenzdaten, Bewegungsdaten
Prozess- /Referenz, Stammdaten
Langlebig, strategisch
• User View Layer (Data Marts)
– Nach Sachgebieten sortierte analysefähiger Ausschnitt von Daten der
Kernschicht
– Endbenutzerverständlich
– Analysezeitraum- und Projekt-bezogen, taktisch
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Die strategische Rolle der Warehouse-Schicht
Service
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
Logistik
Einkauf
Service
Logistik
?
Strategische
Daten
?
Einkauf
Vertrieb
Vertrieb
Controlling
Controlling
Marketing
Wirkungsweite des
Systems muss
festgelegt sein
Eindeutigkeit in
der Kernschicht
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Marketing
DATA WAREHOUSE
Die strategische Rolle der Warehouse-Schicht
Service
Logistik
Einkauf
Vertrieb
Integration
Layer
Die
selben
Geschäftsobjekte
in unterschiedlichen
Prozessen
?
Enterprise Layer
Core - DWH / Info Pool
Strategische
Daten
Controlling
Marketing
Wirkungsweite des
Systems muss
festgelegt sein
User View
Layer
Wunsch
für
unterschiedliche
Sichten
auf die
selben
Geschäftsobjekte
?
Eindeutigkeit in
der Kernschicht
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Service
Logistik
Einkauf
Vertrieb
Controlling
Marketing
DATA WAREHOUSE
Was verdienen wir an gelben + bunten Fahrrädern?
Logistik
WARE
Waren_Nr
Gebinde
Gewicht
Hoehe
Laenge
Breite
Verpackung
Einkauf
ARTIKEL
Artikel_Nr
Einheit
Preis
Lieferant
Vertrieb
PRODUKT
Produkt_Nr
Einheit
Farbe
Preis
Integration
T_ARTIKEL
PK_Artikel_ID
Eink_Artikel_Nr
Log_Waren_Nr
Vert_Produkt_Nr
Eink_Einheit
Eink_Preis
Lieferant
Gebinde
Gewicht
Hoehe
Laenge
Breite
Verpackung
Vert_Einheit
Farbe
Vert_Preis
Rabatte
LieferantenDiscounts
Enterprise Layer
LIEFERANT
PK_Lieferanten_ID
Lieferant_Name
Es geht um
Gesamtsichten:
Verpackungen
S_ARTIKEL
PK_Artikel_ID
Eink_Artikel_Nr
Log_Waren_Nr
Vert_Produkt_Nr
Eink_Einheit
Eink_Preis
FK_Lieferanten_ID
Gebinde
Gewicht
PK_Verpackungs_ID
Vert_Einheit
FK_Farben_ID
Vert_Preis
FARBE
PK_Farben_ID
Farbe
Aufschlag
User View
„Breite“ der
Datenmodelle
Gelagerte
Artikel,
Menge +
Größe
Lager
Lieferanten
Gekaufte
Artikel,
Menge +
Preise
Zeit
VERPACKUNGSART
PK_Verpackungs_ID
Hoehe
Laenge
Breite
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Artikel
Verkaufte
Artikel
Menge +
Preise
Gewinn =
Verkaufspr. –
Einkaufspr. –
Lagerkosten
DATA WAREHOUSE
Was verdienen wir an gelben + bunten Fahrrädern?
Logistik
WARE
Waren_Nr
Gebinde
Gewicht
Hoehe
Laenge
Breite
Verpackung
Einkauf
ARTIKEL
Artikel_Nr
Einheit
Preis
Lieferant
Vertrieb
PRODUKT
Produkt_Nr
Einheit
Farbe
Preis
Integration
T_ARTIKEL
PK_Artikel_ID
Eink_Artikel_Nr
Log_Waren_Nr
Vert_Produkt_Nr
Eink_Einheit
Eink_Preis
Lieferant
Gebinde
Gewicht
Hoehe
Laenge
Breite
Verpackung
Vert_Einheit
Farbe
Vert_Preis
User View
Enterprise Layer
LIEFERANT
PK_Lieferanten_ID
Lieferant_Name
Verpackungen
S_ARTIKEL
PK_Artikel_ID
Eink_Artikel_Nr
Log_Waren_Nr
Vert_Produkt_Nr
Eink_Einheit
Eink_Preis
FK_Lieferanten_ID
Gebinde
Gewicht
PK_Verpackungs_ID
Vert_Einheit
FK_Farben_ID
Vert_Preis
FARBE
PK_Farben_ID
Rabatte
Farbe
Lieferanten- Aufschlag
Discounts
VERPACKUNGSART
PK_Verpackungs_ID
Hoehe
Laenge
Breite
D_ARTIKEL_LAGER
PK_Artikel_ID
Log_Waren_Nr
Gebinde
Gewicht
Verpackung
D_ARTIKEL_EINK
PK_Artikel_ID
Eink_Artikel_Nr
Eink_Einheit
Eink_Preis
Lieferanten
Farben
D_ARTIKEL_VERT
PK_Artikel_ID
Vert_Produkt_Nr
Eink_Einheit
Vert_Einheit
Farben
Vert_Preis
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Lager
Gelagerte
Artikel,
Menge +
Größe
Lieferanten
Gekaufte
Artikel,
Menge +
Preise
Zeit
Verkaufte
Artikel
Menge +
Preise
DATA WAREHOUSE
Es geht
um
Gesamtsichten:
„Breite“
der
Datenmodelle
Die strategische Rolle der Warehouse-Schicht
• Standardisierte Begriffe / Bezeichner
– Definition aller Datenobjekte (Sachverhalte, Kennzahlen)
– Lösung der Homonymen / Synonymen – Thematik
– Informationen (Daten) sind nur ein Mal vorhanden (Eindeutig / Redundanzfrei)
• Definieren der nötigen Granularität (Business Events)
• Bereithalten aller Informationen zum Aufbau von Auswertemodellen
– Historisierung / Langlebigkeit der Informationen
– Schlüsselinformationen (enthält künstliche und Original-Schlüssel)
– Hierarchisierungs-Informationen (Optionen für späteres multidimensionales
Modell)
• Anwendungs- und Geschäftsprozess-neutral
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Künstliche Schlüssel im Data Warehouse
• Gründe für den zusätzlichen Aufwand künstlicher Schlüssel sind:
– Integration
• In mehreren Vorsystemen gibt es unterschiedliche Schlüssel
– Stabilität
• Natürliche Schlüssel können sich ändern
• Geschäftsbereiche können sich ändern
– DWH langlebiger als operative Anwendungen
• Schlüssel sind einfach zu benutzen und kurz, um
– Speicherplatz zu sparen
– Fehler zu vermeiden
• Nach Möglichkeit keine zusammengesetzten Schüssel
– Erfordert beim Zugriff unnötig viel Vorwissen zu den einzelnen Schlüsselbestandteilen
– Schlüsselbestandteile können leicht NULL-Wert annehmen, die Eindeutigkeit ist gefährdet
• Keine Felder wählen, die NULL werden können
• Spaltenwerte sollten stabil sein und sich nicht mehr ändern
18
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Hilfsmittel bei dem Auffinden von Synonymen
• Ziel:
Methoden und Hilfsmittel zur Synonymensuche
– Wiederverwendung von Objekten
und Informationen
• Analyse von Bezeichnern – Feldliste
– Standardisierung von Bezeichnern
• Wortstammanalyse
• Methodenmix
• Arbeiten mit Standard-Abkürzungen
• Permanente Aufgabe während
der Weiterentwicklung des
Systems
• Beschreibung durch Deskriptoren
• Aufwand sollte berücksichtigt
werden
• Synonymen-Suche durch Normalisierung von
Entitäten
• Systematische Datentypklassifikation
Hilfsmittel: Business Glossar
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
19
Wo werden wann welche Artikel verkauft?
Zeit
Tag
Woche
Monat
Quartal
Jahr
Dekade
Hierarchie
Tag/Monat/
Quartal/Jahr
Artikel
Hierarchie
Tag/Woche/Jahr
Parent
Hierarchie
Parent
Zeit_ID
Artikel_ID
Region_ID
Channel_ID
Menge
Umsatz_Pos
Channel
Medium
Kampagne
Channel
Keys
Gruppen_Name
Gruppen_Nr
Artikel_Name
Artikel_Nr
Artikel_ID
Food
Non-Food
Services
Sanitär
Garten
Elektro
Aggregation
Aggregation
Business Key
Künstlicher
Dimension Key
Bohrhammer 4711
Farbtopf_Lack_rot
CU_Muffe_18mm
Facts /Kennzahlen
Ort
VertGebiet
Kreis
Bundesland
Land
Region
Sparten_Name
Sparten_Nr
• Multidimensionales Modell
• Star Schema
Region
• Intuitives (End-benutzer-geeignetes)
Modell
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Data Optimization
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
21
Es gibt Data Warehouse-spezifische Rahmenbedingungen
OLTP
Data Warehouse
Interaktion
Lesen und Schreiben
Eher nur Lesen / konzentriertes
Mengen-Schreiben
Verteilung der
Aktionen
Oft auf viele Tabellen
verteilt
Oft zentrisches Arbeiten auf
wenigen Tabellen
Art von Lese-/SchreibAktionen
Verteilt und nur einzelne
Sätze
Konzentriert und viele Sätze
gleichzeitig
Art der physischen
Speicherung
Satzorientiert in kleinen
Blöcken
Spaltenorientiert in sortieren Blöcken
Anzahl Benutzer
Hoch
Weniger
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
22
Was bedeutet das für die eingesetzte Technologie?
OLTP
Data Warehouse
Interaktion
Lesen und Schreiben
Eher nur Lesen / konzentriertes
Mengen-Schreiben
Parallelisierung
Gering
Hoch
Hochverfügbarkeit
Hoch
Eher gering
Storagesystem
SAN
Dedicated
Backup
komplett
selektiv
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
23
Bei der Wahl von Mitteln immer berücksichtigen:
10 – 50 Tabellen
500 – 1000 Tabellen
Große Tabellen
Partitioniert
Namentlich bekannt
> 70 % des Datenvolumens
24
KleineTabellen
Nicht Partitioniert
Unkenntliche Masse
< 30 % des Datenvolumens
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Abfragen
100
95
Speicherplatz
5%
35 %
100 %
60 %
50 %
60
10 %
60 % aller Abfragen benötigen weniger als 10% der DWH Daten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
25
50 TB Data Warehouse (z. B. Exadata ¼ Rack)
RAM
2010
2013
2017
5%
10%
20%
15 %
20 %
50-100 %
80 %
70 %
0-50%
100-200 mal schneller
Flash
100-200 mal schneller
SAS/Sata
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
26
60 – 70 % der Data Warehouse – Abfragen
können heute InMemory stattfinden
(allerdings sind nicht alle Abfragen InMemory-tauglich)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
27
Partitionierung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitioning unterstützt viele Aufgaben
Große Tabellen
Query Performance
Partition Pruning
Beschleunigung
des Ladeprozesses
Unterstützung ILM
(Information Lifecycle
Management)
Leichterer Umgang mit
Indizierung
Unterstützung im
Backup-Prozess
Steuerung der
Komprimierung
Unterstützung bei der Aktualisierung von Materialized Views
(Partition Change Tracking)
Hochverfügbarkeit auch
während des Ladens und
Maintenance
Tablespace
Tablespace
Tablespace
Tablespace
Tablespace
Tablespace
Feld für PartitionierungsKriterium nach fachlichen oder
organisatorischen
Gesichtspunkten
ausgewählt
29
Range
List
Hash
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitioning Varianten und Verwaltung
Partitioning-Typen
• Range
• List
• Hash
•
•
•
•
•
Reference
Interval
Interval-Reference
System
Virtual Column
Subpartitioning-Typen
• Range - Hash
• Range - List
• Range - Range
• List - Range
• List - Hash
• List – List
• Hash - Hash
Management von Partitioning
• ADD PARTITION
• DROP PARTITION
• TRUNCATE PARTITION
• MOVE PARTITION
• SPLIT PARTITION
• MERGE PARTITION
• EXCHANGE PARTITION
• Verändern der Default-/
realen Attribute
• Partition Exchange Loading
30
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitioning ist transparent
• Gesamte Tabelle selektieren
SELECT * FROM orders;
Alle Partitionen werden selektiert
• Abfrage nur auf eine Partition
Jan 2017
Feb 2017
SELECT * FROM orders
WHERE order_dat between
Partition
Pruning: AND
to_date
('2017-01-01')
Automatische
Beschränkung
to_date
('2017-01-31');
Mär 2017
Apr 2017
auf
betroffene
Partition
SQL-Abfrage
ist von
Partitionierung
unabhängig
Mai 2017
Jun 2017
31
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partition Elimination / Dynamic Pruning
• Nicht angesprochene Partitionen
werden nicht gelesen
• Subpartitions erlauben zusätzliche
Eliminierung
• Range
– Bereichsabfragen mit Operatoren
• IN,
• LIKE,
• BETWEEN auf Partition Keys
32
• Hash
– Gleichheitsabfragen mit
Operatoren
• =,
• IN auf Partition Keys
• List
– Range oder List auf Partition
Keys
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Range Partitioning - Partitionierung nach Wertebereichen
• Partitionierung nach Wertebereichen
– Für sortierte Wertebereiche
– LESS THAN:
Angabe eines maximalen Wertes pro Partition
CREATE TABLE F_Umsatz (
Artikel_ID
number,
Kunden_ID
number,
Zeit_ID
DATE,
Region_ID
number,
Umsatz
number,
Menge
number
) PARTITION BY RANGE (Zeit_ID) (
PARTITION M1 VALUES LESS THAN
(to_date('2017-02-01','YYYY-DD-MM')),
PARTITION M2 VALUES LESS THAN
(to_date('2017-03-01','YYYY-DD-MM')),...
33
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Jan 2017
Feb 2017
Mär 2017
Apr 2017
Mai 2017
Jun 2017
DATA WAREHOUSE
Interval Partitioning
• Erweiterung der Range-Partitionierung
• Automatisierung für gleichgroße
Range-Partitionen
• Partitionierung wird als
Metadaten-Information abgelegt
April
März
Februar
• Sobald neue Daten hinzukommen
werden Segmente allokiert
Januar
Maidaten
?
Aprildaten
April
Märzdaten
März
Februardaten
Januardaten
• Lokale Indizes werden automatisch
mitgepflegt
Produkte
– Start-Partition ist dabei persistent
Mai
Februar
Januar
Kunden
• Partition Key muss NUMBER oder DATE sein
• Partition-Typ muss RANGE sein
34
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Interval Partitioning Syntax
CREATE TABLE "BESTELLUNG" (
"BESTELLNR"
NUMBER(10) NOT NULL,
"KUNDENCODE"
NUMBER(10),
"BESTELLDATUM"
DATE,
"AUFTRAGSART" VARCHAR2(30))
PARTITION BY RANGE ("BESTELLDATUM")
INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) (
PARTITION "Jan07"
VALUES LESS THAN (TO_DATE(' 2017-01-31 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
'NLS_CALENDAR=GREGORIAN')) TABLESPACE "TS_PAR„
,.............)
;
CREATE TABLE „POSITION" (
"POSITIONSNR" NUMBER(10) NOT NULL,
"BESTELLNR"
NUMBER(10)
"ARTIKELNUMMER"
NUMBER) contraint FK_BEST FOREIGN KEY (BESTELLNR) REFERENCES
BESTELLUNG PARTITION BY REFERENCE (FK_BEST);
35
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Interval Partitioning – Nachträgliches Ändern der Zyklen
• Range-partitionierte Tabellen können umgestellt werden
• Einfaches Metadaten Kommando
• Investitionsschutz
Table F_Umsatz_Interval
...
...
2005
Q1 2006
Q2 2006
...
Oct 2006
Bisherige Range Partition Table
Neue monatliche
Interval Partitions
ALTER TABLE F_Umsatz_Interval SET INTERVAL(NUMTOYMINTERVAL(1,'month');
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
List Partitioning
AMER
• Für diskrete, unsortierte Werte
EMEA
• Angabe einer Werteliste pro Partition
• VALUES (DEFAULT) für “alles andere”
APAC
– Verhalten wie MAXVALUE in der Range-Partitionierung
CREATE TABLE bestellung (
bestellnr number,
auftragsart varchar2(40),
land varchar2(2)
)
PARTITION BY LIST (land) (
PARTITION EMEA VALUES ('DE','FR',[..]),
PARTITION AMER VALUES ('US','CA',[..]),
PARTITION APAC VALUES ('JP','CN',[..]),
PARTITION OTHERS VALUES (DEFAULT)
)
37
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Hash Partitioning - Gleichverteilung der Daten
• Partitionierung nach Hash-Wert des Partition Key
– Schlüsseltypen:
Alle built-in Datentypen außer ROWID, LONG, LOB
– Ziel: Gleichverteilung der Daten
– Anzahl Partitionen: als Potenz von 2 empfohlen
CREATE TABLE F_Umsatz_HASH (
Artikel_ID
number,
Kunden_ID
number,
Zeit_ID
DATE,
Region_ID
number,
Umsatz
number,
Menge
number
) PARTITION BY HASH (Zeit_ID)
PARTITIONS 4
38
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Reference Partitioning
• Anwendung im DWH eher selten
• Beispiel abhängige Faktentabellen
• Bondaten (Kopf- / Positionsdaten)
PK
BestellNr
KundenNr
BestellDatum
PK
FK
April
März
Februar
Januar
Bestellungen
BestellNr
ArtikelNr
Menge
PosNr
FK
April
BestellNr
LieferNr
März
PosNr
April
Februar
März
Januar
Februar
Bestell_Positionen
Januar
Auslieferungen
39
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Interval-Reference Partitioning
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Virtual Column Partitioning
Produktnummer
Menge
Preis
4711GBEMP9147
370
32,50
....
2385GBEMP1239
579
22,10
....
0801GBEMP1138
120
16,30
....
4711LEERM9147
750
89,50
....
2385LEERM1239
589
12,70
....
0801LEERM1138
121
11,20
....
4721UAGBM9147
837
39,50
....
1385UAGBM1039
599
17,10
Partitionierung einer
Bestelltabelle nach den
0901UAGBM1338
578
17,70
Produktgruppen.
Die Nummer der Produktgruppen
substr(Produktnummer,4,5)
ist allerdings Bestandteil
der Produktnummer
(5.- 9. Stelle).
....
• Anwendung im DWH
eher selten
• IM ETL-Prozess würde
man stattdessen eine
zusätzliche Spalte
erstellen
Abnehmer
P1
P2
P3
....
• Für alle Partitioning-/Subpartitioning-Varianten einsetzbar
42
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Composite Partitioning
• Range ...
– Range – Range
– Range – Hash
– Range - List
• List ...
– List - Range
– List - Hash
– List - List
43
JAN 07
FEB 07
MAR 07
Produkt
Service
Storno
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
ARTIKEL_ID
FK
KUNDEN_ID FK
ZEIT_ID
FK
REGION_ID
FK
KANAL_ID
UMSATZ
FK
MENGE
UMSATZ_GESAMT
Partitionierung im Star
Range-Partitioning
nach Zeit
Mehr als 80 % aller
Partitionierungen sind
so aufgebaut.
F_UMSATZ
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
44
PK: Btree Index
FK: Bitmap Index
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
ARTIKEL_ID
FK
KUNDEN_ID FK
ZEIT_ID
FK
REGION_ID
FK
KANAL_ID
UMSATZ
FK
MENGE
UMSATZ_GESAMT
Partitionierung im Star
Range-Partitioning
nach Zeit
List-Partitioning
nach Vertriebskanal
Mehr als 80 % aller
Partitionierungen sind
so aufgebaut.
F_UMSATZ
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
45
PK: Btree Index
FK: Bitmap Index
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel Range-List
+
CREATE TABLE f_umsatz_range_list
(ARTIKEL_ID
NUMBER(10),
KUNDEN_ID
NUMBER(10),
ZEIT_ID
DATE,
REGION_ID
NUMBER(10),
KANAL_ID
NUMBER(10),
UMSATZ
NUMBER(10),
MENGE
NUMBER(10),
UMSATZ_GESAMT
NUMBER(10) )
PARTITION BY RANGE (ZEIT_ID)
SUBPARTITION BY LIST (KANAL_ID) SUBPARTITION
TEMPLATE
(
SUBPARTITION kanal1 VALUES (1),
SUBPARTITION kanal2 VALUES (2),
SUBPARTITION kanal3 VALUES (3),
SUBPARTITION kanal4 VALUES (4),
SUBPARTITION kanal5 VALUES (5),
SUBPARTITION kanal6 VALUES (6),
SUBPARTITION kanal7 VALUES (7)
)
(
PARTITION jan10 VALUES LESS THAN (TO_DATE('2010-02-01','SYYYY-MM-DD')),
PARTITION feb10 VALUES LESS THAN (TO_DATE('2010-03-01','SYYYY-MM-DD')),
PARTITION nov11 VALUES LESS THAN (TO_DATE('2011-12-01','SYYYY-MM-DD')),
PARTITION dec11 VALUES LESS THAN (TO_DATE('2012-01-01','SYYYY-MM-DD')),
PARTITION next_month VALUES LESS THAN (MAXVALUE));
List-List
CREATE TABLE "BESTELLUNG"
(
"BESTELLNR" NUMBER(10) NOT NULL,
"KUNDENCODE" NUMBER(10),
"BESTELLDATUM" DATE,
"LIEFERDATUM" DATE,
"BESTELL_TOTAL" NUMBER(12, 2),
"AUFTRAGSART" VARCHAR2(30),
"VERTRIEBSKANAL" NUMBER
)
PARTITION BY LIST ("VERTRIEBSKANAL")
SUBPARTITION BY LIST ("AUFTRAGSART")
SUBPARTITION TEMPLATE
(
SUBPARTITION Produkt VALUES ('ARTIKEL','TAUSCHWARE'),
SUBPARTITION Service VALUES ('SERVICE','REISE'),
SUBPARTITION Storno VALUES ('RETOURE','KOMMISSION'),
SUBPARTITION Andere VALUES (default)
) (
PARTITION Telefon
VALUES (1,2,3),
PARTITION Aussendienst VALUES (4,5),
PARTITION Web
VALUES (6,7),
PARTITION PARTNER
VALUES (8,9,10) );
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Beispiel für die nachfolgende
Systemabfrage
DATA WAREHOUSE
Systemabfragen
col subpartition_name format a15
col partition_name format a15
col SUBPARTITION_POSITION format 99999999
SELECT table_name, partition_name,
subpartition_name, subpartition_position
FROM user_tab_subpartitions;
TABLE_NAME
-------------------BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
47
PARTITION_NAME
--------------Jan08
Jan08
Jan08
Jan08
Feb08
Feb08
Feb08
Feb08
Mar08
Mar08
Mar08
SUBPARTITION_NA SUBPARTITION_POSITION
--------------- --------------------Jan08_ANDERE
4
Jan08_STORNO
3
Jan08_SERVICE
2
Jan08_PRODUKT
1
Feb08_ANDERE
4
Feb08_STORNO
3
Feb08_SERVICE
2
Feb08_PRODUKT
1
Mar08_ANDERE
4
Mar08_STORNO
3
Mar08_SERVICE
2
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitionwise Join im DWH
• Das Partitionieren von Dimensionen ergibt heute oft nur eingeschränkt
einen Sinn
– Oft zu klein im Vergleich zu einer Faktentabelle
– Fachlich ist meist kein gleiches Partitionierungskriterium zu finden
• Ausnahmen
– Abfragen über 2 große Tabellen z. B. große Faktentabellen
Bonköpfe
Zahlungen
Leistungen
1:n
Bonpositionen
48
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Add / Rename / Truncate Partition
• Add Partition (Globale und lokale Indizes bleiben “USABLE”)
ALTER TABLE BESTELLUNG
ADD PARTITION "NOV08"
VALUES LESS THAN (to_date('2008-11-30 00:00:00','SYYYY-MM-DD HH24:MI:SS',
'NLS_CALENDAR=GREGORIAN'))
TABLESPACE "TS_PAR"
• Umbenennen einer Partition
ALTER TABLE Bestellung RENAME PARTITION Andere TO Bestellung_Rest;
• Truncate einer Partition
ALTER TABLE Bestellung TRUNCATE PARTITION Service DROP STORAGE;
• Ändern des Tablespace einer Partition (Wirkt sich nur auf künftige Partitionen aus)
ALTER TABLE BESTELLUNG
MODIFY DEFAULT ATTRIBUTES FOR PARTITION "Jan08"
TABLESPACE TS_PAR_JAN ;
49
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
CREATE TABLESPACE TS_PAR_Archiv DATAFILE ‚
D:\o11\oradata\o11\TS_PAR_Archiv.f' SIZE 10m REUSE;
Moving Partition
ALTER TABLE BESTELLUNG
MOVE PARTITION "Jan08"
TABLESPACE TS_PAR_Archiv;
• Fragmentierung beheben
• Umziehen in einen anderen Tablespace
CREATE TABLESPACE TS_PAR_Archiv_Jan DATAFILE
'D:\o11\oradata\o11\TS_PAR_Archiv_Jan.f' SIZE
10m REUSE;
• Komprimierung der Daten einer Partition
ALTER TABLE BESTELLUNG
MOVE SUBPARTITION "Jan08_STORNO"
TABLESPACE TS_PAR_Archiv_Jan;
TS_Einzel_1
TS_Gesamt
50
P1 sub
sub
sub
P2 sub
sub
sub
P3 sub
sub
sub
P4 sub
sub
sub
P5 sub
sub
sub
P6 sub
sub
sub
P7 sub
sub
sub
sub
TS_Einzel_2
• Transparente MOVE PARTITION ONLINE
Operation
• Gleichzeitig DML und Abfragen möglich
• Index Pflege für lokale und globale Indizes
sub
TS_Archiv
sub
sub
sub
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Split und Merge von Partition
ALTER TABLE Bestellung
SPLIT PARTITION "Jan08"
AT (to_date('15-JAN-2008','DD-MON-YYYY'))
INTO (PARTITION Jan08_1, PARTITION Jan08_2)
UPDATE GLOBAL INDEXES;
SELECT table_name, partition_name, high_value
FROM user_tab_partitions
WHERE table_name = 'BESTELLUNG ';
ALTER TABLE BESTELLUNG
MERGE SUBPARTITIONS TELEFON_STORNO, TELEFON_ANDERE
INTO SUBPARTITION TELEFON_OBJEKTE
TABLESPACE TS_PAR;
sub1
subX
sub2
Par1
• Verschmolzen wird immer eine Liste von
Partitionen / Subpartitionen
ParX
Par2
• Nicht für Reference / Hash Partitioned
Tables anwendbar
• Indizes werden UNUSABLE gesetzt
51
• Die neue Partition darf noch nicht existieren
• Funktioniert auch für Reference Partitioning,
d.h. MERGE-Operation auf Parent Table wirkt
sich auch auf die abhängige Tabelle aus
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Erweiterte Partitionspflege Operationen
• Ein Operation bezieht sich auf mehrere Partitionen
• Parallelisiert
• Transparente Pflege lokaler und globaler Inidizes
ALTER TABLE orders
MERGE PARTITIONS Jan2009, Feb2009, Mar2009
INTO PARTITION Quarter1_2009 COMPRESS FOR ARCHIVE HIGH;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ändern von Werten bei List Partitioning
SQL> ALTER TABLE Bestellung
2 MODIFY PARTITION Produkt
3 ADD VALUES ('WARE');
Tabelle wurde geändert.
SQL> ALTER TABLE Bestellung
2 MODIFY PARTITION Storno
3 DROP VALUES ('KOMMISSION');
Tabelle wurde geändert.
SQL> SELECT partition_name, tablespace_name, high_value
2 FROM user_tab_partitions
3 WHERE table_name = 'BESTELLUNG';
PARTITION_NAME
-------------------------------PRODUKT
'WARE'
SERVICE
STORNO
ANDERE
53
TABLESPACE_NAME
HIGH_VALUE
----------------------------------------------------------USERS
'ARTIKEL', 'TAUSCHWARE', 'PRODUKT',
USERS
USERS
USERS
'SERVICE', 'REISE'
'RETOURE'
default
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Erstellen einer Tabelle aus einer Partition EXCHANGE
SQL> CREATE TABLE Bestellung_Produkte AS
2 SELECT * FROM bestellung WHERE 1=2
SQL> /
Tabelle wurde erstellt.
SQL> ALTER TABLE Bestellung
2 EXCHANGE PARTITION Produkt
3 WITH TABLE Bestellung_Produkte;
TS_Gesamt
54
P1 sub
sub
sub
P2 sub
sub
sub
P3 sub
sub
sub
P4 sub
sub
sub
P5 sub
sub
sub
P6 sub
sub
sub
P7 sub
sub
sub
 Die Zieltabelle muss existieren
Tabelle X
Allgemeine Syntax:
ALTER TABLE <Tabellen-Name>
EXCHANGE PARTITION <Partition-Name>
WITH TABLE <neue Tabelle>
<including | excluding> INDEXES
<with | without> VALIDATION
EXCEPTIONS INTO <Schema.Tabellen-Name>;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Wo und wie wird im DWH partitioniert
Lade-Aktivitäten
Partitioning und Ladesteuerung laufen oft synchron
Parallelisierung
Lese-Aktivitäten
Partition Pruning
Parallelisierung
Data Integration Layer
User View Layer
Enterprise Information Layer
R: Referenztabellen
T
20%
T
PEL
R
R
S
S
S
D
T: Transfertabellen
D
S: Stammdaten
B: Bewgungsdaten
F
B
T
80%
D: Dimensionen
D
F: Fakten
D
B
ILM
Backup
Vorbereitung
Temporäre
Tabellen
(Prüfungen etc)
56
Bewegungsdaten sind
Partitioniert (80/20 – Prinzip)
Faktentabellen
und Würfel
können partitioniert
sein
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Wo wird Partitioning wieder vorkommen
• Indizierung
• Bessere Verwaltung großer Tabellen
• Materialized Views
• Verbesserung der Verfügbarkeit und
Performance
• Partition Exchange and Load
• Parallelisierung
• Life Cycle Management /
Storage Management
• Ressourcen werden geschont und geben
Rechenkapazitäten frei
• Transparente Anwendung, d.h. Nutzung ohne
Änderung an der Applikation
• Ermöglicht Information Lifecycle
Management: Nutzung unterschiedlicher
Storage-Klassen, je nach Zugriffshäufigkeit ->
Einsparung von Storagekosten
57
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Schlüssel und Indizierung im
Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Schlüssel / Indizierung
• Künstliche Schlüssel im Data Warehouse (Konzept)
• Indexvarianten
– Btree -> Single Row Access (OLTP)
– Bitmap -> bessere Unterstützung bei Mengenoperationen
• Star Schema Transformation
• Partitionierung von Indexen (local, global)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
59
B*Tree Index – 4 Zugriffe bis zum Wert
1
2
Clustering
Factor
Zugriff über die
RowID
3
4
60
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Bitmap – Zugriff auf Werte per Bit Stream
Rowid
Name
Abschluss
Rating
AAAHfVAAJAAAKOKAAA
Meier
Klasse_10
5
AAAHfVAAJAAAKOKAAB
Schubert
Abitur
5
AAAHfVAAJAAAKOKAAC
Klaus-Gustav
Abitur
5
AAAHfVAAJAAAKOKAAD
Schmidt
Diplom
5
AAAHfVAAJAAAKOKAAE
Langbein
Doktor
5
AAAHfVAAJAAAKOKAAF
Hund
Klasse_10
5
AAAHfVAAJAAAKOKAAG
Vogel
Abitur
5
AAAHfVAAJAAAKOKAAH
Messner
Abitur
5
Abschluss=
Klasse_10
SELECT Name
FROM KD_Table
WHERE Abschluss=‘Diplom‘;
61
Abschluss=
Abitur
Abschluss=
Diplom
Abschluss=
Doktor
AAAHfVAAJAAAKOKAAA
1
0
0
0
AAAHfVAAJAAAKOKAAB
0
1
0
0
AAAHfVAAJAAAKOKAAC
0
1
0
0
AAAHfVAAJAAAKOKAAD
0
0
1
0
AAAHfVAAJAAAKOKAAE
0
0
0
1
AAAHfVAAJAAAKOKAAF
1
0
0
0
AAAHfVAAJAAAKOKAAG
0
1
0
0
AAAHfVAAJAAAKOKAAH
0
1
0
0
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Platzverbrauch im Vergleich
CREATE TABLE I_Kunde
(KD_NR
Name
Geb_Dat
Bildungsgruppe
KR_Rating_1_bis_Variabel
Tests mit unterschiedlicher
Kardinalität
number,
varchar2(30),
date,
varchar2(30),
number);
SELECT index_name,index_type blevel, leaf_blocks, distinct_keys FROM
user_indexes;
Anzahl
Sätze
Bildungsgruppe
Bildungsgruppe
Geb_Dat
KR_Rating_1_bis_Variabe
KD_NR
62
100000
100000
100000
100000
100000
Distinct
Werte Prozent
5
100
14575
43211
100000
Leaf_
Blocks
BTree
0.005
0.1
14.575
43.211
100
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
271
192
265
220
222
Leaf_
Blocks
bitmap
11
34
97
179
348
DATA WAREHOUSE
(Bitmap-) Indizierung – Ideal für Warehouse-Abfragen
Selektivität
D_KUNDE (1 Million)
(Dimension)
F_UMSATZ
(Fakten)
KANAL_ID
FK
KUNDEN_ID FK
ZEIT_ID
FK
REGION_ID
FK
ARTIKEL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
D_ARTIKEL
(Dimension)
ARTIKEL_ID PK
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
KUNDEN_ID PK
KUNDENNR
GESCHLECHT
VORNAME
NACHNAME
TITEL
GEBDAT
BRANCHE
WOHNART
KUNDENART
BILDUNG
ANZ_KINDER
EINKOMMENSGRUPPE
BERUFSGRUPPE
STATUS
KONTAKTPERSON
FIRMENRABATT
BERUFSGRUPPEN_NR
BILDUNGS_NR
EINKOMMENS_NR
WOHNART_NR
KUNDENKARTE
• Bitmap-Indizierung für
Unique
3 Werte
0,0003 %
• WerteMengenorientierte
Bereichsabfragen
20 Werte
0,0020 %
• Immer bei
Selektivität < 30%
10 Werte
0,0010 %
20 Werte
100 Werte
0,0020 %
0,01 %
Unique
2 Werte
• Fast immer bei
Dimensionsattributen
0,0002 %
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Aktualisieren von Indexen
• OLTP-Option: Rebuild Index Operation
ALTER INDEX index_name REBUILD [ NOLOGGING ];
• Schneller als DROP / CREATE
– NOLOGGING-Klausel
• Fragmentierung wird beseitigt
• Wenig hilfreich im DWH
– Änderungen aber oft als Batch-Lauf durchgeführt
 Zunächst DROP INDEX (beschleunigt den Batch-Lauf)
Dann Neuerstellen des Index
Oder 1. INDEX auf Unusable setzen [Alter index index_name usable]
2. ETL-Massen-Load
3. INDEX Rebuild [Alter index index_name rebuild]
64
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitioning und Indizes
• Lokale Indizes
• Nicht-partitionierte oder partitionierte globale Indizes
• USABLE oder UNUSABLE Index Segmente
– Nicht-persistenter Index Status
– Losgelöst von der Tabelle
• Partielle lokale und globale Indizes
– Erwirkt spezielle Metadaten auf [Sub]Partitionsebene
– Interagiert mit dem USABLE/UNUSABLE Status für lokale Indizes
– Indizierung jederzeit anpassbar
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Prefixed / Non Prefixed Indexes
Local Index
Indiziert nach
Bestelldatum
Einfacher
Index
Im DWH relevante Variante
66
Indiziert nach
Bestelldatum,
Kundennummer
Non-Prefixed
Indiziert nach
Auftragsart
Auftragsart
Kundennummer
Bestelldatum
Partition Key
Bestelldatum
Partitionierte
Tabelle
“Bestellung”
Prefixed local
Index
Gut für
Management
der Partitionen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Gut für nicht Part-Key
gesteuerte Abfragen
DATA WAREHOUSE
Globale Indexe
CREATE TABLE f_umsatz_range
(ARTIKEL_ID NUMBER(10),
KUNDEN_ID NUMBER(10),
ZEIT_ID
DATE,
REGION_ID NUMBER(10),
KANAL_ID
NUMBER(10),
UMSATZ
NUMBER(10),
MENGE
NUMBER(10),
UMSATZ_GESAMT
NUMBER(10)
)
PARTITION BY RANGE (ZEIT_ID) (
PARTITION jan10 VALUES LESS THAN (TO_DATE('2010-02-01','SYYYY-MM-DD')),
PARTITION feb10 VALUES LESS THAN (TO_DATE('2010-03-01','SYYYY-MM-DD')),
PARTITION mar10 VALUES LESS THAN (TO_DATE('2010-04-01','SYYYY-MM-DD')),
- - - - - - - - - - - - - - - - - - - - - - - - - PARTITION dec11 VALUES LESS THAN (TO_DATE('2012-01-01','SYYYY-MM-DD')),
PARTITION next_month VALUES LESS THAN (MAXVALUE));
CREATE INDEX idx_UMSATZ_RANGE on f_umsatz_range (Kunden_id)
GLOBAL
PARTITION BY RANGE (Kunden_id) (
PARTITION index100 VALUES LESS THAN (100),
PARTITION index500 VALUES LESS THAN (500),
PARTITION index1000 VALUES LESS THAN (1000),
PARTITION index_MAX VALUES LESS THAN (MAXVALUE) );
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lokale Indizes
CREATE INDEX idx_Artikel_id ON
F_Umsatz_range (Artikel_id) LOCAL;
CREATE TABLE f_umsatz_range
(ARTIKEL_ID NUMBER(10),
KUNDEN_ID
NUMBER(10),
ZEIT_ID
DATE,
REGION_ID
NUMBER(10),
CREATE INDEX idx_region_id
KANAL_ID
NUMBER(10),
F_Umsatz_range (region_id)
UMSATZ
NUMBER(10),
MENGE
NUMBER(10),
UMSATZ_GESAMT
NUMBER(10)
)
PARTITION BY RANGE (ZEIT_ID) (
PARTITION jan10 VALUES LESS THAN (TO_DATE('2010-02-01','SYYYY-MM-DD')),
PARTITION feb10 VALUES LESS THAN (TO_DATE('2010-03-01','SYYYY-MM-DD')),
PARTITION mar10 VALUES LESS THAN (TO_DATE('2010-04-01','SYYYY-MM-DD')),
- - - - - - - - - - - - - - - - - - - - - - - - - PARTITION dec11 VALUES LESS THAN (TO_DATE('2012-01-01','SYYYY-MM-DD')),
PARTITION next_month VALUES LESS THAN (MAXVALUE));
68
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
ON
LOCAL;
DATA WAREHOUSE
Indizes anzeigen lassen
• Welche Indexe gibt es für eine Tabelle
SELECT index_name, partitioned
FROM user_indexes
WHERE table_name = 'BESTELLUNG_RANGE';
INDEX_NAME
PAR
------------------------------ --PK_DATE_BESTELL
YES
• Auflistung von Index-Partitionen
SELECT ip.index_name, ip.composite, ip.partition_name, ip.high_value
FROM user_ind_partitions ip, user_indexes ui
WHERE ip.index_name = ui.index_name
AND ui.table_name = 'BESTELLUNG';
INDEX_NAME
-----------------------------BEST_DAT
BEST_DAT
BEST_DAT
BEST_DAT
- - - - - - - - - - - - - - - - -
69
COM
--NO
NO
NO
NO
- -
PARTITION_NAME
-----------------------------Feb07
Jan07
Mar07
Apr07
- - - - - - - - - - - - - - - - -
HIGH_VALUE
-------------------TO_DATE(' 2017-02-28
TO_DATE(' 2017-01-31
TO_DATE(' 2017-03-31
TO_DATE(' 2017-04-30
- - - - - - - -
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partielle lokale und globale Indizes
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Operationen auf lokale Indizes
• Änderungs-Operationen wie ADD, DROP, SPLIT, MERGE werden von der
Tabelle auf den Index übertragen
• Rebuild Partiton Index
ALTER TABLE <table_name>
MODIFY PARTITION <partition_name>
REBUILD UNUSABLE LOCAL INDEXES;
• Rebuild Subpartiton Index
ALTER TABLE <table_name>
MODIFY SUBPARTITION <subpartition_name>
REBUILD UNUSABLE LOCAL INDEXES;
• Verschieben auf einen
anderen Table
71
ALTER INDEX <index_name>
REBUILD PARTITION <partition_name>
TABLESPACE <new_tablespace_name>;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Asynchrone Global Index Pflege
• Nach DROP oder TRUNCATE PARTITION bleibt der globale Index auch
ohne Index Pfege valide
• Betroffene Partitionen sind intern bekannt und werden während des
Zugriffs herausgefiltert
• Verzögerte Global Index Pflege
– Anstoß durch ALTER INDEX REBUILD|COALESCE
– Automatisierbar in einem Datenbank-Job
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Star Query Transformation
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
D_KUNDE
Beispiel Star Schema
D_ARTIKEL
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
D_REGION
REGION_ID
ORTNR
ORT
KREISNR
KREIS
LANDNR
LAND
REGIONNR
REGION
74
PK
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
PK
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
PK: Btree Index
FK: Bitmap Index
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
KUNDEN_ID
PK
KUNDENNR
GESCHLECHT
VORNAME
NACHNAME
TITEL
ANREDE
GEBDAT
BRANCHE
WOHNART
KUNDENART
BILDUNG
ANZ_KINDER
EINKOMMENSGRUPPE
ORTNR NUMBER,
BERUFSGRUPPE
STATUS
STRASSE
TELEFON
TELEFAX
KONTAKTPERSON
FIRMENRABATT
BERUFSGRUPPEN_NR
BILDUNGS_NR
EINKOMMENS_NR
WOHNART_NR
HAUSNUMMER
PLZ
ORT
KUNDENKARTE
ZAHLUNGSZIEL_TAGE
TOTAL
TOTAL_NR
DATA WAREHOUSE
Star Query Transformation
Optimierung für Joins mit großen Faktentabellen
SELECT sum(summe) FROM
F_Umsatz
1.000.000
65
12.834
U,
D_Artikel A,
D_Region R,
3.074
1.029
D_Zeit Z,
D_Kunde K
WHERE
U.FK_Kunden_ID
= K.Kunden_ID
AND
U.FK_Datum_ID
AND
U.FK_Ort_ID
= R.Ort_ID
AND
U.FK_Artikel_Nummer
= A.Nummer
= Z.Datum_ID
AND Z.JAHR_NUMMER
= 2008
AND A.GRUPPE_NR
= 3
AND K.KUNDENART
= 8
AND R.REGION_Name IN ('MITTE','SUED','NORD');
75
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
STAR_TRANSFORMATION_ENABLED=FALSE;
Abgelaufen: 00:00:03.48
-------------------------------------------------------------------------------------| Id
| Operation
| Name
Rows |Bytes |Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
1 |
50 |1057
|
1 |
SORT AGGREGATE
|
1 |
50 |
|
|
2 |
NESTED LOOPS
|
|
|
|
|
3 |
|
12 |
600 |1057
(2)| 00:00:13
|*
4 |
|
31 | 1209 |1026
(2)| 00:00:13
|*
5 |
|
121 | 3993 |1022
(2)| 00:00:13
|*
6 |
TABLE ACCESS FULL
| D_ZEIT
152 | 1216 |
7
(0)| 00:00:01
|*
7 |
HASH JOIN
|
2459 |61475 |1015
(2)| 00:00:13
|*
8 |
TABLE ACCESS FULL
| D_KUNDE
|
9 |
TABLE ACCESS FULL
| F_UMSATZ
|* 10 |
|* 11 |
|* 12 |
NESTED LOOPS
HASH JOIN
HASH JOIN
TABLE ACCESS FULL
INDEX UNIQUE SCAN
3 |
1010K|
18 |
(2)| 00:00:13
9
(0)| 00:00:01
18M|1001
(2)| 00:00:13
| D_ARTIKEL
16 |
96 |
3
(0)| 00:00:01
| PK_REGION
1 |
|
0
(0)| 00:00:01
1 |
11 |
1
(0)| 00:00:01
TABLE ACCESS BY INDEX ROWID| D_REGION
----------------------------------------------------------------------------------------
76
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
STAR_TRANSFORMATION_ENABLED=TRUE;
Abgelaufen: 00:00:00.76
-----------------------------------------------------------------------------------------------| Id | Operation
| Name
|Rows | Bytes| Cost (%CPU)| Time|
------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
1 |
19 |199(2)| 00:00:03 |
|
1 | SORT AGGREGATE
|
|
1 |
19 |
|
|
|
2 |
TABLE ACCESS BY INDEX ROWID | F_UMSATZ
| 14 | 268 |199(2)| 00:00:03 |
|
3 |
BITMAP CONVERSION TO ROWIDS|
|
|
|
|
|
|
4 |
BITMAP AND
|
|
|
|
|
|
|
5 |
BITMAP MERGE
|
|
|
|
|
|
|
6 |
BITMAP KEY ITERATION
|
|
|
|
|
|
|* 7 |
TABLE ACCESS FULL
| D_KUNDE
|
3 |
18 | 9(0)| 00:00:01 |
|* 8 |
BITMAP INDEX RANGE SCAN| IDX_FK_KUNDEN_ID_BM
|
|
|
|
|
|
9 |
BITMAP MERGE
|
|
|
|
|
|
| 10 |
BITMAP KEY ITERATION
|
|
|
|
|
|
|* 11 |
TABLE ACCESS FULL
| D_ARTIKEL
| 16 |
96 | 3(0)| 00:00:01 |
|* 12 |
BITMAP INDEX RANGE SCAN| IDX_FK_ARTIKEL_NUMMER_BM |
|
|
|
|
| 13 |
BITMAP MERGE
|
|
|
|
|
|
| 14 |
BITMAP KEY ITERATION
|
|
|
|
|
|
|* 15 |
TABLE ACCESS FULL
| D_ZEIT
| 152 | 1216 | 7(0)| 00:00:01 |
|* 16 |
BITMAP INDEX RANGE SCAN| IDX_FK_DATUM_ID_BM
|
|
|
|
|
| 17 |
BITMAP MERGE
|
|
|
|
|
|
| 18 |
BITMAP KEY ITERATION
|
|
|
|
|
|
|* 19 |
TABLE ACCESS FULL
| D_REGION
|5069 |55759 | 69(0)| 00:00:01 |
|* 20 |
BITMAP INDEX RANGE SCAN| IDX_FK_ORT_ID_BM
|
|
|
|
|
------------------------------------------------------------------------------------------------
77
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
ARTIKEL_ID
FK
KUNDEN_ID FK
ZEIT_ID
FK
REGION_ID
FK
KANAL_ID
UMSATZ
FK
MENGE
UMSATZ_GESAMT
Bitmap-Indizierung im Star Schema
F_UMSATZ
D_ARTIKEL
ARTIKEL_SPARTEN_NR
ARTIKEL_SPARTE
ARTIKEL__SEGMENT_NR
ARTIKEL__SEGMENT
ARTIKEL_GRUPPEN_NR
ARTIKEL_GRUPPE
ARTIKEL_PREIS
ARTIKEL_NAME
ARTIKEL ID PK
10
100
1.000
100.000
Star-Transformation
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
78
PK: Btree Index
FK: Bitmap Index
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Star Query Transformation
Wie funktioniert es
1.
Zugriff auf die Faktentabelle und Lookup mit
den Filterkriterien auf Dimension 1 zur
Erzeugung eines Bitmap entsprechend der
Primary Keys
2.
Wiederholen für alle Dimensionen
3.
AND-Verknüpfung der Bitmaps und Suchen
nach den Faktentabellen-Row IDs
4.
5.
Bedingungen
• STAR_TRANSFORMATION_ENABLED=TRUE
• Keine Bind Variable im SELECT Statement, kein
CONNECT BY und kein START WITH
verwenden
• Die Faktentabelle
– Muss mehr als 15000 Sätze haben (Stand 10g)
Zugriff mit gefundenen Row IDs auf die
Faktentabelle
– Kann keine View sein
Evtl. Join-back auf die Dimensionen für die
restlichen Spalten, die benötigt werden.
– Muss mehr als 2 Bitmap Indizes haben
 Es findet zu keinem Zeitpunkt ein Full Table Scan auf der
Faktentabelle statt
– Kann keine Remote-Tabelle sein
• Die Foreign Key Felder müssen als Bitmap Index
definiert sein (Faktentabelle)
• Ein Foreign Key Constraint als solches muss nicht
definiert sein
79
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
D_KUNDE
Indizierung im Star
D_ARTIKEL
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
D_REGION
REGION_ID
ORTNR
ORT
KREISNR
KREIS
LANDNR
LAND
REGIONNR
REGION
80
PK
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
PK
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
PK: Btree Index
FK: Bitmap Index
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
KUNDEN_ID
PK
KUNDENNR
GESCHLECHT
VORNAME
NACHNAME
TITEL
ANREDE
GEBDAT
BRANCHE
WOHNART
KUNDENART
BILDUNG
ANZ_KINDER
EINKOMMENSGRUPPE
ORTNR NUMBER,
BERUFSGRUPPE
STATUS
STRASSE
TELEFON
TELEFAX
KONTAKTPERSON
FIRMENRABATT
BERUFSGRUPPEN_NR
BILDUNGS_NR
EINKOMMENS_NR
WOHNART_NR
HAUSNUMMER
PLZ
ORT
KUNDENKARTE
ZAHLUNGSZIEL_TAGE
TOTAL
TOTAL_NR
DATA WAREHOUSE
Werden Index immer gebraucht?
• Im DWH gibt es eine grundsätzlich andere Verwendung von
Indexen
OLTP
DWH
Einzelne Selects
Selects über Datenbereiche
Einzelne Inserts
Massen-Inserts
Oft Verwaltung über Contraints (z. B.
Unique Key)
Möglichkeiten im Verlauf des ETLProzesses
alter index PK_BESTELLNR_PART_RANGE_HASH monitoring usage
SELECT INDEX_NAME, TABLE_NAME, MONITORING, USED FROM SYS.V$OBJECT_USAGE
• => Im DWH eher Bitmap-Indexe als Btree
• Usage-Monitor zeigt, ob ein Index wirklich genutzt wurde
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Wo und wie wird im DWH indiziert
Lade-Aktivitäten
Lese-Aktivitäten
Data Integration Layer
Enterprise Information Layer
User View Layer
Process neutral / 3 NF
Keine Indexe
B*tree für Eindeutigkeit
und als Primary Key
Bitmaps
Bitmaps
B*tree für Primary Keys
In den Dimensionen
Tabellen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Query-Optimizer und System-Statistiken im
Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Statistiken sammeln
• Regelmäßig aktuelle Statistiken sind wichtig für gute Ausführungspläne
• Ständiges Aktualisieren belastet das System
• Best Practice im DWH
– Statistiken in Verbindung mit dem ETL-Prozesse aktualisieren.
– Nur diejenigen Tabellen, Partitionen und Indexe aktualisieren, die aktuell geladen
bzw. verändert wurden.
– => Automatisiertes Aktualisieren sollte genau überlegt werden
DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>);
DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>,
Partname=><PARTITION_NAME>, GRANULARITY=>'PARTITION');
DBMS_STATS.GATHER_INDEX_STATS(Ownname=><OWNER>,Indexname=><TABLE_NAME>);
84
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Sammeln von Statistiken
• Tabellen -> GATHER_TABLE_STATS
• Indexe
-> GATHER_INDEX_STATS
• Schema -> GATHER_SCHEMA_STATS
• Automatisiertes Sammeln für ein Schema
• Automatisiertes Sampling
– Parameter DBMS_STATS.AUTO_SAMPLE_SIZE
EXEC DBMS_STATS.GATHER_TABLE_STATS (
'PART','BESTELLUNG_PART_RANGE',
estimate_percent=>100);
EXEC dbms_stats.gather_schema_stats(
ownname => 'PERF',
estimate_percent => 5,block_sample => TRUE)
Begin
dbms_stats.gather_schema_stats(
ownname
=> 'PERF'
,options
=> 'GATHER AUTO'
,estimate_percent => 5
,block_sample
=> TRUE);
end;
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(
'OE',DBMS_STATS.AUTO_SAMPLE_SIZE);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Sammeln von Column-bezogenen Statistiken (Historgramme)
• Sinnvoll bei komplexen where-Bedingungen und starker UngleichVerteilung der Werte innerhalb einer Spalte
begin
DBMS_STATS.GATHER_TABLE_STATS(Ownname=>'DWH',
Tabname=>'F_UMSATZ' ,
METHOD_OPT =>
'FOR COLUMNS SIZE AUTO KUNDEN_ID,ARTIKEL_ID,ZEIT_ID, REGION_ID, KANAL_ID’);
end;
begin
DBMS_STATS.GATHER_TABLE_STATS(Ownname=>'DWH',
Tabname=>'F_UMSATZ' ,
METHOD_OPT =>
'FOR COLUMNS SIZE 20 KUNDEN_ID,ARTIKEL_ID,ZEIT_ID, REGION_ID’);
end;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Abfrage der Art Histogramme
• HEIGHT BALANCED: Aufteilung aller Werte in n-Gruppen
– Hier kann der Grenzwert der jeweiligen Grueppen abgefragt werden
• FREQUENCY: Auflistung der Menge pro vorkommenden Wert
SELECT column_name, num_distinct, num_buckets, histogram
FROM user_tab_col_statistics
WHERE table_name = 'F_UMSATZ';
COLUMN_NAME
NUM_DISTINCT NUM_BUCKETS HISTOGRAM
------------------------------ ------------ ----------- -ARTIKEL_ID
129
20 HEIGHT BALANCED
KUNDEN_ID
1031
20 HEIGHT BALANCED
ZEIT_ID
6001
20 HEIGHT BALANCED
REGION_ID
7020
20 HEIGHT BALANCED
KANAL_ID
7
7 FREQUENCY
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Histogramme machen Sinn wenn
• Histogramme machen Sinn wenn
– Wenn Spalten ungleichmäßig verteilte Werte haben und in der WHERE-Klausel
von Abfragen vorkommen
– Spalten die seltener abgefragt werden, und daher keine Indexe haben
• Histogramme nicht anlegen bei
– Gleich verteilten Spaltenwerten
– Nicht für alle Spalten einer Tabelle  zu viel Overhead
– PKs oder indizierten Spalten
– Spalten, die nicht abgefragt werden
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Dynamic
Sampling
• Zusätzliche Hilfen für
den Optimizer
– Werte von 1 – 10
(Default 2)
• Setting
– alter system set optimizer_dynamic_sampling=4;
– Manuelles Setzen ist sinnvoll wenn SQL seriell
– System wählt automatisch den Einstellwert bei Parallelisierung
• Testen
• Sinnvoll bei komplexen WHERE-Klauseln
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Inkrementelles Statistiksammeln
• Incremental Global Statistics
– Synapsis Struktur in SYSAUX Tablespace
– Sehr schnelles Erzeugen der globalen Statistiken ohne die komplette Tabelle zu
lesen
DBMS_STATS.SET_TABLE_PREFS(<OWNER>, <TABLE_NAME>, 'INCREMENTAL', TRUE);
• Inkrementelles Aktualisieren einschalten
DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>,
DEGREE=><DESIRED_DEGREE>);
• Initiales einmaliges Sammeln
DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>,
Partname=><SUBPARTITION_NAME>, GRANULARITY=>'SUBPARTITION', DEGREE=><DESIRED_DEGREE>);
• Inkrementelles Sammeln geschieht automatisch über
• EXEC DBMS_STATS.GATHER_TABLE_STATS(‚DWH1','UMSATZ');
90
Oracle Database Performance Tuning Guide 11g Release
2 / Chapter 13 - Managing Optimizer Statistics
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
http://download.oracle.com/docs/cd/E11882_01/server.112/e10821/stats.htm
DATA WAREHOUSE
Anwendung im DWH bei partitionierten Tabellen
• Globale Statistiken regelmäßig
sammeln
Partition Tag 1
Partition Tag 2
– Z. B. einmal im Monat
• Einschalten des ‚Incremental‘- Modus für die
entsprechende Tabelle:
Partition Tag 3
Partition Tag 4
Partition Tag 5
Partition Tag 7
Globale
tatistiken
Partition Tag 8
ETL
91
– EXEC DBMS_STATS.SET_TABLE_PREFS(‚DWH',‘UMSATZ,
'INCREMENTAL','TRUE');
Partition Tag 9
• Nach jedem Laden einer neuen Partition, die
Statistiken aktualisieren:
Partition Tag 10
– EXEC DBMS_STATS.GATHER_TABLE_STATS('DWH','UMSATZ');
Partition Tag n
Neu hinzugefügte
Partiton verfälscht
Statistiken
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Empfehlungen
• Dynamic Sampling auf einen höheren Wert setzen (z. B. 4)
• Bei großen pratitionierten Tabellen mit
„Inkrementellem Statistik-Sammeln“ arbeiten.
• Histogramme gezielt für Spalten mit ungleich verteilten Werten
verwenden, wenn sie oft abgefragt werden.
• Große Tabellen in dem Kontext des ETL-Prozesses aktualisieren
-> ETL-Gesamt-Konzept
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Komprimierung im Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Bedingungen im Data Warehouse  Kompressionskonzept
• Komprimierung besonders wichtig, da große Datenmengen
• Besonders grasser Unterschied zwischen
– Daten, die häufig gelesen werden  Sehr wenige
– Daten, die selten bis kaum gelesen werden  Sehr viele
• Lese- und Schreib-Operationen sind bestimmbar
– Massen-Schreibaktionen können explizit auch zum Komprimieren genutzt
werden
– Updates kommen seltener vor
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
94
Das Datenwachstum beherrschen
Komprimieren: Verwaltung und Kosten reduzieren
Kompressions Typ:
Einsatz für:
Faktor
Basic Compression
Read only Tabellen und Partitionen in Data Warehouse
Umgebungen oder “inaktive” Daten-Partitionen in OLTP
Umgebungen.
Aktive Tabellen und Partitionen in OLTP und Data Warehouse
Umgebungen.
Non-relational Daten in OLTP und Data Warehouse Umgebungen.
2-4
Index Compression
Indizes auf Tabellen in OLTP und Data Warehouse Umgebungen.
2
Backup Compression
Alle Umgebungen.
2
Hybrid Columnar
Compression –
Data Warehousing
Read only Tabellen und Partitionen in Data Warehouse
Umgebungen.
8-12
“Inaktive” Daten Partitionen in OLTP und Data Warehousing
Umgebungen.
10-40
OLTP Compression
SecureFiles Compression
Hybrid Columnar
Compression – Archival
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
2-4
2-4
DATA WAREHOUSE
95
Anwendung für Komprimierung
• Nicht nur für
– Indizes
– Strukturierte Daten in Tabellen
(bzw. Partitionen) mit DIRECT Load
• Mit Advanced Compression auch für
–
–
–
–
Unstrukturierte Datentypen (SecureFiles)
Konventionelles DML (OLTP Compression)
DataPump Daten und RMAN
Redo Traffic mit Data Guard
Redo Logs
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Standby
DATA WAREHOUSE
Backups
96
Tabellen-Komprimierung in 11g
• Komprimierungseinstellung durch
– CREATE TABLE beim Neuanlegen
– ALTER TABLE MOVE COMPRESS bei existierenden Daten
– ALTER TABLE MOVE PARTITION COMPRESS bei Partitionen
• Beispiel – Syntax
CREATE TABLE sales_history(…) COMPRESS FOR BASIC | OLTP
• Im Enterprise Manager
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
97
Hybrid Columnar Compression (HCC)
• Neue Kombination der Anordnung nach Spalten und Zeilen
 höhere Compression Ratio möglich
• Verschiedene Level
• Designed für Daten, die nicht häufig verändert werden
• Designed für Umgebungen mit Low Concurrency
• Komprimierung nur während Bulk Loads!
• Verfügbar für Storage wie Exadata, ZFS oder Pillar
Logical Compression Unit (CU)
BLOCK HEADER
BLOCK HEADER
BLOCK HEADER
BLOCK HEADER
CU HEADER
C1
C2
C3
C4
C5
C5
C6
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
C7
C8
DATA WAREHOUSE
Compression Advisor
Welchen Komprimierungsfaktor kann ich erwarten?
• Einsatz des Package DBMS_COMPRESSION ab 11gR2
• Ohne zusätzliche Installation
• Unterstützt partitionierte/nicht partitionierte Tabellen
• Funktionen:
– Erstellt temporäre Objekte um Komprimierungsratio zu berechnen
– Analysiert Zeilen auf Komprimierungstyp
– Einsatz auch für HCC Komprimierung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Syntaxänderung in 12c
• Änderungen für Basic, OLTP und HCC Compression
• BASIC
CREATE TABLE sales_history(…)
ROW STORE COMPRESS BASIC;
• OLTP
CREATE TABLE sales_history(…)
ROW STORE COMPRESS ADVANCED;
• Beispiel für HCC
CREATE TABLE sales_history(…)
COLUMN STORE COMPRESS FOR QUERY HIGH;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Erweiterungen in 12c
• Aufhebung des 255 Spalten Limits
• DBMS_COMPRESSION Advisor jetzt auch für Securefile LOBs
begin
DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
SCRATCHTBSNAME
=> 'USERS',
TABOWNER
=> 'SH',
TABNAME
=> 'BASIC_LOB',
LOBNAME
=> 'TEXT',
PARTNAME
=> '',
COMPTYPE
=> 128,
…
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Online Operationen in 12c
• Online Operationen für MOVE PARTITION
• Weniger Sperren
• Grundlage für ILM Operationen
• Beispiele
SQL> ALTER TABLE sales_big MOVE PARTITION sales_q4_2001
ROW STORE COMPRESS ADVANCED ONLINE;
SQL> ALTER TABLE sales_big MOVE PARTITION sales_q4_2001
TABLESPACE example ONLINE;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Zusammenfassung
• Anwendung der Komprimierung
– Bei Tabellen mit grösstem Speicherplatzverbrauch
• Speicherplatzeinsparung immer abhängig von
– den Daten und
– dem Ladevorgang
• Komprimierungsratio (Quotient aus unkomprimierten und komprimierten
Daten) variiert
• Bessere Ratio durch:
– Verwendung von größeren DB Blöcken
– Erhöhung der Daten-Redundanz z.B. durch Laden von sortierten Daten
• Daten werden erst in der SGA beim Zugriff entpackt -> Bessere
Ausnutzung von I/O
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Automatische Verwaltung von Daten im
Data Warehouse (Heat Map)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Automatic Data Optimization im Data Warehouse
Umsatzdaten
DISK
Sata/SAS
Juni 16
Flash / SSD
Juni 16
Mai 16
April 16
März 16
Februar 16
Januar 16
Dezember 15
In Memory
Mai 16
April 16
Eine
historisierte
Tabelle
verteilt sich
auf
März 16
Februar 16
Januar 16
Dezember 15
November 15
November 15
Oktober 15
Oktober 15
September 15
September 15
August 15
August 15
Juli15
Juli15
Juni 15
Juni 15
April 15
April 15
März 15
März 15
Februar 15
Februar 15
Automatisches
Verlagern über
die Zeit
Automatisches
Hervorholen
über die
Häufigkeit
der Verwendung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
105
Automatisiertes Information Life Cycle Management (ILM)
• Regelgesteuertes Verfahren zur physikalischen Datenverwaltung
• Automatisierte Heatmaps sammelt
– Änderungs- und Lesevorgänge
– Auf Block- und Segmentlevel
• Automatic Data Optimization (ADO)
– Bewegt und komprimiert auf der Basis von Regeln
– Steuerung entweder über Heatmap oder selbsterstellte Prozeduren
• Ausnutzen von Partitioning und Komprimierung
• Steuern über
SQL> ALTER SYSTEM SET heat_map = 'ON';
SQL> ALTER SESSION SET heat_map = 'ON';
SQL> ALTER SYSTEM SET heat_map = 'OFF';
SQL> ALTER SESSION SET heat_map = 'OFF';
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
106
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
107
Automatisches Komprimieren wenn x-Tage nicht genutzt
• Steuerung auf Segment und Block-Ebene
(Segmente: Tabellen, Partitionen, Materialized Views, Indexe)
• Automatisiertes Steuern von Komprimieren
– über die Heatmaps und zeitliche Verläufe
– über Füllgrade von Tablespaces
• Automatic Data Optimization (ADO)
– Bewegt und komprimiert auf der Basis von Regeln
– Steuerung entweder über Heatmap oder
selbsterstellte Prozeduren
ALTER TABLE orders ILM ADD POLICY
ROW STORE COMPRESS
ADVANCED SEGMENT
AFTER 30 DAYS OF NO MODIFICATION;
ALTER TABLE orders ILM ADD POLICY
COLUMN STORE COMPRESS
FOR QUERY HIGH SEGMENT
AFTER 90 DAYS OF NO MODIFICATION;
• Ausnutzen von Partitioning und Komprimierung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Oracle Confidential
–
108
Automatisches Verschieben wenn Füllgrad erreicht
BEGIN
DBMS_ILM_ADMIN.CUSTOMIZE_ILM(DBMS_ILM_ADMIN.TBS_PERCENT_USED, 85):
DBMS_ILM_ADMIN.CUSTOMIZE_ILM(DBMS_ILM_ADMIN.TBS_PERCENT_FREE, 25):
END;
Juni 16
?
Mai 16
April 16
März 16
Februar 16
Januar 16
ALTER TABLE orders ILM ADD POLICY
COLUMN STORE COMPRESS
FOR QUERY HIGH SEGMENT
AFTER 30 DAYS OF NO MODIFICATION;
Tablespace
(datafile)
COLD
Tablespace
(datafile)
NORMAL
Wenn Tablespace
NORMAL zu 85% gefüllt,
dann automatisches
Verschieben der
„kältesten“ Partition
nach COLD
ALTER TABLE orders ILM ADD POLICY
COLUMN STORE COMPRESS
FOR ARCHIVE HIGH SEGMENT
AFTER 90 DAYS OF NO MODIFICATION;
ALTER TABLE orders ILM ADD POLICY
tier to low_cost_store;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
109
Automatic Data Optimization und In-Memory
• Zeitabhängiges Automatisches Komprimieren
von Im-Memory-Tabellen
• Zeitabhängiges Entfernen von Tabellen aus dem
In-Memory-Column-Store
• Steuern der In-Memory-Fähigkeit
über eine programmierte
Funktion
ALTER TABLE sales ilm ADD policy
MODIFY INMEMORY memcompress
FOR query high AFTER 3 days OF
No modification
ALTER TABLE sales ilm ADD policy
NO INMEMORY SEGMENT
AFTER 30 days OF no ACCESS;
CREATE OR REPLACE FUNCTION custom_im_ado (objn IN NUMBER)
RETURN BOOLEAN ;
ALTER TABLE sales ilm ADD policy
NO INMEMORY SEGMENT ON
custom_im_ado;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
110
Heat Map für Tabellen und Partitionen
“Row” Level Tracking
Auf Block-Ebene
Abfrage über DBMS_HEAT_MAP
“Segment” Level Tracking
Auf Tabellen-Ebene.
Abfrage über
DBA_HEAT_MAP_SEG_HISTOGRAM
TABLESPACE
FNO
BLOCK_ID WRITETIME
---------- ---------- ---------- --------------USERS
6
347 25.06.2013 14:45
USERS
6
348 25.06.2013 14:45
USERS
6
349 25.06.2013 14:45
USERS
6
350 25.06.2013 14:45
USERS
6
351 25.06.2013 14:45
…
OWNER
---------SH
SCOTT
SCOTT
SCOTT
SCOTT
SCOTT
SCOTT
OBJECT_NAME
----------------------CUSTOMERS_PK
DEPT
EMP
EMP
EMP
PK_EMP
PK_EMP
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
TRACK_TIME
---------------25.06.2013 22:48
25.06.2013 12:48
26.06.2013 12:30
25.06.2013 12:48
24.06.2013 11:47
26.06.2013 22:30
25.06.2013 22:48
WRI
--NO
NO
YES
NO
NO
NO
NO
FUL
--NO
YES
YES
YES
YES
NO
NO
DATA WAREHOUSE
LOO
-YES
NO
NO
NO
NO
YES
YES
111
Parallelisierung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
112
Parallelisierung
• Verteilung von Lese-/Schreiboperationen auf mehrere Prozesse:
Parallel 2 -> i. d. R. Halbierung der Wartezeit…
Parallel 4 -> i. d. R. Drittelung der Wartezeit…
• Limitierende Faktoren
– IO-Leistung des Plattensystems
– Anzahl Cores in den CPUs
– Größe des Hauptspeichers
– Anzahl Benutzer an dem System
• Automatisierte Steuerung der Parallelisierung durch das System
• In-Memory nutzt die Parallelisierung besonders gut (keine IO-Limitierung)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA
DATAWAREHOUSE
WAREHOUSE
Parallele Ausführung
• Ressourcen
– Parallel Execution Query Coordinator (QC)
– Parallel Execution Server Pool (PS)
– Messages
• Einteilung der Arbeitsmenge in kleinere Einheiten (Granules)
• Partitionen von Tabellen oder Indizes können diese Granules bilden
• Erfahrungswerte:
– Datenobjekte < 200 MB sollten keine Parallelisierung nutzen
– Objekte < 200 MB > 5 GB = Parallelisierungsgrad (DOP) 4
– Objekte > 5 GB = DOP 32
 Angaben variieren nach Systemauslastung und Hardware Konfiguration
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
114
SQL Parallel Execution Plan
SELECT c.cust_name, s.purchase_date, s.amount
FROM sales s, customers c
WHERE s.cust_id = c.cust_id;
Query Coordinator
ID
Operation
0
SELECT STATEMENT
1
PX COORDINATOR
2
PX SEND QC {RANDOM}
3
4
Name
HASH JOIN
PX RECEIVE
TQ
IN-OUT
Q1,01
P->S
Q1,01
PCWP
Q1,01
PCWP
5
PX SEND BROADCAST
Q1,01
P->P
6
PX BLOCK ITERATOR
Q1,01
PCWP
Q1,01
PCWP
Q1,01
PCWP
Q1,01
PCWP
7
8
9
TABLE ACCESS FULL
CUSTOMERS
PX BLOCK ITERATOR
TABLE ACCESS FULL
SALES
PQ Distribution
BROADCAST
Parallel Server leisten die Hauptarbeit
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
115
Execution Plan
ID
Operation
0
SELECT STATEMENT
1
PX COORDINATOR
2
PX SEND QC (RANDOM)
“Partition Hash All” über dem Join &
Einfaches PQ Set bezeichnet Partition-wise Join
Name
Pstart
Pstop
:TQ10001
TQ
PQ Distrib
Q1,01
QC (RAND)
3
SORT GROUP BY
Q1,01
4
PX RECEIVE
Q1,01
5
PX SEND HASH
6
SORT GROUP BY
7
8
9
10
:TQ10000
Q1,00
HASH
Q1,00
PX PARTITION HASH ALL
1
128
HASH JOIN
Q1,00
Q1,00
TABLE ACCESS FULL
Customers
1
128
Q1,00
TABLE ACCESS FULL
Sales
1
128
Q1,00
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
116
Parallelisierung und Skalierung
• Parallelisierbare Operationen
serial
• Abfragen
–
–
–
–
100%
– CREATE TABLE/MV
– CREATE INDEX
– Online Index Rebuild
I/O
CPU
I/O
SQL
SELECT
Join Operationen
Sort Operationen
GROUP BY
• DDL
CPU
50%
parallel
100%
SQL
50%
• DML
– INSERT
– UPDATE / DELETE
– MOVE / SPLIT PARTITION
Ein SQL Statement wird vom Optimizer in kleinere
Arbeitsschritte aufgeteilt und läuft skalierbar ab
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
117
Steuerung der Parallelität mit “Degree of Parallelism” (DOP)
• Automatic Degree of Parallelism
– PARALLEL_DEGREE_POLICY = AUTO
• Degree of Parallelism manuell festlegen
– ALTER TABLE sales PARALLEL 8;
– ALTER TABLE customers PARALLEL 4;
• Default Parallelism
– ALTER TABLE sales PARALLEL;
SI : DOP =
PARALLEL_THREADS_PER_CPU x CPU_COUNT
RAC: DOP =
PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
119
Parallel Degree Policy
Ausführungsplan
---------------------------------------------------------Plan hash value: 4226669230
----------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
----------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
7 |
371 | 81975
(9)| 00:00:03 |
|
1 | VIEW
|
|
7 |
371 | 81975
(9)| 00:00:03 |
|
2 |
WINDOW SORT
|
|
7 |
196 | 81975
(9)| 00:00:03 |
|
3 |
HASH GROUP BY
|
|
7 |
196 | 81975
(9)| 00:00:03 |
|* 4 |
HASH JOIN
|
|
51M| 1367M| 76249
(2)| 00:00:03 |
|
5 |
TABLE ACCESS FULL| D_ARTIKEL |
129 | 2709 |
3
(0)| 00:00:01 |
|
6 |
TABLE ACCESS FULL| F_UMSATZ |
51M|
341M| 75998
(2)| 00:00:03 |
----------------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------4 - access("U"."ARTIKEL_ID"="A"."ARTIKEL_ID")
Note
----- automatic DOP: Computed Degree of Parallelism is 1
Note
----- automatic DOP: skipped because of IO calibrate statistics are missing
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
120
Wie geht das System bei der Festlegung des automatischen
Parallelisierungsgrad vor
SQL
Statement
Statement wird geparsed
Optimizer ermittelt den
Execution Plan
Geschätzte Ausführung
dauert länger als
Schwellwert
Optimizer bestimmt den
idealen DOP
PARALLEL_MIN_TIME_THRESHOLD
(default =10s)
Tatsächlicher DOP = MIN(PARALLEL_DEGREE_LIMIT, idealer DOP)
Geschätzte
Ausführung dauert
nicht länger als
Schwellwert
Statement wird
seriell ausgeführt
PARALLEL_DEGREE_LIMIT
(default =CPU)
Statement wird parallel
ausgeführt
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
121
Wie funktioniert das “Parallel Statement Queuing”
SQL
Statements
Wenn zu wenig Parallel
Server vorhanden sind,
landet das
Statement wird geparsed
Oracle ermittelt automatisch
den DOP
64
32
64
16
32
128
16
FIFO Queue
Wenn wieder genügend
Parallel Server vorhanden
sind, wird erste Statement
aus der Queue geholt und
ausgeführt
Wenn genügend Parallel Server
vorhanden sind, wird das
Statement sofort ausgeführt
8
128
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
122
Parameter für Parallel Query
• Oracle V11.2.0.1
• Oracle V12.1.0.1
• Parameter
• Neue Parameter
– parallel_degree_limit = 'CPU'
– parallel_degree_policy = MANUAL
– parallel_force_local = FALSE
– parallel_min_time_threshold = AUTO
– parallel_servers_target = 8
(CPU|IO|integer)
(MANUAL|
LIMITED|AUTO)
(FALSE|TRUE)
(AUTO|integer)
(0 - max_servers)
• Parameter
–
–
–
–
–
–
–
parallel_adaptive_multi_user = TRUE
parallel_execution_message_size = 2148
parallel_instance_group = ' '
parallel_max_servers = 20
parallel_min_percent = 0
parallel_min_servers = 0
parallel_threads_per_cpu = 2
(TRUE|FALSE)
(2148 – 65535)
()
(0 - 3600) pro Instanz
(1 - 100) %
(0 - max_servers)
(1 - 4|8) pro core
• Veraltete Parameter
– parallel_automatic_tuning = FALSE
– parallel_io_cap_enabled = FALSE
– parallel_degree_limit = 'CPU‚
– parallel_degree_policy = MANUAL
–
–
–
–
–
–
–
–
–
–
parallel_force_local = FALSE
parallel_min_time_threshold = AUTO
parallel_servers_target = 8
parallel_adaptive_multi_user = TRUE
parallel_execution_message_size = 2148
parallel_instance_group = ' '
parallel_max_servers = 20
parallel_min_percent = 0
parallel_min_servers = 0
parallel_threads_per_cpu = 2
(CPU|IO|integer)
(MANUAL|LIMITED|
AUTO|ADAPTIVE)
(FALSE|TRUE)
(AUTO|integer)
(0 - max_servers)
(TRUE|FALSE)
(2148 – 65535)
()
(0 - 3600) pro Instanz
(1 - 100) %
0 - max_servers)
(1 - 4|8) pro core
• Veraltete Parameter
– parallel_automatic_tuning = FALSE
– parallel_io_cap_enabled = FALSE
(FALSE|TRUE)
(FALSE|TRUE)
(FALSE|TRUE)
(FALSE|TRUE)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
123
Query Result Cache
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
124
Konzept und Einsatz des Result Cache
• Eigener Cache im Shared Pool
• Keine Installation notwendig
• Automatischer Refresh bei Datenänderungen
• Einfaches Setup und Monitoring der Cache-Nutzung
• Der Query Result Cache ist anwendbar für
– SQL-Abfragen
– PL/SQL-Funktionen
125
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Implementierung und Nutzung
• Anwendung steuerbar über Initialisierungsparameter
RESULT_CACHE_MODE
• Falls RESULT_CACHE_MODE=MANUAL gesetzt ist, dann einen Hint im
Statement einfügen wie z.B.
SELECT /*+ result_cache */ count(*) FROM sales
• Falls RESULT_CACHE_MODE=FORCE gesetzt ist, dann erfolgt ein
automatisches Einfügen des Hints im Root-SELECT
SELECT count(*) FROM sales
126
...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Parameter zum Result Cache
RESULT_CACHE_MAX_RESULT
RESULT_CACHE_MAX_SIZE
RESULT_CACHE_MODE
RESULT_CACHE_REMOTE_EXPIRATION
5 (%)
abhängig vom OS
MANUAL/FORCE
0 (min)
• RESULT_CACHE_MAX_SIZE: Gesamtgröße des reservierten Bereichs für den Result Cache im Shared Pool
• RESULT_CACHE_MAX_RESULT: Prozentualer Anteil am gesamten Result Cache für die einzelnen
Ergebnisse
• RESULT_CACHE_REMOTE_EXPIRATION: Zeitdauer bei Remote Objekt-Nutzung, wie lange das Resultat in
Minuten im Cache verbleibt
127
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel mit Hints
SQL> SELECT /*+ result_cache */ COUNT(*), SUM(salary)
FROM hr.bigemp group by department_id
ORDER BY department_id;
...
------------------------------------------------------------------------------------------------| Id
| Operation
| Name
| Rows
| Bytes | Cost (%CPU)| Time
------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
1 |
| 91myw5c1bud0mcn64g3d0ykdhm |
|
2 |
|
3 |
RESULT CACHE
SORT GROUP BY
|
TABLE ACCESS FULL| BIGEMP
|
11 |
55 |
2229
(2)| 00:00:34
|
|
|
11 |
55 |
2229
(2)| 00:00:34
|
|
876K|
4280K|
2201
(1)| 00:00:34
Statistics
----------------------------------------------------------------------------0
recursive calls
0
db block gets
0
consistent gets
0
physical reads
0
redo size
696
bytes sent via SQL*Net to client
419
bytes received via SQL*Net from client
2
SQL*Net roundtrips to/from client
0
sorts (memory)
0
sorts (disk)
12
128
rows processed
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
V$RESULT_CACHE_OBJECTS
SQL> SELECT name, type, row_count, invalidations, scan_count
FROM v$result_cache_objects;
NAME
TYPE
ROW_COUNT INVALIDATIONS SCAN_COUNT
-------------------- ---------- ---------- ------------- ---------HR.GET_DATUM
Dependency
0
0
0
SCOTT.EMP
Dependency
0
0
0
HR.BIGEMP
Dependency
0
1
0
1
0
1
12
0
4
"HR"."GET_DATUM"::8. Result
"GET_DATUM"#27dda668
fe0cf492 #1
SELECT /*+ result_ca Result
che */ COUNT(*),
SUM(salary)
FROM hr.bigemp group
by department_id OR
DER BY department
129
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Flexibilisierung und Effizienz
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
130
Wo Flexibilität fehlt: Fälle aus der alltäglichen Praxis
• Schichtenmodell ist Blaupause für
Verantwortlichkeiten -> Hoheitsgebiete
Integration
Layer
– Teure Abstimmprozesse und Formalismus
– Fehlende Spontanität für pragmatische Lösungen
– Zu starr und langsam bei der Umsetzung neuer
Informations-Bedarfe
Enterprise Layer
Core - DWH / Info Pool
DWHAdmin
User View
Layer
User View
Layer
User View
Layer
Fach
Anwender
• Fehlendes zentrale Schicht
– Viele Redundanzen, wenig Wiederverwendung
– fehlende Synchronisation bei zusammenhängenden
Themen -> nicht stimmige Daten
– Fehlende sachgebietsübergreifende
Breite beim Informationsangebot
– Daten müssen immer wieder aus den Vorsystemen
geholt werden -> Zeitaufwand
Integration
Warehouse
DWHAdmin
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
User View
Layer
?
User View
Layer
User View
Layer
Fach
Anwender
DATA WAREHOUSE
Möglichkeiten / Maßnahmen zur Flexibilisierung
• Architekturen
– Virtualisierung der Data Marts
– Fließende Übergänge zwischen Enterprise- und User View-Layer
– Wegfall von separaten BI-Schichten, außerhalb des Data Warehouse
– Standardisierte Kennzahlen-Festlegung bereits im Enterprise-Layer
• Organisatorisch
– Zugriff von Endbenutzern auf zentrale Schicht
– Regelmäßige Informationsbedarfserhebung und Abstimmung zwischen IT und
Benutzergruppen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
132
Analysen vorwegnehmen / Kennzahlen standardisieren
• 50 – 80% aller Benutzerabfragen, Analysen, Kennzahlen sind vorhersehbar
• Vorhersehbare Informationsbedarfe sollten mittels eines Konzeptes
vorbereitet werden
• Dazu sind keine weiteren Tools nötig
• Hilfsmittel
– Analytische Funktionen
– Pattern-Analyse
– Kennzahlensysteme / Materialized Views
– R-Analysen / Mining-Modelle
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Oracle Confidential
–
133
Betriebliche Kennzahlen...
• ...messen betriebliche Vorgänge
• ...beurteilen Sachverhalte
• ...reduzieren Komplexität durch kurze
und prägnante Darstellung
• ...können Ziele festlegen
Kennzahlen verdichten Informationen.
Sie machen Sachverhalte sichtbar, die
In den üblichen Betriebsdaten
schwer erkennbar sind
• ...legen kritische Erfolgsfaktoren fest
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
134
Konzepte rund um Kennzahlen
• Abstimmung mit Fachanwendern
• Publizierbare Definition
• Metadatenartige Beschreibung von Kennzahlen
• Im Schichten Kennzahlen so früh wie möglich berechnen
• Keine Abhängigkeiten von flüchtigen Strukturen schaffen
– Z. B Auswertemodelle, die einem permanenten Wechsel unterliegen
• Auf Standardisierung achten
• Auf Wiederverwendung achten
• Kennzahlen in granularisierbare Teilinformationen zergliedern
– Granulare Teile hierarchisieren
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beschreibungsmerkmale „Kennzahl“
• Name
• Synonym
• Messwertvariante
– Absolute Größe
– Referenz -> KENNZAHL
– Verhältniswert
– Referenz -> GLOSSAR
– Gliederungszahl (Bsp. Eigenkapital ist Teil von Gesamtkapital)
– Beziehungszahl (Verhältnis von 2 Werten untereinander)
– Indexzahl (Gleichartige Größen in zeitlich oder räumlich
getrennten Bereichen. Z. B. Veränderung im Vergleich zum Vorjahr)
• Bereich: Standardwerte z. B.
- Finanzielle Ergebnisse
- Qualität von etwas (Produkt/Service)
- Ablauf, Fortschritt von etwas (Prozess)
- Leistungsfähigkeit von etwas
• Geschäftsprozess
– Richtwert / Orientierungsgröße
•
Quelldaten (Text, Ursprung der Daten)
•
Verwendete Größen
- Referenz -> PROZESS
•
•
•
•
•
•
•
Definition (Text)
Beschreibung (Text)
Ziel / Zweck (Text)
Zielgruppe [Abteilung, MA, Rolle]
Aktualisierungsfrequenz (Zeitangabe)
Maßeinheit [%, Wertgröße, Zeit]
Rechen-/Herleitungsregel
Referenz -> COLUMN/ATTRIBUT
•
Regel / Referenz -> RULE
•
Org-Level [Top, Mittel, operativ]
•
Zeitmaß [Jahr , Quartal, Monat, Woche, Tag]
• Historie [Vergangenheit, Aktuell, Zukunft]
• Hierarchieposition
- Referenz SUB_von -> KENNZAHL
- Referenz TOP_von -> KENNZAHL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
136
Wo wird „vorbereitet“
Service
Integration
Layer
Servicekunde
Logistik
Logistikaufwand
Profitabilität
Produkte&Trends
Vertrieb
Kundenhistorie
Marketing
Marketingsicht
R S S S
B
T
T
B
Einkauf
Core - DWH / Info Pool
R
T
Controlling
Enterprise Layer
B
B
B
D
B
Strategische
Daten
• Kennzahlen so
früh wie möglich
User View
Layer
D
F
D
D
F
D
D
D
F
D
Taktische
Daten
Kennzahlen
Vorberechnungen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
• Keine Abhängigkeiten von
flüchtigen
Strukturen
schaffen
• Auf
Standardisierung
achten
• Auf Wiederverwendung
achten
DATA WAREHOUSE
Dimensions-Level bereits im Kernmodell vorsehen
Konzeptionelles
Sicht
Produktart
Alle Produkte
Alle Produkte
Liefereinheit
Liefereinheit
Verladeeinheit
Artikelsparten
Verladeeinheit
Vermittlungsart
Segment
Produktart
Artikelgruppen
Artikelsparten
Gebinde
Vermittlungsart
Artikel
Segment
Modellsicht Enterprise Layer
Artikelgruppen
Gebinde
Materialized
View
Create Materialized View …. AS SELECT
a.artikel_name Artikel,
sum(u.umsatz) umsatz_pro_Artikel,
FROM f_Umsatz_2014 U, D_artikel a
WHERE U.artikel_id = a.artikel_id
group by a.artikel_name
Artikel
Umsatz
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Der Anwender fragt
immer anders, als man
denkt.
Macht aber nichts.
Die Wünsche werden
trotzdem erfüllt.
Select
sum(UMSATZ) ,
Produktart
from
F_UMSATZ, D_Artikel
Group by
Produktart;
DATA WAREHOUSE
138
Mv_EA_Finanz_Kum_Gruppe_Monat
Level 4
Produktgruppen-Sicht
Hierarchisierung
von Kenzahlen
Finanz-Sicht / Berechnungen
Level 3
LFD_Bestands_Wert / Produkt / Monat
LFD_Saldo / Produkt / Monat
Kumulierter EK / Produkt
Kumulierter VK / Produkt
Kumuliertes Saldo
Mv_EA_Finanz_Kum_Monat
Jahres-Sicht
Bestands-/Lager-Sicht / Berechnungen
Mav_Einkauf_Verkauf_Diff_Jahr
LFD_Bestands_Menge / Produkt / Monat
VK_Menge / Produkt / Monat
EK_Menge / Produkt / Monat
Kumulierte EK Menge / Produkt
Kumulierte VK Menge / Produkt
Mv_EA_Menge_Kum_Monat
Level 2
Mav_Produkt_Monat_einkaeufe
F_EINKAEUFE
Level 1
Mav_Produkt_Monat_Verkaeufe
F_POSITION
F_KAUF
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
EA: Einkauf/Verkauf
Kum: kumuliert
DATA WAREHOUSE
Der Weg in die BI-Tools
So viel wie möglich in der DB
vorbereiten
•
Wiederverwenden von
bereits berechneten
Kennzahlen
•
Verhindert unnötiges
Kopieren
•
Keine Verlagerung von
Pseudo-ETL in die BI-Tools
•
Standardisierte Kennzahlen
•
Abfragen werden gruppiert
User View Layer
So
Millionen von Sätzen
User View Layer
Oder so
BI-Tool Server + Caches
•
WenigeSätze
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Materialized Views und Kennzahlenkonzepte
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
141
Materialized Views optimieren Zugriffe
D_REGION
(Dimension)
F_UMSATZ
(Fakten)
KANAL_ID
FK
KUNDEN_ID FK
ZEIT_ID
FK
REGION_ID
FK
ARTIKEL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑹𝒆𝒈𝒊𝒐𝒏
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑳𝒂𝒏𝒅
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑲𝒓𝒆𝒊𝒔
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑶𝒓𝒕
REGIONNR
REGION
LANDNR
LAND
KREISNR
KREIS
ORTNR
ORT
REGION_ID
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑹𝒆𝒈𝒊𝒐𝒏 𝒑𝒓𝒐 𝑨𝒓𝒕𝒊𝒌𝒆𝒍
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑳𝒂𝒏𝒅 𝒑𝒓𝒐 𝑨𝒓𝒕𝒊𝒌𝒆𝒍
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑹𝒆𝒈𝒊𝒐𝒏 𝒑𝒓𝒐 𝑮𝒓𝒖𝒑𝒑𝒆
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑲𝒓𝒆𝒊𝒔 𝒑𝒓𝒐 𝑨𝒓𝒕𝒊𝒌𝒆𝒍
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑳𝒂𝒏𝒅 𝒑𝒓𝒐 Gruppe
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐
𝑶𝒓𝒕 𝒑𝒓𝒐
𝑼𝒎𝒔𝒂𝒕𝒛
𝒑𝒓𝒐𝑨𝒓𝒕𝒊𝒌𝒆𝒍
𝑹𝒆𝒈𝒊𝒐𝒏 𝒑𝒓𝒐 𝑺𝒑𝒂𝒓𝒕𝒆
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑲𝒓𝒆𝒊𝒔 𝒑𝒓𝒐 𝑮𝒓𝒖𝒑𝒑𝒆
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑳𝒂𝒏𝒅 𝒑𝒓𝒐 Sparte
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑶𝒓𝒕 𝒑𝒓𝒐 𝑮𝒓𝒖𝒑𝒑𝒆
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑲𝒓𝒆𝒊𝒔 𝒑𝒓𝒐 𝑺𝒑𝒂𝒓𝒕𝒆
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑶𝒓𝒕 𝒑𝒓𝒐 𝑺𝒑𝒂𝒓𝒕𝒆
MAV
D_ARTIKEL
(Dimension)
ARTIKEL_ID
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
MAV
MAV
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑨𝒓𝒕𝒊𝒌𝒆𝒍
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑮𝒓𝒖𝒑𝒑𝒆
𝑼𝒎𝒔𝒂𝒕𝒛 𝒑𝒓𝒐 𝑺𝒑𝒂𝒓𝒕𝒆
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Zugriffspfade planen
• Abdecken von allen benötigten Join-Optionen
• Immer nur zwischen den untersten Leveln
einer Dimension und der Fakten-Tabellen
MAV
MAV
MAV
D
D
MAV
MAV
MAV
F
MAV
D
MAV
MAV
MAV
Sprechende Name
143
MAV
D
MAV
Übersichtliche Darstellung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Prinzip und Aufgabenstellung - Summentabellen
Basistabelle
Summentabelle
Complete Refresh
Incremental Refresh
?
Änderungen
144
stale
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Aufgaben der Materialized Views (MAVs)
• Erleichtern das Management von Summentabellen
– Wegfall von Erstellungsprozeduren
– Einfache Steuerung des Zeitpunktes zur Aktualisierung
– Eventuell Beschleunigung der Aktualisierung
(inkrementelles Refresh)
• Abfrage-Performance optimieren
• Variable Kennzahlensysteme aufbauen
– Mehrstufige MAVs
• Abfragegruppen zusammenfassen (Kategorisierung)
– Geschäftsobjekt-bezogene MAVs
145
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
MAV-Erstellung und erstmaliges Füllen
• Parameter des create Befehles I/II:
• BUILD IMMEDIATE (direkt bei der Erstellung, default)
– Problematisch bei großen Basistabellen und im Rahmen von Entwicklung / Test
• BUILD DEFERRED (Erstellung beim ersten Refresh)
– Sinnvoll bei erster Überführung neuer MAV-Definitionen in die
Produktionsumgebung
• ON PREBUILD
– Sinnvoll, wenn es separate Erstellungroutinen gibt, die ihr Ergebnis nur in einer
Tabelle ablegen können, man aber die Rewrite-Vorteile der MAVs nutzen will
– Kopie von normalen Views (analog zum vorigen Punkt)
146
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Refresh-Funktionen
• Parameter des create Befehles II/II:
• Refresh wie:
• COMPLETE
– Immer vollständiges Neuladen aus den
Basistabellen
• FAST (inkrementell)
– Nur bei vorhandenem MAV Log auf der
Basistabelle
• FORCE (inkrementell oder komplett,
default)
• NEVER
– Vorhalten historischer Bestände
oder bei separater Prozedur
• Refresh wann :
• ON COMMIT (oft bei OLTP)
– Commit einer Transaktion auf der
Basistabelle
• ON DEMAND (sinnvoll im DWH,
default)
– Je nach der zu erwartenden Refresh-Dauer
147
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Star Schema zum Testen
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
D_REGION
REGION_ID
ORT_ID
ORT_NAME
KREIS_ID
KREIS_NUMMER
KREIS_NAME
LAND_NAME
LAND_ID
LAND_NUMMER
REGION_NAME
REGION_NUMMER
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
D_KUNDE
KUNDEN_ID
VORNAME
NACHNAME
GEBDAT
BRANCHE
WOHNART
KUNDENART
BILDUNG
EINKOMMENSGRUPPE
ORTNR
BERUFSGRUPPE
STATUS
BERUFSGRUPPEN_NR
BILDUNGS_NR
EINKOMMENS_NR
WOHNART_NR
PLZ
ORT
DATA WAREHOUSE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
148
Beispiel einer Materialized View
CREATE MATERIALIZED VIEW MV_Standard
BUILD IMMEDIATE
REFRESH COMPLETE
ON DEMAND
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer
Jahr,
z.monat_desc
Monat,
sum(u.umsatz)
Summe,
a.artikel_id
ID,
count(u.umsatz)
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc, a.artikel_id;
149
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Data Dictionary Views für MAVs
• Weitreichende Informationen über Zustand der MAVs und ihrer
dazugehörigen Basistabellen
– ALL_MVIEWS
– DBA_MVIEWS
– USER_MVIEWS
– USER_MVIEW_DETAIL_RELATIONS
– USER_MVIEW_DETAIL_SUBPARTITION
• Mit 11g wurde der Detailgrad in diesen Views erhöht, vor allem bei
partitionierten Tabellen (Staleness etc.)
150
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Testen und Ablaufbedingungen für MAV
set autotrace on;
-- Anzeige des Ausführungsplans
show parameter query
query_rewrite_enabled
query_rewrite_integrity
TRUE
STALE_TOLERATED
-----
erlaubt das Query Rewrite
erlaubt Query Rewrite, auch wenn
die Daten in der Basistabelle
nicht mehr aktuell sind
query_rewrite_integrity
TRUSTED
-----
auch deklarierte
Basis-Informantionen gelten
als korrekt (z. B. Views oder
prebuild)
query_rewrite_integrity
ENFORCED
-- Daten müssen stimmen
-- Ändern der Parameter mit
ALTER SESSION SET query_rewrite_enabled=TRUE;
ALTER SESSION SET query_rewrite_enabled=FALSE;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Automatische Aktualisierung DBMS_MVIEW (Refresh-Funktionen)
Aufeinander
Aufbauende
M-Views
• Refresh-Funktionen
– DBMS_MVIEW.REFRESH()
Umsatz Prod. Gr und Jahr
– DBMS_MVIEW.REFRESH_ALL_MVIEW()
SUM/Jahr
U Prod.A
U Prod B
SUM/Monat
JOIN
BasisTabellen
– DBMS_MVIEW.REFRESH_DEPENDENT()
D_Zeit
FAKT
D_PROD
• Refresh-Methoden (optional)
• COMPLETE (C)
• FAST
(F)
• FORCE (default)
(?)
• PARTITIONED(P)
• Transaktionsverhalten (optional)
• ATOMIC_REFRESH
• REFRESH_AFTER_ERRORS
• NESTED
Bsp.: EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD‘,'C');
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Automatische Aktualisierung DBMS_MVIEW (Refresh-Funktionen)
• ATOMIC_REFRESH => TRUE | FALSE
– Refresh vollzieht sich in einer Transaktion
– Im Fehlerfall wird die Transaktion zurückgerollt
• REFRESH_AFTER_ERRORS => TRUE | FALSE
– Refresh von mehreren Materialized Views läuft weiter bzw. bricht ab, wenn bei einer MAV ein
Fehler aufgetreten ist
• NESTED
– Eine Materialized View und alle von ihr abhängigen MAVs werden aktualisiert
EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD‘,'C');
EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD',atomic_refresh=>TRUE);
EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD',atomic_refresh=>TRUE,
nested => TRUE);
EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD',nested=>TRUE);
153
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Out-of-place Refresh
• Refresh wird in separater Tabelle / Partition durchgeführt und nach Abschluss
„geswitcht“
• Bessere Online-Verfügbarkeit
• Höhere Refresh-Performance
• Ist für alle Refresh-Varianten möglich
•
•
•
•
COMPLETE
FAST
FORCE (default)
PARTITIONED
(C)
(F)
(?)
(P)
DBMS_MVIEW.REFRESH(‘MV_MONATS_KALULATION', method => '?',
atomic_refresh => FALSE, out_of_place => TRUE);
154
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Fast Refresh-Varianten
Aktualisierung über MAV Logs
MAV1
MAV2
Aktualisierung über Partition Change Tracking
(PCT)
MAV3
komplett
Partition 1
MAV1
Partition 2
MAV2
Partition 3
Partition 4
inkrementell
Partition 5
Partition 6
MAV Log
155
Basistabelle
Basistabelle
• WITH ROWID
• Join Dependency Expression
• SEQUENCE
• Partition Key
• INCLUDING NEW VALUES
• Partition Marker
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Fast Refresh mit MAV Log
--- MAV Log auf Tabelle D_Artikel
DROP MATERIALIZED VIEW LOG ON d_artikel;
CREATE MATERIALIZED VIEW LOG ON d_artikel
WITH ROWID, SEQUENCE
(dimension_key, nummer, artikel_name, artikel_id, gruppe_nr, gruppe_name,
sparte_name, sparte_nr)
INCLUDING NEW VALUES;
--- MAV Log auf Tabelle D_Zeit
DROP MATERIALIZED VIEW LOG ON d_zeit;
CREATE MATERIALIZED VIEW LOG ON d_zeit
WITH ROWID, SEQUENCE
(datum_id, datum_desc, tag_des_monats, tag_des_jahres, woche_des_jahres, monats_nummer,
monat_desc, quartals_nummer, jahr_nummer)
INCLUDING NEW VALUES;
--- MAV Log auf Tabelle F_Umsatz
DROP MATERIALIZED VIEW LOG ON f_umsatz;
CREATE MATERIALIZED VIEW LOG ON f_umsatz
WITH ROWID, SEQUENCE
(umsatz, menge, umsatz_nach_rabatt, rabatt_wert_firmenkunde,
Rabatt_wert_privatkunde, bestell_datum, artikel_id, kunde_id, region_id, zeit_id)
INCLUDING NEW VALUES;
156
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Fast Refresh mit MAV Log
CREATE MATERIALIZED VIEW MV_Standard_Fast_Refresh
BUILD IMMEDIATE
REFRESH FAST
ON DEMAND
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe,
a.artikel_id ID, count(u.umsatz)
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
SQL> SELECT mview_name, update_log, stale_since, staleness
GROUP BY
2 FROM user_mviews where mview_name = 'MV_STANDARD_FAST_REFRESH';
z.jahr_nummer,
MVIEW_NAME
UPDATE_LOG
STALE_SI
STALENESS
z.monat_desc,
------------------------------ ------------------------------ ------------a.artikel_id;
-MV_STANDARD_FAST_REFRESH
FRESH
157
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
PCT Refresh mit Partition Key
• Der Partitioning Key der Basistabelle ist in dem SELECT- und eventuell in dem
GROUP BY-Teil, aber nicht in der WHERE-Klausel der MAV enthalten
• Führt zur Aggregierung
auf der Ebene des
Partitioning Keys
• Höhere Datenmenge als
ohne PCT
SQL> SELECT count(*)
2 FROM MV_Standard_PCT_Richtig;
COUNT(*)
---------41492
158
CREATE MATERIALIZED VIEW
MV_Standard_PCT_Richtig
AS SELECT
u.bestell_datum,
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz_Par u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
u.bestell_datum, z.jahr_nummer,
z.monat_desc, a.artikel_id;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
PCT Refresh Join Dependency Expression
• Partitioning Key kommt in der Join Condition vor und eine Spalte der
Basistabelle im SELECT-Teil der MAV
CREATE MATERIALIZED VIEW
MV_Standard_PCT_Falsch
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz_Par u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id and
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc,
a.artikel_id;
159
CREATE MATERIALIZED VIEW
MV_Standard_PCT_Richtig
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz_Par u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id and
u.bestell_datum = z.datum_desc
GROUP BY
z.jahr_nummer, z.monat_desc,
a.artikel_id;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
PCT Refresh mit Partition Marker
• Die Partitionmarker-Funktion liefert pro Partition einen Wert, der beliebige Level für
die Aggregationen in der MAV erlaubt
SQL> SELECT count(*) FROM
MV_Standard_PCT_Par_MARKER;
COUNT(*)
---------2869
160
CREATE MATERIALIZED VIEW MV_Standard_PCT_Par_MARKER
AS SELECT
dbms_mview.pmarker(u.rowid) AS pmark,
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz_Par u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id and
u.bestell_datum = z.datum_desc
GROUP BY
z.jahr_nummer,z.monat_desc,a.artikel_id,
dbms_mview.pmarker(u.rowid) ;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
PCT Refresh und MAV Log Refresh
• Fast Refresh über MAV Logs funktioniert nicht, wenn Partitionen
hinzukommen oder gelöscht werden
• Für bestimmte MAVs funktioniert das Log-Verfahren nicht, z.B.
Verwendung der RANK-Funktion
• PCT Refresh ist schneller, wenn viele Änderungen pro Partition gemacht
wurden
• PCT Refresh lässt sich parallelisieren
• MAVs können bei PCT trotz “Staleness” mancher Partionen für Query
Rewrite genutzt werden
161
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Refresh Performance Tipps
• Optimizer-Statistiken immer aktuell halten
– Nach jedem Laden aktualisieren
– DBMS_STATS auch über MAVs laufen lassen
• ATOMIC_REFRESH auf FALSE setzen
• PCT nutzen, wo es geht
– Auch die MAV kann partitioniert werden (bringt zusätzliche Performance beim Refresh)
• Parallele Ausführung verwenden
• Mit REFRESH_ALL arbeiten
– DB organisiert sich die Abarbeitung selbst und parallelisiert automatisch bei Bedarf
– Berücksichtigt auch Abhängigkeiten zwischen einzelnen MAVs
162
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Nutzenpotenziale durch MAV heben
• Wartbarkeit und Wiederverwendbarkeit
• Konzept erstellen als Grundlage für MAVs
• Komplexität reduzierne der einzelnen SQL
• Keine MAV für einzelne Abfrage
• Einfache Pflege
• Aufeinander Aufbauende MAV
• Einsatz der Automatismen prüfen (refresh)
• Verwendung der MAV mit System Views prüfen
• Performance im ETL
• Trennung von unterschiedlichen Aufgaben (Join, Aggregation)
• Abhängige Elemente nutzen
• Effiziente Nutzung
• Unterstützende Elemente nutzen (Dimensionen)
• Partitionierung prüfen
163
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Nested Materialized Views
Umsatz aggregiert auf Jahreslevel
Umsatz aggregiert auf Monatslevel
sum / count
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
164
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Nested Materialized Views
CREATE MATERIALIZED VIEW MV_Umsatz_Monat
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc,a.artikel_id;
165
CREATE MATERIALIZED VIEW MV_Umsatz_Jahr
ENABLE QUERY REWRITE
AS SELECT
Jahr,
sum(summe) Summe,
ID artikel_id,
count(summe)
FROM
MV_Umsatz_Monat
GROUP BY
jahr,ID;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Minimierung von Komplexität mit Nested Materialized Views
“Liefere die Artikel mit dem größten Umsatz im November 2006”
CREATE MATERIALIZED VIEW MV_Umsatz_Komplex
ENABLE QUERY REWRITE
AS SELECT
a.artikel_name, sum(u.umsatz)
FROM
f_umsatz u, d_artikel a
WHERE
a.artikel_id = u.artikel_id
GROUP BY
a.artikel_name
HAVING sum(u.umsatz)
--> kein Fast Refresh möglich
IN (SELECT max(u.umsatz)
FROM f_umsatz u, d_zeit z
WHERE u.zeit_id = z.datum_id AND
z.monat_desc = 'November' AND
z.jahr_nummer = '2006'
GROUP BY u.artikel_id);
166
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Minimierung von Komplexität mit Nested Materialized Views
“Liefere die Artikel mit dem größten Umsatz im November 2006”
CREATE MATERIALIZED VIEW MV_Umsatz_KOMBINATION
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS
SELECT artikel, umsatz_summe FROM MV_Umsatz_Komplex_SUB1
WHERE umsatz_summe IN (SELECT umsatz_max FROM MV_Umsatz_Komplex_SUB2);
CREATE MATERIALIZED VIEW
MV_Umsatz_Komplex_SUB1
ENABLE QUERY REWRITE
AS
SELECT a.artikel_name Artikel,
sum(u.umsatz)umsatz_summe,
count(u.umsatz), count(*)
FROM f_umsatz u, d_artikel a
WHERE a.artikel_id = u.artikel_id
GROUP BY a.artikel_name;
167
CREATE MATERIALIZED VIEW
MV_Umsatz_Komplex_SUB2
ENABLE QUERY REWRITE
AS
SELECT u.artikel_id,
max(u.umsatz) umsatz_max
FROM f_umsatz u, d_zeit z
WHERE u.zeit_id = z.datum_id AND
z.monat_desc = 'November' AND
z.jahr_nummer = '2006'
GROUP BY u.artikel_id;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Automatisches “Query Rewrite” mit
Materialized Views
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
168
Rewrite Prüfung – Abarbeitungsreihenfolge
• Textvergleich der SELECT-Liste
– Reihenfolge spielt dabei keine Rolle
– Auflösung von möglichen Berechnungen
• Vergleich der Join-Bedingung
• Vergleich der GROUP BY-Klausel
169
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel-MAV für die folgenden Abfragen
CREATE MATERIALIZED VIEW MV_UMS_ART_Zeit
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz)Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc, a.artikel_id;
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
170
sum / count
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA
DATAWAREHOUSE
WAREHOUSE
Exaktes Text-Matching
• Umstellen der Spalten und avg() anstelle von sum()
SELECT
z.jahr_nummer Jahr,
sum(u.umsatz)Summe,
a.artikel_id ID,
z.monat_desc Monat
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc,
a.artikel_id;
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
sum / count
SELECT
z.jahr_nummer Jahr,
avg(u.umsatz) Schnitt,
a.artikel_id ID,
z.monat_desc Monat
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc,
a.artikel_id;
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Prinzip Aggregate Rollup
SELECT
z.jahr_nummer Jahr, --> Bezugsgröße in MAV ist Monat
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, a.artikel_id;
• Abfragen lässt sich alles, was in der GROUP BY-Klausel der MAV zu finden ist
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
172
sum / count
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Join Back-Methode
SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
a.artikel_name Artikel,
sum(u.umsatz) Summe
Ist nicht in der
MAV-Definition
enthalten
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc, a.artikel_Name;
• Join Back-Tabelle muss einen Primary Key nutzen
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
173
sum / count
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Ausführungsplan Join Back-Methode
Ohne Join Back
---------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
| 3511 |
246K|
172
(5)| 00:00:03 |
|
1 | HASH GROUP BY
|
| 3511 |
246K|
172
(5)| 00:00:03 |
|* 2 |
HASH JOIN
|
|
100K| 7031K|
168
(3)| 00:00:03 |
|
3 |
TABLE ACCESS FULL | D_ZEIT
| 3074 | 55332 |
8
(0)| 00:00:01 |
|* 4 |
HASH JOIN
|
|
100K| 5273K|
159
(2)| 00:00:02 |
|
5 |
TABLE ACCESS FULL| D_ARTIKEL |
65 | 2860 |
3
(0)| 00:00:01 |
|
6 |
TABLE ACCESS FULL| F_UMSATZ |
100K|
976K|
155
(2)| 00:00:02 |
----------------------------------------------------------------------------------
Mit Join Back
-------------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
-------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
65 | 5785 |
15 (14)| 00:00:01 |
|
1 | HASH GROUP BY
|
|
65 | 5785 |
15 (14)| 00:00:01 |
|* 2 |
HASH JOIN
|
| 6363 |
553K|
14
(8)| 00:00:01 |
|
3 |
TABLE ACCESS FULL
| D_ARTIKEL
|
65 | 2860 |
3
(0)| 00:00:01 |
|
4 |
MAT_VIEW REWRITE ACCESS FULL| MV_UMS_ART_ZEIT | 6363 |
279K|
10
(0)| 00:00:01 |
--------------------------------------------------------------------------------------------------
174
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Einfache Join-Bedingungen in MAVs Grundlage für
flexiblere Abfragen
Einfache Join-Bedingung
CREATE MATERIALIZED VIEW MV_UMS_ART_Zeit_Join
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
a.artikel_id ID,
u.umsatz Umsatz
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id;
175
SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id AND
z.jahr_nummer = '2017'
GROUP BY
z.jahr_nummer, z.monat_desc;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Materialized Views und Hierarchisierung von
Dimensionen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
176
Dimensionale Tabelle als Optimizer-Hilfe
• Abfragen über alle Spalten der Dimensionstabelle
• Eine Definition für Dimensionen festlegen
CREATE DIMENSION d_artikel
LEVEL artikel IS d_artikel.artikel_id
LEVEL gruppe IS d_artikel.gruppe_nr
LEVEL sparte IS d_artikel.sparte_nr
HIERARCHY h_art
(artikel CHILD OF gruppe CHILD OF
sparte)
ATTRIBUTE att_artikel LEVEL artikel
DETERMINES d_artikel.artikel_name
ATTRIBUTE att_gruppe LEVEL gruppe
DETERMINES d_artikel.gruppe_name
ATTRIBUTE att_sparte LEVEL sparte
DETERMINES d_artikel.sparte_name;
CREATE TABLE d_artikel
(
dimension_key NUMBER(3) NOT NULL,
nummer
NUMBER(8),
artikel_name VARCHAR2(50),
artikel_nummer NUMBER(3),
gruppe_nr
NUMBER(3),
gruppe_name
VARCHAR2(50),
sparte_name
VARCHAR2(50),
sparte_nr
NUMBER(3));
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
177
sum / count
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Dimensionale Tabelle als Optimizer-Hilfe
Abfrage auf Spartenebene
Definition auf Artikelebene
CREATE MATERIALIZED VIEW MV_UMS_ART_Dim
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS SELECT
a.artikel_id ID,
sum(u.umsatz) Umsatz
FROM
f_umsatz u, d_artikel a
WHERE
a.artikel_id = u.artikel_id
GROUP BY
a.artikel_id;
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
178
sum / count
SELECT
a.sparte_name Sparte,
sum(u.umsatz) Summe
FROM
f_umsatz u, d_artikel a
WHERE
a.artikel_id = u.artikel_id
GROUP BY
a.sparte_name;
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Dimensionale Tabelle als Optimizer-Hilfe
Ohne Rewrite auf Basis einer dimensionalen Tabelle
--------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
1 |
28 |
163
(5)| 00:00:02 |
|
1 | HASH GROUP BY
|
|
1 |
28 |
163
(5)| 00:00:02 |
|* 2 |
HASH JOIN
|
|
100K| 2734K|
158
(2)| 00:00:02 |
|
3 |
TABLE ACCESS FULL| D_ARTIKEL |
65 | 1430 |
3
(0)| 00:00:01 |
|
4 |
TABLE ACCESS FULL| F_UMSATZ |
100K|
585K|
154
(1)| 00:00:02 |
---------------------------------------------------------------------------------
Mit Rewrite auf Basis einer dimensionalen Tabelle
-------------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
-------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
1 |
48 |
7 (29)| 00:00:01 |
|
1 | HASH GROUP BY
|
|
1 |
48 |
7 (29)| 00:00:01 |
|
2 |
MERGE JOIN
|
|
63 | 3024 |
6 (17)| 00:00:01 |
|
3 |
TABLE ACCESS BY INDEX ROWID | D_ARTIKEL
|
65 | 1430 |
2
(0)| 00:00:01 |
|
4 |
INDEX FULL SCAN
| PK_ART_ID
|
65 |
|
1
(0)| 00:00:01 |
|* 5 |
SORT JOIN
|
|
63 | 1638 |
4 (25)| 00:00:01 |
|
6 |
MAT_VIEW REWRITE ACCESS FULL| MV_UMS_ART_DIM |
63 | 1638 |
3
(0)| 00:00:01 |
--------------------------------------------------------------------------------------------------
179
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Prüfen der Stimmigkeit einer Dimension
ATTRIBUTE-Klausel
HIERARCHY-Klausel
SPARTE_NAME
SPARTE_NR
funktionale
Abhängigkeit
GRUPPE_NAME
GRUPPE_NR
funktionale
Abhängigkeit
ARTIKEL_NAME
ARTIKEL_ID
funktionale
Abhängigkeit
1 : n-Beziehung
1 : n-Beziehung
180
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Prüfen der Stimmigkeit einer Dimension
\ora-home\RDBMS\ADMIN\utldim.sql
SQL> desc dimension_exceptions
Name
------------------------------STATEMENT_ID
OWNER
TABLE_NAME
DIMENSION_NAME
RELATIONSHIP
BAD_ROWID
 Legt Tabelle DIMENSION_EXCEPTIONS an
DBMS_OLAP.VALIDATE_DIMENSION
-- Prüfen der Dimension mit:
variable stmt_id varchar2(30);
execute :stmt_id := 'CUST_DIM_VAL';
execute dbms_dimension.validate_dimension ('MAV.D_ARTIKEL',FALSE,TRUE,:stmt_id );
-- Fehlermeldungen abfragen mit:
SELECT distinct owner, table_name, dimension_name, relationship
FROM dimension_exceptions
WHERE statement_id = :stmt_id;
181
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
EXPLAIN_MVIEW – Auswertung
start D:\O11\db11\RDBMS\ADMIN\utlxmv.sql
SQL> desc MV_CAPABILITIES_TABLE;
Name
Null?
----------------------------------------- -------STATEMENT_ID
MVOWNER
MVNAME
CAPABILITY_NAME
POSSIBLE
RELATED_TEXT
RELATED_NUM
MSGNO
MSGTXT
SEQ
182
Typ
--------------------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
CHAR(1)
VARCHAR2(2000)
NUMBER
NUMBER(38)
VARCHAR2(2000)
NUMBER
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
EXPLAIN_MVIEW-Routine
• Zeigt auf, welche Funktionen für die jeweilige MAV genutzt werden
kann
EXECUTE dbms_mview.explain_mview(_
'SELECT sum(u.umsatz),a.artikel_name _
FROM f_umsatz u, d_artikel a _
WHERE a.artikel_id = u.artikel_id _
GROUP BY a.artikel_name');
183
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
EXPLAIN_MVIEW-Routine
SELECT capability_name, possible p, substr(related_text,1,20) obj, substr(msgtxt,1,100)
erklaerung FROM mv_capabilities_table;
CAPABILITY_NAME
-----------------------------PCT
REFRESH_COMPLETE
REFRESH_FAST
REWRITE
PCT_TABLE
PCT_TABLE
REFRESH_FAST_AFTER_INSERT
REFRESH_FAST_AFTER_INSERT
REFRESH_FAST_AFTER_ONETAB_DML
REFRESH_FAST_AFTER_ONETAB_DML
REFRESH_FAST_AFTER_ONETAB_DML
P
N
Y
N
Y
N
N
N
N
N
N
N
CAPABILITY_NAME
-----------------------------REFRESH_FAST_AFTER_ONETAB_DML
REFRESH_FAST_AFTER_ANY_DML
REFRESH_FAST_PCT
P OBJ
ERKLAERUNG
- --------------------------------------------------------------------N
SUM(expr) ohne COUNT(expr)
N
Siehe Grund, warum REFRESH_FAST_AFTER_ONETAB_DML deaktiviert ist
N
PCT bei keiner der Detail-Tabellen in der Materialized
View m÷glich
Y
Y
Y
N
Allgemeines Neuschreiben nicht m÷glich oder PCT bei keiner
der Detail-Tabellen m÷glich
N F_UMSATZ
Relation ist keine partitionierte Tabelle
N D_ARTIKEL
Relation ist keine partitionierte Tabelle
REWRITE_FULL_TEXT_MATCH
REWRITE_PARTIAL_TEXT_MATCH
REWRITE_GENERAL
REWRITE_PCT
PCT_TABLE_REWRITE
PCT_TABLE_REWRITE
184
OBJ
ERKLAERUNG
------------------------------------------------------------------------
F_UMSATZ
D_ARTIKEL
MAV.F_UMSATZ
MAV.D_ARTIKEL
SUM(U.UMSATZ)
Relation ist keine partitionierte Tabelle
Relation ist keine partitionierte Tabelle
Detail-Tabelle enthΣlt kein Materialized View-Log
Detail-Tabelle enthΣlt kein Materialized View-Log
SUM(expr) ohne COUNT(expr)
Siehe Grund, warum REFRESH_FAST_AFTER_INSERT deaktiviert ist
COUNT(*) ist in SELECT-Liste nicht vorhanden
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
EXPLAIN_REWRITE-Routine
Angabe der Bedingungen für Query Rewrite
@D:\app\aths\product\11.1.0\db_1\RDBMS\ADMIN\utlxrw.sql
SQL> desc rewrite_table
Name
Null?
----------------------------------------- -------STATEMENT_ID
MV_OWNER
MV_NAME
SEQUENCE
QUERY
QUERY_BLOCK_NO
REWRITTEN_TXT
MESSAGE
PASS
MV_IN_MSG
MEASURE_IN_MSG
JOIN_BACK_TBL
JOIN_BACK_COL
ORIGINAL_COST
REWRITTEN_COST
FLAGS
RESERVED1
RESERVED2
185
Typ
--------------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
NUMBER(38)
VARCHAR2(4000)
NUMBER(38)
VARCHAR2(4000)
VARCHAR2(512)
VARCHAR2(3)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(4000)
VARCHAR2(4000)
NUMBER(38)
NUMBER(38)
NUMBER(38)
NUMBER(38)
VARCHAR2(10)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
EXPLAIN_REWRITE-Routine
MAV-Definition
CREATE MATERIALIZED VIEW MV_UMS_ART_Zeit_Join
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
a.artikel_id ID,
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id;
select mv_name, message from rewrite_table;
MV_UMS_ART_ZEIT_JOIN
QSM-01150: Abfrage wurde nicht umgeschrieben
DBMS_MVIEW.EXPLAIN_REWRITE
begin
dbms_mview.explain_rewrite('
SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc,
a.artikel_id', 'MV_UMS_ART_Zeit_Join');
end;
MV_UMS_ART_ZEIT_JOIN
QSM-01082: Materialized View, MV_UMS_ART_ZEIT_JOIN, kann nicht mit Tabelle, F_UMSATZ,
verknpft werden
MV_UMS_ART_ZEIT_JOIN
QSM-01102: Materialized View, MV_UMS_ART_ZEIT_JOIN, erfordert Join zurck zu Tabelle, F_UMSATZ,
in Spalte, UMSATZ
186
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Analytische SQL-Funktionen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
187
Analytische Funktionen
• Einsatz bei dem Aufbau von festen, bekannten Kennzahlen
• Ideal in dem Zusammenspiel mit Materialized Views
• Lösung könnte auch mit reinem SQL erfolgen
aber
– Analytische Funktionen machen die Abfrage schlanker
– Sie sind in der Regel schneller, weil man Mehrfachlesen von Tabellen verhindert
– Sie liefern mehr Flexibilität weil mit Gruppierungen gezielter umgegangen werden kann
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Gruppierungen auf unterschiedlichen Leveln
Over Partition By
• Allgemeines Format
Function(arg1,..., argn) OVER ( [PARTITION BY <...>]
[ORDER BY <....>] [<window_clause>] )
• Beispiel
Beispiel:
sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Einfaches Beispiel
Mit nur einer Tabelle
select
Artikelname,
Artikelgruppe,
Wert,
sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert
from Artikel ;
Beispieltabelle:
create table Artikel (
Artikelname
Artikelgruppe
wert
varchar2(10),
varchar2(10),
number);
insert into Artikel values('Schraube','Beschlag',1);
insert into Artikel values('Winkel','Beschlag',2);
insert into Artikel values('Mutter','Beschlag',1);
insert into Artikel values('Kabel','Elektro',6);
insert into Artikel values('Lampe','Elektro',5);
insert into Artikel values('Klemme','Elektro',2);
....................
ARTIKELNAM
---------Schraube
Winkel
Mutter
Winkel
Schraube
Mutter
Winkel
Schraube
Mutter
Kabel
Kabel
Lampe
Klemme
Klemme
Lampe
Kabel
Lampe
Klemme
ARTIKELGRU WERT GRUPPENGESAMTWERT
---------- ---- ----------------Beschlag
2
12
Beschlag
2
12
Beschlag
1
12
Beschlag
2
12
Beschlag
1
12
Beschlag
1
12
Beschlag
2
12
Beschlag
1
12
Beschlag
1
12
Elektro
6
39
Elektro
6
39
Elektro
5
39
Elektro
2
39
Elektro
2
39
Elektro
5
39
Elektro
6
39
Elektro
5
39
Elektro
2
39
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Abgrenzung gegenüber GROUP BY / Aggregationen
• Bei der GROUP BY – Lösung müssen aller Felder in dem SELECT-Teil auch unter
GROUP BY aufgelistet werden
SQL> select sum(wert),
artikelname,
artikelgruppe
from
artikel
group by
artikelname;
ERROR at line 1:
ORA-00979: not a GROUP BY expression
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verhindern von Mehrfachlesen
Mit analytischen Funktionen
select Artikelname,
Artikelgruppe,
Wert,
sum(wert) over (partition by Artikelname) Artikelgesamtwert,
sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert,
round(((sum(wert) over (partition by Artikelname))/(sum(wert) over (partition by
Artikelgruppe))*100),0) Prozent from Artikel ;
Ohne analytische Funktionen
select
wert_art,
art.artikelname,
wert_gr,
art.artikelgruppe,
round((art.wert_art/gr.wert_gr*100),0) Prozent
from
(select sum(wert) wert_art, artikelname,ARTIKELGRUPPE from artikel group by
artikelname,ARTIKELGRUPPE) art,
(select sum(wert) wert_gr, ARTIKELGRUPPE from artikel group by ARTIKELGRUPPE) gr
where
art.ARTIKELGRUPPE = gr.ARTIKELGRUPPE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Mit analytischen Funktionen
Ohne analytische Funktionen
ARTIKELNAM
---------Kabel
Kabel
Kabel
Klemme
Klemme
Klemme
Lampe
Lampe
Lampe
Mutter
Mutter
Mutter
Schraube
Schraube
Schraube
Winkel
Winkel
Winkel
ARTIKELNAM
---------Kabel
Kabel
Kabel
Klemme
Klemme
Klemme
Lampe
Lampe
Lampe
Mutter
Mutter
Mutter
Schraube
Schraube
Schraube
Winkel
Winkel
Winkel
ARTIKELGRU
WERT ARTIKELGESAMTWERT GRUPPENGESAMTWERT
PROZENT
---------- ---------- ----------------- ----------------- ---------Elektro
6
18
39
46
Elektro
6
18
39
46
Elektro
6
18
39
46
Elektro
2
6
39
15
Elektro
2
6
39
15
Elektro
2
6
39
15
Elektro
5
15
39
38
Elektro
5
15
39
38
Elektro
5
15
39
38
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
2
6
12
50
Beschlag
2
6
12
50
Beschlag
2
6
12
50
ARTIKELGRU
WERT ARTIKELGESAMTWERT GRUPPENGESAMTWERT
PROZENT
---------- ---------- ----------------- ----------------- ---------Elektro
6
18
39
46
Elektro
6
18
39
46
Elektro
6
18
39
46
Elektro
2
6
39
15
Elektro
2
6
39
15
Elektro
2
6
39
15
Elektro
5
15
39
38
Elektro
5
15
39
38
Elektro
5
15
39
38
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
2
6
12
50
Beschlag
2
6
12
50
Beschlag
2
6
12
50
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verhindern von Doppellesen
Mit analytischen Funktionen
------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
18 |
342 |
5 (40)| 00:00:01 |
|
1 | WINDOW SORT
|
|
18 |
342 |
5 (40)| 00:00:01 |
|
2 |
WINDOW SORT
|
|
18 |
342 |
5 (40)| 00:00:01 |
|
3 |
TABLE ACCESS FULL| ARTIKEL |
18 |
342 |
3
(0)| 00:00:01 |
-------------------------------------------------------------------------------
Ohne analytische Funktionen
-------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
-------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
9 |
423 |
9 (34)| 00:00:01 |
|* 1 | HASH JOIN
|
|
9 |
423 |
9 (34)| 00:00:01 |
|
2 |
VIEW
|
|
2 |
40 |
4 (25)| 00:00:01 |
|
3 |
HASH GROUP BY
|
|
2 |
24 |
4 (25)| 00:00:01 |
|
4 |
TABLE ACCESS FULL| ARTIKEL |
18 |
216 |
3
(0)| 00:00:01 |
|
5 |
VIEW
|
|
9 |
243 |
4 (25)| 00:00:01 |
|
6 |
HASH GROUP BY
|
|
9 |
171 |
4 (25)| 00:00:01 |
|
7 |
TABLE ACCESS FULL| ARTIKEL |
18 |
342 |
3
(0)| 00:00:01 |
-------------------------------------------------------------------------------Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel
Mit mehreren Tabellen
D_ARTIKEL
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
PK
Wieviel Prozent machen der
Gesamtumsatzes pro Artikel an dem Gesamtumsatz der zugehörigen
Gruppe aus?
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
Gesamtumsatz Einzelartikel im Vergleich zu
durchschnittlichem Artikelumsatz pro Gruppe
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lösung 1 – ohne analytische Funktion
select Artikel, Artikel_Gesamt, Gruppe_Gesamt,
round((Artikel_Gesamt/Gruppe_Gesamt*100),0) Prozent from
(
with artikel_summe AS
(SELECT a.artikel_name, sum(u.umsatz) Wert_p_Artikel
FROM
f_Umsatz_2014 U,
D_artikel a
WHERE
U.artikel_id
= a.artikel_id
group by a.artikel_name)
SELECT distinct a.artikel_name Artikel,
s.Wert_p_Artikel Artikel_Gesamt,
sum(u.umsatz) over (partition by a.GRUPPE_NAME) Gruppe_Gesamt
FROM
f_Umsatz_2014 U,
D_artikel a,
artikel_summe s
WHERE
U.artikel_id
= a.artikel_id and
a.ARTIKEL_NAME = s.ARTIKEL_NAME);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Antwortzeit:
129 rows selected.
Elapsed: 00:01:07.29
DATA WAREHOUSE
Lösung 2 – mit sum() OVER (PARTITION...)
select artikel,
umsatz_pro_Artikel,
gruppe,
sum(umsatz_pro_Artikel) over (partition by Gruppe) Gruppe_Gesamt,
round(umsatz_pro_Artikel/(sum(umsatz_pro_Artikel) over (partition by Gruppe))*100,0)
Prozent
from
(
SELECT a.artikel_name Artikel,
a.GRUPPE_NAME Gruppe,
sum(u.umsatz) umsatz_pro_Artikel
FROM
f_Umsatz_2014 U,
D_artikel a
WHERE
U.artikel_id
= a.artikel_id
group by a.artikel_name, a.GRUPPE_NAME
)
Sub-Select liefert nach Gruppe
gruppierte Artikel-Aggregationen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Antwortzeit:
129 rows selected.
Elapsed: 00:00:03.49
DATA WAREHOUSE
Lösung 3 – kompakte Form
SELECT
a.artikel_name Artikel,
a.GRUPPE_NAME Gruppe,
sum(u.umsatz) umsatz_pro_Artikel,
sum(sum(u.umsatz)) OVER (PARTITION BY a.GRUPPE_NAME) Gesamt_Gruppen_Umsatz,
round(((sum(u.umsatz))/(sum(sum(u.umsatz)) OVER (PARTITION BY a.GRUPPE_NAME))*100),2) Prozent
FROM f_Umsatz_2014 U, D_artikel a
WHERE U.artikel_id
= a.artikel_id
group by a.GRUPPE_NAME, a.artikel_name
Liefert nach Gruppe
gruppierte Artikel-Aggregationen
Antwortzeit:
129 rows selected.
Elapsed: 00:00:03.83
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lösung 3 – ausführliches Beispiel
select * from
(
Gesamtsumme
Gesamtsumme
SELECT
pro Artikel_Gruppe
pro
Artikel
a.artikel_name Artikel,
Aufsteigende Artikelsummenposition
a.GRUPPE_NAME Gruppe,
pro Artikel_Gruppe
sum(u.umsatz) umsatz_pro_Artikel,
Anzahl Artikelsummen pro Gruppe
sum(sum(u.umsatz)) OVER (PARTITION BY a.GRUPPE_NAME) Gesamt,
Durchschnittliche
rank() over (PARTITION BY a.GRUPPE_NAME order by a.artikel_name ) lfd_nr,
Anzahlsumme
count(sum(u.umsatz)) OVER (PARTITION BY a.GRUPPE_NAME) Anz_Art_pro_Gruppe,
innerhalb einer
round(avg(sum(u.umsatz)) OVER (PARTITION BY a.GRUPPE_NAME),2) Schnitt_pro_Gruppe,
Artikelgruppe
sum(sum(u.umsatz)) OVER (PARTITION BY a.GRUPPE_NAME ORDER BY a.artikel_name) Kumuliert,
round(((sum(u.umsatz))/(sum(sum(u.umsatz)) OVER (PARTITION BY a.GRUPPE_NAME))*100),2) Prozent
Kumulierte
FROM f_Umsatz_2014 U, D_artikel a
Artikelsummen
WHERE U.artikel_id
= a.artikel_id
pro Gruppe
Prozentanteil
group by a.GRUPPE_NAME, a.artikel_name
Liefert nach Gruppe
)
Artikelsumme an
gruppierte Artikel-Aggregationen
where lfd_nr < 4
Gesamtgruppenwert
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Analog: Vergleiche mit Durchschnittsmengen
Gesamtumsatz Einzelartikel im Vergleich zu
select artikel,
durchschnittlichem Artikelumsatz pro Gruppe
umsatz_pro_Artikel,
gruppe,
avg(umsatz_pro_Artikel) over (partition by Gruppe) Gruppe_Gesamt,
round(umsatz_pro_Artikel/(avg(umsatz_pro_Artikel) over (partition by Gruppe))*100,0) Prozent
from
(
SELECT a.artikel_name Artikel,
a.GRUPPE_NAME Gruppe,
sum(u.umsatz) umsatz_pro_Artikel
FROM
f_Umsatz U,
D_artikel a
WHERE
U.artikel_id
= a.artikel_id
group by a.artikel_name, a.GRUPPE_NAME
)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Year-To-Date Analysen
select
- Auflistung von Umsatz pro Monat und Jahr
z.Jahr_nummer Jahr,
- Kumulierung der Monatsumsätze von Jahresbeginn an
z.MONAT_DESC Monat,
sum(u.umsatz) Umsatz,
sum(sum(u.umsatz)) over (PARTITION by z.Jahr_nummer order by z.MONATS_NUMMER) year_to_date
from
D_ZEIT
F_UMSATZ
f_umsatz_2014 u,
DATUM_ID
ARTIKEL_ID
d_zeit z
TAG_DES_MONATS
KUNDEN_ID
TAG_DES_JAHRES
ZEIT_ID
where
WOCHE_DES_JAHRES
REGION_ID
z.zeit_id = u.zeit_id
MONATS_NUMMER
KANAL_ID
MONAT_DESC
UMSATZ
group by
QUARTALS_NUMMER
MENGE
z.Jahr_nummer,
JAHR_NUMMER
UMSATZ_GESAMT
ZEIT_ID
z.MONATS_NUMMER,
z.MONAT_DESC
------------------------------------------------------------------------------|Id | Operation
| Name
|Rows | Bytes | Cost (%CPU)| Time
|
/
-----------------------------------------------------------------------------| 0 | SELECT STATEMENT
|
| 1153 | 42661 |
190
(4)| 00:00:03 |
| 1 | WINDOW BUFFER
|
| 1153 | 42661 |
190
(4)| 00:00:03 |
| 2 |
SORT GROUP BY
|
| 1153 | 42661 |
190
(4)| 00:00:03 |
|* 3 |
HASH JOIN
|
|97384 | 3518K|
186
(2)| 00:00:03 |
| 4 |
TABLE ACCESS FULL| D_ZEIT | 5844 |
142K|
13
(0)| 00:00:01 |
| 5 |
TABLE ACCESS FULL| F_UMSATZ| 100K| 1171K|
171
(1)| 00:00:03 |
-------------------------------------------------------------------------------Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Rank() Over Partition
Ranking / Reihenfolgen
Was ist das umsatzstärkste Quartal pro Jahr
select * from
(select sum(u.umsatz) Umsatz,
z.Jahr_nummer Jahr
,z.Quartals_nummer "Top-Quartal",
RANK() OVER (PARTITION by z.Jahr_nummer ORDER BY sum(U.umsatz) DESC ) AS Rangfolge
D_ZEIT
from
DATUM_ID
f_umsatz u,
TAG_DES_MONATS
d_zeit z
TAG_DES_JAHRES
WOCHE_DES_JAHRES
where
MONATS_NUMMER
F_UMSATZ
z.zeit_id = u.zeit_id
MONAT_DESC
QUARTALS_NUMMER
ARTIKEL_ID
-- and
JAHR_NUMMER
KUNDEN_ID
-- z.Jahr_nummer between 2006 and 2011
ZEIT_ID
ZEIT_ID
REGION_ID
group by z.Jahr_nummer,z.Quartals_nummer)
KANAL_ID
where Rangfolge = 1
UMSATZ
MENGE
order by Jahr;
UMSATZ_GESAMT
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ranking ohne Partition
Die 10 umsatzstärksten Artikel
SELECT *
FROM
(SELECT
D_ARTIKEL
Artikel_Name as Artikel,
ARTIKEL_NAME
sum(U.umsatz) AS Umsatz,
GRUPPE_NR
RANK() OVER (ORDER BY sum(U.umsatz) DESC ) AS Rangfolge
GRUPPE_NAME
SPARTE_NAME
from
SPARTE_NR
F_umsatz U,
ARTIKEL_ID
PK
D_Artikel A
WHERE U.artikel_id = a.artikel_id
F_UMSATZ
group by a.artikel_name)
Rangfolge-Feld
ARTIKEL_ID
WHERE rownum < 11;
wird mitgeliefert
ARTIKEL
UMSATZ RANGFOLGE
--------------------------------------- ---------Wandspiegel 50x60
1723790
1
Kehrschaufel
1703263
2
Waschbecken 40x60
1697755
3
Badewannenfaltwand 50x50x50
1694115
4
Duschbecken 70
1687618
5
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
FK
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
DATA WAREHOUSE
Alternative Version für Ranking ohne analytische Funktion
select * from
(SELECT *
FROM
(SELECT
Artikel_Name as Artikel,
sum(U.umsatz) AS Umsatz
from
F_umsatz U,
D_Artikel A
WHERE U.artikel_id = a.artikel_id
group by a.artikel_name)
order by Umsatz desc)
where rownum < 11 ;
2 geschachtelte Sub-Selects
weil die Klausel
„where rownum < 11“
erst nach der
Klausel
„ORDER BY UMSATZ“
wirken soll.
Es fehlt das Rangfolgenfeld.
Das müßte man jetzt zusätzlich noch
Konstruieren.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ranking
Die 5 umsatzstärksten Bundesländer
• RANK
– Plätze werden aufsteigend vergeben
– Bei 2 gleichen Position bleibt der darauf folgende frei
• 1 2 3 3 5 6 7 8 8 10
• DENSRANK
– Plätze werden aufsteigend vergeben
– Bei 2 gleichen Position wird die darauf folgende Position belegt
• 1 2 3 3 4 5 6 7 8 8 9
D_REGION
REGION_ID
ORTNR
ORT
KREISNR
KREIS
LANDNR
LAND
REGIONNR
REGION
F_UMSATZ
ARTIKEL_ID
KUNDEN_ID
ZEIT_ID
REGION_ID
KANAL_ID
UMSATZ
MENGE
UMSATZ_GESAMT
SELECT *
FROM
(SELECT
R.land as
Land,
sum(U.umsatz) AS Umsatz,
RANK() OVER (ORDER BY sum(U.umsatz) DESC ) AS
Rangfolge
from
F_umsatz U,
D_REGION R
WHERE U.REGION_ID = r.region_id
group by r.land)
WHERE rownum < 6;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Gruppierungen auf unterschiedlichen Leveln und Ranking auf Level-Ebene
Partition By
- Sortierung der Umsätze nach Top Artikel pro
Artikelgruppe
- Bilden der Rangfolge innerhalb einer Gruppe
(SELECT artikel_name Artikel,
gruppe_name Prod_Grp,
sum(U.Umsatz) AS Umsatz,
RANK() OVER (PARTITION by a.gruppe_name ORDER BY sum(U.umsatz) DESC )
AS Rangfolge
FROM f_umsatz U, d_artikel A
D_ARTIKEL
WHERE U.artikel_id
= a.artikel_id
ARTIKEL_NAME
GROUP by a.gruppe_name,a.artikel_name
GRUPPE_NR
GRUPPE_NAME
ORDER by a.gruppe_name)
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
PK
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
DATA WAREHOUSE
Gruppierungen auf unterschiedlichen Leveln und Ranking auf Level-Ebene
Partition By
- Sortierung der Umsätze nach Top 3 Artikel pro
Artikelgruppe
-Bilden der Rangfolge innerhalb einer Gruppe
SELECT * FROM
(SELECT artikel_name Artikel,
gruppe_name Prod_Grp,
sum(U.Umsatz) AS Umsatz,
RANK() OVER (PARTITION by a.gruppe_name ORDER BY sum(U.umsatz) DESC )
AS Rangfolge
FROM f_umsatz U, d_artikel A
F_UMSATZ
WHERE U.artikel_id
= a.artikel_id
D_ARTIKEL
ARTIKEL_ID
GROUP by a.gruppe_name,a.artikel_name
ARTIKEL_NAME
KUNDEN_ID
GRUPPE_NR
ORDER by a.gruppe_name)
ZEIT_ID
FK
GRUPPE_NAME
REGION_ID
WHERE Rangfolge < 4;
SPARTE_NAME
SPARTE_NR
PK
ARTIKEL_ID
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
FK
FK
FK
FK
KANAL_ID
UMSATZ
MENGE
UMSATZ_GESAMT
DATA WAREHOUSE
(Zeit-) Reihenvergleiche
- Sortierung der Umsätze nach Monaten
LAG()
- Anzeigen des Vorjahresmonats
select
z.Jahr_nummer Jahr,
z.MONAT_DESC
Monat,
sum(u.umsatz) Umsatz,
LAG(sum(u.umsatz), 12) OVER (ORDER BY z.MONAT_DESC) Vorjahresmonat,
from
f_umsatz u,
d_zeit z
where
D_ZEIT
F_UMSATZ
z.zeit_id = u.zeit_id
DATUM_ID
ARTIKEL_ID
TAG_DES_MONATS
group by
TAG_DES_JAHRES
z.Jahr_nummer,z.MONATS_NUMMER,z.MONAT_DESC KUNDEN_ID
ZEIT_ID
WOCHE_DES_JAHRES
REGION_ID
KANAL_ID
UMSATZ
MENGE
UMSATZ_GESAMT
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
DATA WAREHOUSE
Vergleich / Steigerung zum Vormonat
select
z.Jahr_nummer Jahr,
z.MONAT_DESC Monat,
sum(u.umsatz) Umsatz,
LAG(sum(u.umsatz)) OVER (ORDER BY z.MONATS_NUMMER) Vormonat,
round(((sum(u.umsatz))/ NVL((LAG(sum(u.umsatz)) OVER (ORDER BY z.MONATS_NUMMER)),NULL)),2) Steigerung,
sum(sum(u.umsatz)) over (PARTITION by z.Jahr_nummer order by z.MONATS_NUMMER) year_to_date
from
f_umsatz_2014 u,
d_zeit z
where
z.zeit_id = u.zeit_id
group by
z.Jahr_nummer,
z.MONATS_NUMMER,
z.MONAT_DESC
/
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Quartalsvergleiche
select
z.Jahr_nummer Jahr,
z.Quartals_Nummer Quartal,
sum(u.umsatz) Umsatz_Quartal,
lag(sum(u.umsatz)) over (ORDER BY z.Quartals_nummer) Vor_Quartal,
(sum(u.umsatz))/(lag(sum(u.umsatz)) over (ORDER BY z.Quartals_nummer)) Steigerung
from
f_umsatz_2014 u,
d_zeit z
where
z.zeit_id = u.zeit_id
group by
z.Jahr_nummer,
z.Quartals_nummer
/
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Quartalsübersichten
Sortiert nach Umsatzstärke der Quartale
Anteil eines Quartals am Jahresumsatz
Vorquartal
Steigerung zu Vorquartal
select
z.Jahr_nummer Jahr,
z.Quartals_Nummer Quartal,
sum(u.umsatz) Umsatz_Quartal,
RANK() OVER (ORDER BY sum(U.umsatz) DESC ) AS Rangfolge,
sum(sum(u.umsatz)) over (PARTITION by z.Jahr_nummer ) Jahres_Umsatz,
round(sum(u.umsatz)/( sum(sum(u.umsatz)) over (PARTITION by z.Jahr_nummer ) ) * 100,2)
Prozentualer_Jahresanteil,
lag(sum(u.umsatz)) over (ORDER BY z.Quartals_nummer) Vor_Quartal,
round((sum(u.umsatz))/(lag(sum(u.umsatz)) over (ORDER BY z.Quartals_nummer)),2) Steigerung
from
f_umsatz_2014 u,
d_zeit z
where
z.zeit_id = u.zeit_id
group by
z.Jahr_nummer,
z.Quartals_nummer
/
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Summenzeilen ausgeben
GROUP BY ROLLUP / CUBE
SELECT
artikel_name Artikel,
gruppe_name Prod_Grp,
sum(U.Umsatz) AS Umsatz
FROM
f_umsatz U, d_artikel A
WHERE
U.artikel_id = a.artikel_id
GROUP by ROLLUP
(a.gruppe_name,a.artikel_name)
ORDER by
a.gruppe_name
• ROLLUP
– Summenzeilen entsprechend
der Felder unter GROUP BY
SchraubenschluesselSet
Stichsaege
Wasserwaage_1m
Abschleppseil
Aufkleber_D
Autatlas
ErsteHilfekoffer
Fahrradhalter
Felgenkappen
Gluebirnen_Set
Hydraulik_Wagenheber
KaelteSet
Oelfilter
Poliermittel
Reinigungsfilter
Reinigungstuecher
Sitzauflage
Universal_Wagenheber
Zusatzlicht_Front
Heimwerker
Heimwerker
Heimwerker
Heimwerker
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
1559999
1519724
1586078
24997230
1611334
1581215
1577793
1468262
1606904
1654885
1609519
1491170
1490092
1582112
1561724
1640785
1495886
1539511
1511483
1552300
24974975
199802537
137 rows selected.
• CUBE
– Summenzeilen für alle
Kombinationen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ausgeben zusätzlicher „Steuerinformation“ für „programmiertes“ Auslesen des
Ergebnisses
SELECT
artikel_name
AS
Artikel,
gruppe_name
AS
Gruppe ,
sparte_name
AS
Sparte ,
sum(U.Umsatz) AS
Umsatz ,
GROUPING(Artikel_name) AS
Art_g ,
GROUPING(gruppe_name) AS Grp_g ,
GROUPING(Sparte_name) AS Spr_g ,
GROUPING_ID(artikel_name ,gruppe_name,sparte_name ) AS grouping_id
FROM
f_umsatz U, d_artikel A
WHERE
U.artikel_id = a.artikel_id
GROUP by CUBE
(a.sparte_name, a.gruppe_name,a.artikel_name)
HAVING
GROUPING(Artikel_name) = 1 OR
GROUPING(gruppe_name) = 1 OR
GROUPING(Sparte_name) = 1
ORDER by
GROUPING(Artikel_name),GROUPING(gruppe_name),GROUPING(Sparte_name)
/
ART_G
GRP_G
SPR_G G
ROUPING_ID
---------- ---------- ---------- ----------0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
• Kombinationen von 0 und 1 werden genutzt um entsprechende Summenwerte anzuzeigen
• Grouping_ID sortiert die Kombinationsvarianten durch
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
In-Memory Database im Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
214
Datenbank wahlweise
im Hauptspeicher
Keine Änderung der
Anwendung
Spaltenorientiert
Komprimiert
2-20 fach
Parallelisierung
Nutzt bestehende
DB-Architektur und
Funktionalität
Auf jeder Hardware
möglich
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Was macht In-Memory Database-Option so schnell
Buffer-Pool
Column-Store
•
In-Memory Speicherung
•
Spaltenorientierte Speicherung
• Dynamischer Column-Index
• Komprimierung
F_UMSATZ
F_UMSATZ
Row
Format
Column
Format
• SIMD-Verarbeitung
• Bessere Parallelisierung
• Bloom-Filter
• In-Memory-Aggregation
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
216
Weniger Schichten in der Architektur mit In-Memory
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
1:1 Kopie
BI Plattform
Cache
Früher
Analytische Datenbank
1:1 Kopie
In Memory
Separate Hardware +
Maintenance
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
BI Plattform
Heute
Virtuelle
Strukturen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
217
Es ist nur ein Schalter!! – Kein Migrationsprojekt
D_KUNDE
D_ARTIKEL
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
D_REGION
REGION_ID
PK
ORTNR
ORT
KREISNR
KREIS LANDNR
LAND
REGIONNR
REGION
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
F_UMSATZ
ARTIKEL_ID
KUNDEN_ID
ZEIT_ID
REGION_ID
FK
KANAL_ID
FK
UMSATZ
FK
MENGE
FK
UMSATZ_GESAMT
FK
UMSATZ_GESAMT
VERTRIEBS_KZ
STEUER
VERPACKUNGSART
HANDELSKLASSE
KOMMISSIONSWARE
LAGERWARE
BESCHREIBUNG
LIEFER_DATUM
RECHNUNGS_DATUM
ZAHLUNGS_ZIEL
20 Mio Sätze
~ 3,1 GB
PK
KUNDEN_ID
KUNDENNR
GESCHLECHT
VORNAME
NACHNAME
TITEL
ANREDE
GEBDAT
BRANCHE
WOHNART
KUNDENART
BILDUNG
ANZ_KINDER
EINKOMMENSGRUPPE
ORTNR NUMBER,
BERUFSGRUPPE
STATUS
STRASSE
TELEFON
TELEFAX
KONTAKTPERSON
FIRMENRABATT
BERUFSGRUPPEN_NR
BILDUNGS_NR
EINKOMMENS_NR
WOHNART_NR
HAUSNUMMER
PLZ
ORT
KUNDENKARTE
ZAHLUNGSZIEL_TAGE
TOTAL
TOTAL_NR
• Laden in den InMemory-Speicher:
Einfaches Markieren
• Danach einmal anfassen
Alter
Alter
Alter
Alter
Alter
Alter
table
table
table
table
table
table
F_UMSATZ INMEMORY;
D_ZEIT
INMEMORY;
D_VERTRIEBSKANAL INMEMORY;
D_REGION INMEMORY;
D_KUNDE INMEMORY;
D_ARTIKEL INMEMORY;
CREATE TABLE F_UMSATZ ……
PARTITION BY RANGE ……
(PARTITION p1 ……
INMEMORY NO MEMCOMPRESS
PARTITION p2 ……
INMEMORY MEMCOMPRESS FOR DML,
PARTITION p3 ……
INMEMORY MEMCOMPRESS FOR QUERY,
:
PARTITION p200 ……
INMEMORY MEMCOMPRESS FOR CAPACITY
);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Der Blick in den Column-Store
1
Alter table F_UMSATZ_BREIT inmemory
2
alter table f_umsatz_breit INMEMORY
INMEMORY MEMCOMPRESS FOR QUERY HIGH (ARTIKEL_ID,KUNDEN_ID,ZEIT_ID,REGION_ID,KANAL_ID,UMSATZ,MENGE)
NO INMEMORY (UMSATZ_GESAMT,VERTRIEBS_KZ,STEUER,VERPACKUNGSART,HANDELSKLASSE,KOMMISSIONSWARE,
LAGERWARE,BESCHREIBUNG, LIEFER_DATUM,RECHNUNGS_DATUM,ZAHLUNGS_ZIEL);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
219
Was macht In-Memory so schnell?
Der Aufwand für die Abarbeitung analytischer Abfragen lässt sich aufteilen in
20%
40%
40%
Data Access
Joins
Aggregation
• In-Memory Scan
• SIMD Enhanced
Bloom Filters
• In-Memory
Aggregation
Column-oriented
Compression
Parallel Query
Sum / avg / group by....
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
220
DATA WAREHOUSE
> 7 Milliarden Werte
pro Sekunde pro CPU Core
In-Memory Aggregieren
Products
Bloom Filter
LINEORDER
Amount
DateKey
DateKey
Date
Memory
Datekey is
24122013
REGION
Type=d.d_date='December 24, 2013'
Footwear
Stores
Outlets
Outlets
Footwear
DATE_DIM
Vektor Scans (SIMD)
Sales
In-Memory
Report Outline
$
$$
$$$
$
Sales
CPU
Load
multiple
region
values
Vector Register
CA
CA
CA
Sum
Vector
Compare
all values
an 1 cycle
CA
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
221
In-Memory zusätzlich schnell machen
Join-Group-Objekte
Price *XTax
Price ++ Price
Price
Tax
Tax
Price
Sales
NAME
Vehicle
Sales
NAME
is join
column
VEHICLE NAME
In-Memory-Expression
Net = Price + Price * Tax
CREATE TABLE SALES (
PRICE NUMBER, TAX NUMBER, …,
NET AS (PRICE + PRICE * TAX))
INMEMORY;
Sammelt
CREATE INMEMORY JOIN GROUP V_name_jg
(VEHICLES(NAME),SALES(NAME));
automatisch die
Top 20 analytischen Abfragen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Oracle Confidential
–
222
In-Memory im Data Warehouse
• Komplexe Abfragen auf viele Daten
–
–
–
–
mit mehreren Joins
Sub-Selects
Groupings
Analytische Funktionen
Keine repräsentative Hardware: Laptop mit Intel i5-3320M 2,6 GHz CPU und 4 GB In-Memory-Storage
Beispielabfrage
Subselect
Ohne In-Memory
Analytic
Grouping
Functions
P1
P4
Mit In-Memory
P1
P4
#Joins
#Where
Condition
Umsatz pro Region, Zeit,
Vertriebskanal, , Berufsgruppe
Sortiert nach Kriterien (Abf. 2)
5
5
-
1
1
14,35
27,00
1,10
0,53
Stärkster Umsatzmonat pro
Bundesland in 2010 (Abf. 8)
3
2
1
3
2
26,66
35,03
1,00
0,54
Top 10 Artikel bezogen auf
Umsatz in einem Jahr pro
Bundesland in 2010 (Abf. 10)
4
3
1
4
3
23,14
32,03
3,02
1,55
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitionierung und In-Memory-Kompression
Partitionierte
Tabelle
Juni 14
MEMCOMPRESS FOR DML
ständige Updates
Mai 14
April 14
März 14
MEMCOMPRESS FOR QUERY LOW
ausschließlich Lesen
Februar 14
Januar 14
Dezember 13
MEMCOMPRESS FOR CAPACITY LOW
gelegentliches Lesen
November 13
Oktober 13
September 13
August 13
Juli13
MEMCOMPRESS FOR CAPACITY HIGH
kaum Leseaktivitäten
Juni 13
April 13
März 13
Februar 13
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Oracle In-Memory Advisor
• New In-Memory Advisor
• Analysiert bestehenden DB
Workload über AWR & ASH
Repository
• Liefert eine Liste von Objekten,
die am meisten von InMemory-Colume-Storage
profitieren
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Mögliches Vorgehen : Virtualisierung User View Layer
Enterprise Layer
• Im Enterprise Layer müssen
– Dimensionsschlüssel müssen bereits
existieren
– Historisierung
• Historisierung
• Kaum physikalische Persistenz
auf den Festplatten
• Zugewinn
– Flexiblere und schneller Bereitstellung
multidimensionaler Strukturen
– Weniger Plattenplatz weil weniger
Redundanz
im Schichtenmodell
– Mehr Performance
REGION
REGIONNR
REGIONNR
LAND
LANDNR
LANDNR
KREISNR
KREIS
User View Layer
REGION
REGIONNR
LAND
LANDNR
KREISNR
KREIS
ORTNR
ORT
REGION_ID
Dimension als View auf
In-Memory
Stammdaten
Mav
KZ
VW_ORT
KREISNR
ORTNR
ORT
REGION_ID
ARTIKEL_ID
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NR
GRUPPE_NAME
SPARTE_NR
ARTIKEL_ID
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NR
SPARTE_NAME
VW_ARTIKEL
SPARTE_NR
SPARTE_NAME
ZEIT_ID
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
Kleine Dimensionen
terden persistiert
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
226
Komplexität von Joins im virtuellen Data Mart ist
überschaubar
ARTIKEL_ID
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SEGMENT_NR
SEGMENT_NAME
SPARTE_NR
SPARTE_NAME
View
D_ARTIKEL
Data Mart
User View Layer
In-Memory-Load
(Nur 15 von 60
Partitionen und
8 von 25 Spalten,
Datenreduzierung
> 90%)
A l l e
100000
Einzelartikel
ARTIKEL_ID
ARTIKEL_NAME
GRUPPE_NR
Transaktionsdaten
500 Millionen Sätze
T a b e l l e n
1000
Artikelgruppen
GRUPPE_NR
GRUPPE_NAME
SEGMENT_NR
I n - M e m o r y
100
Artikelsegmente
SEGMENT_NR
Segment_NAME
SPARTE_NR
10
Artikelsparten
SPARTE_NR
SPARTE_NAME
Core
Warehouse
Enterprise Layer
Die Anzahl Zeilen in den von dem Join betroffenen
Tabellen nimmt in einer Dimension sehr schnell ab
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
227
Effekte des Virtualisierungs-Szenarios
Klassische
Lösung
Virtualisierung
Data Marts
Antwortzeit
Beispielabfrage
Indexe
30- 50 Sek. (Platte)
3- 5 Sek. (Cache)
0.5 – 1 Sek.
Bitmap-Indexe
keine
Plattenplatz
Redundanzen zwischen
Kern-DWH und Data Marts
Minus 20 – 50 %
Wegfall Redundanz + Indexe
ETL-Aufwand
Aufbau Data Marts
~ minus 20%
(einfache ETL-Strecken fallen weg)
Anzahl
Tabellen
100 %
~ minus 10% Gesamt-Anzahl
~ minus 50 % der großen Tabellen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
228
Ist In Memory nur etwas für große Systeme?
• Nein
• Vor allem auch kleinere
Umgebungen profitieren
Ohne Inmemory
Mit Inmemory
Potenzielles Leistungsvermögen
200 MB / Sec / Core = 1,6 GB / Sec
PARALLEL 4 optimal
Potenzielles Leistungsvermögen
200 MB / Sec / Core = 1,6 GB / Sec
PARALLEL 16 optimal
• Sie haben oft kein eigenes
Storage-System, sondern
hängen am SAN und
konkurrieren mit vielen OLTPAnwendungen
• Das SAN wirkt oft als
„IO-Bremse“
• Mit In-Memory machen sich
kleinere Systeme
IO-unabhängig!
> 5 GB / Sec
In Memory
Column Store
700 MB / Sec
700 MB / Sec
Andere
OLTP
Anwendungen
SAN
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Andere
OLTP
Anwendungen
SAN
DATA WAREHOUSE
229
Laden und Updaten im Data Warehouse mit
Bordmitteln der Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
230
Ziele und Aufgaben
Was wird geladen
• Bereitstellen von Daten in adäquater
Weise
• Es sollte nur das geladen werden, was
wirklich gebraucht wird
– Zeitlich passend
– Richtige Form
– Passende Inhalte
• Gibt es einen Auftrag für das Laden
bestimmter Daten?
– Wer braucht die Daten?
– Welche Daten werden gebraucht?
• Daten so ablegen, dass man sie
wiederfindet
– Dokumentation
• Daten Ressourcen-ökonomisch speichern
– Berücksichtigung von Plattenplatz
• Sind die zu ladenden Daten in einem
brauchbaren Zustand?
– Welche Anforderungen sind an Quelldaten zu
stellen?
– Wer definiert die Anforderungen?
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
231
Schichtenmodell zur Organisation des ETL-Prozesses nutzen
Data Integration Layer
User View Layer
Enterprise Information Layer
Repository
(Glossar, alle Objekte)
Richtig
selektieren
Die Masse
aller
Prüfungen
StammReferenzdaten
aktualisieren
R
R
T
S
T
S
S
B
T
B
B
ETL: Kosten
pro Kunde
Nur
denormalisierende
Joins
B
B
B
D
ETL: Kosten
pro Kunde
D
F
ETL: Kosten
pro Kunde
D
D
D
ETL: Kosten
pro Kunde
Möglichst viele
Kennzahlen in die
Datenbank
F
D
F
D
D
Die frühest mögliche Stelle für Transformationen finden
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
232
Verfahren für schnelles ETL in der Datenbank
Data Integration
Layer
Selektieren
Statt
kopieren
Direct Path
in temporäre
Tabellen
Contraintfreies
Prüfen mit
Mengenbasiertem
SQL
User View
Layer
Enterprise Information
Layer
Partition
Exchange
&LOAD
in partit.
Tabellen
(PEL)
Unveränderte
Bewegungsdaten liegen
lassen
Große
Fakten-Tab.
über PEL.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Kennzahlen ausschließlich
über
MAVRefresh
Bekannte
Kennzahlen
in die DB
weniger
Koipien in
BI-Tools
DATA WAREHOUSE
Direct Path / Convential Path
Convential Path
• Reuse Free Space in Blöcken
• Constraint Checks
• Undo Data / Logging
• Daten zunächst immer in SGA Buffer
Direct Path
• Schreiben oberhalb der High Water Marks
• Keine Constraint Checks
• Kein Logging
• Daten nicht in SGA Buffer
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Convential und Direct Path Load
Convential Path
Direct Path
• Konkurriert mit allen anderen Prozessen im BufferManagement
• Baut Column-Array-Struktur auf und gibt
diese direkt an die Load Engine der DB
• Baut SQL-Struktur auf, die dann zu analysieren ist.
• Sucht nach nicht vollständig gefüllten Blöcken und
füllt diese
• Sinnvoll bei:
– Beschreiben von indizierten Tabellen
– Parallel zu anderen Loadvorgängen stattfindenden
Loads
(kein exklusiver Zugriff möglich)
– Bei dem Laden von kleinen Datenmengen in Tabellen
mit großen Indizes
– Bei Tabellen mit Constraints
236
– Ohne zuvor in Buffer zu schreiben
– Bildet neue Blöcke und schreibt diese direkt
weg
• Sinnvoll bei:
– Nicht indizierten Tabellen
(Index würde bei dem Zusammenführen mit
neuen Einträgen kopiert werden. Das kostet
Zeit)
– Nicht mit Constraints (PK/FK) belegten Tabellen
(Constraints werden zunächst ausgeschaltet
und nachträglich wieder aktiviert. Das kann
insgesamt länger dauern)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Hinweise zum Direct Path Load
create table tab (a integer);
insert /*+ append */ into tab select rownum from dual;
select * from tab;
FEHLER in Zeile 1:
ORA-12838: Objekt kann nach paralleler Änderung nicht gelesen/geändert
werden
• Zieltabelle ist exklusiv nur für den Ladelauf geöffnet
• Schreibt immer oberhalb der High Watermark
– Bei der Definition der Tabellen PCTFREE klein wählen (abhängig von späteren UPDATEVorgängen)
– Bei der Definition der Tabellen PCTUSED klein wählen
(lässt die Blöcke möglichst voll werden)
237
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Table Functions – Pipeline-Verfahren
Parallelisierung trotz aufwendiger Programmierlogik
tf1
tf2
Quelle
Ziel
tf3
Stage_tabelle
INSERT INTO Ziel SELECT * FROM TABLE(tf2(SELECT * FROM
TABLE(tf1(SELECT
INSERT INTO Ziel SELECT
238
* FROM Quelle))))
* FROM tf( SELECT * FROM (Stage_tabelle))
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Mengenbasierte Verarbeitung
Trotz Programmierung
INSERT INTO Table
SELECT Feld1, Feld2
Table_Function(
FROM
)
Funktion
Variante 1
Variante 2
Cursor
Fetch
Loop
If a = b...
Update...
Case...
pipe
row(record Type)
• Schnelle Verarbeitung (Pipelined)
• Objekttechnik
• Parallelisierung
• Mehrere Rückgabewerte
und Einzelrückgaben
• Cursor als Input
• Schachtelbar
Return Table
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
239
Partition Exchange Loading (PEL)
Temporäre Tabelle
Financial
Production
Neuer Monat
Human Res.
P1
P2
P3
P4
Store
Supplier
Marketing
Service
4
4
9
8
Zeit
Monat 13
Parallel Direct Path INSERT
(Set Based)
CREATE TABLE AS SELECT
(CTAS)
CREATE Indizes / Statistiken anlegen
EXCHANGE Tabelle
• Unvergleichbar schnell!
243
Z1
Z2
Z3
Z4
Monat 12
Monat 11
Monat 10
DROP
PARTITION
Region
Faktentabelle
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partition Exchange Loading (PEL)
-- Leere Partition an Zieltabelle hinzufügen
ALTER TABLE Bestellung ADD PARTITION "Nov08"
VALUES LESS THAN (to_date('30-Nov-2008','dd-mon-yyyy'));
-- Neue leere temporäre Tabelle erstellen
CREATE TABLE Bestellung_temp AS
SELECT * FROM Bestellung WHERE ROWNUM < 1;
1
2
-- Inhalte laden
INSERT INTO "PART"."BESTELLUNG_TEMP"
(BESTELLNR, KUNDENCODE, BESTELLDATUM, LIEFERDATUM, BESTELL_TOTAL, AUFTRAGSART, VERTRIEBSKANAL)
VALUES ('2', '3', TO_DATE('23.Nov.2008', 'DD-MON-RR'),
3
to_date('23.Nov.2008', 'DD-MON-RR'), '44', 'Service', '6');
Commit;
-- Erstellen Index auf temporäre Tabelle
CREATE INDEX Ind_Best_Dat_Nov ON Bestellung_temp ("BESTELLNR") NOLOGGING PARALLEL;
4
-- Temporäre Tabelle an die Zieltabelle anhängen
ALTER TABLE Bestellung EXCHANGE PARTITION "Nov08“ WITH TABLE Bestellung_temp
INCLUDING INDEXES WITHOUT VALIDATION;
244
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
5
Exchange Partition
Data Integration
Layer
Enterprise Information
Layer
Älteste
Checks
CTAS
Tmp_table
Direct Path
User View
Layer
Archivieren
(drop partition)
Mai
Juni
Juli
August
September
Oktober
November
Alter table
add partition
Alter table exchange partition
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Aufbau Fakten-Tabellen
Data Integration
Layer
Archivieren
(drop partition)
Älteste
Checks
CTAS
Tmp_table
Direct Path
User View
Layer
Enterprise Information
Layer
Fact-Table
Juni
Juli
August
September
Mai
Juni
Juli
August
September
Oktober
November
Oktober
November
Tmp_table
CTAS
Tmp_table
Alter table
exchange partition
Alter table exchange partition
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Set-Based ETL-Prüf- und –Transformations
Techniken in der Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
247
Umgang mit SQL und PL/SQL im DB-ETL
So nicht ...
Aber z. B. so ...
Create or replace procedure Proc_A
V1
number;
V2
number;
V3
varchar2;
V4
varchar2;
....
Cursor CS as select s1,s2 from tab_src;
Begin
open CS;
loop
fetch CS into v1,v2,...;
select f1 into v3 from tab1;
select f1 into v4 from tab2;
insert into Ziel _tab s1,s2,s3,s4
values(v1,v2,v3,v4);
end;
end;
insert into ziel
select f1, f2, f3, f4 from
(with CS as
select s1 v1,s2 v2 from tab_src
Select tab1.f1 f1 ,tab2.f2 f2, CS.s1 f3,CS.s2 f4
from tab1,tab2,CS
Where...
);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Es gibt 6 Prüf-Kategorien
Tabellen-über
greifende Regeln
Attribut-bezogene Regeln
1.
2.
Not Null / Pflichtfelder
Formatangaben
numeric
Alphanumerisch
Date
Masken
a)
b)
c)
d)
A
3.
4.
9.
D
B
Abhängigkeiten von Werten in anderen
Attributen desselben Satzes
C
8.
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
E
12.
13.
14.
Referenz-Zusammenhänge
Verweise auf Sätze einer anderen Tabelle (Relation)
Zeitinvariante Inhalte (z. B. Anz. Bundesländer)
Zeitabhängige Veränderungen
Über die Zeit mit anderen Daten korrelierende Feldinhalte
Verteilungs-/Mengen-bezogene Regeln
F
15.
Verteilung
a)
b)
Rekursive Zusammenhänge
Verweise auf andere Sätze derselben Tabelle (Relation)
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
Zeit-/ Zusammenhang-bezogene Regeln
Primary Key / Eindeutigkeit
Aggregat – Bedingungen
a)
b)
Aggregat – Bedingungen
–
Satz-übergreifende Regeln
6.
7.
10.
11.
Ober-/Untergrenzen / Wertelisten
Satz-bezogene Regeln
5.
Child-Parent (Orphan)
Parent-Child
a)
b)
a)
b)
Div. Check Constraint
Wertbereiche
–
Foreign Key
16.
Arithmetische Mittel
Varianz / Standardabweichungen
Qualitätsmerkmale und Mengen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Mengen-basierte Prüfungen mit SQL
Attribut-bezogene Regeln
1.
2.
numeric
Alphanumerisch
Date
Masken
a)
b)
c)
d)
A
3.
4.
B
Not Null / Pflichtfelder
Formatangaben
Div. Check Constraint
Wertbereiche (Ober-/Untergrenzen / Wertelisten)
Satz-bezogene Regeln
5.
Abhängigkeiten von Werten in anderen Attributen desselben
Satzes
Satz-/Tabellen-übergreifende Regeln
6.
7.
Primary Key / Eindeutigkeit
Aggregat – Bedingungen
a)
b)
C,D
8.
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
Rekursive Zusammenhänge
Verweise auf andere Sätze derselben Tabelle (Relation)
9.
Foreign Key
Child-Parent (Orphan)
Parent-Child
a)
b)
10.
Aggregat – Bedingungen
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
a)
b)
11.
select
bestellnr,
case
when -- wenn Feld BESTELLNR nicht numerisch
REGEXP_LIKE(BESTELLNR, '[^[:digit:]]')
then 1
else 0
End Num_Check_bestellnr
select
from bestellung;
CASE
WHEN (F1 = 3 and F2 = F3 + F4)
then 1
ELSE 0
end
from fx
insert /*+ APPEND */ into err_non_unique_bestellung
select bestellnr from
(select
count(bestellnr) n,
bestellnr
from bestellung
group by bestellnr)
where n > 1;
Referenz-Zusammenhänge
–
Verweise auf Sätze einer anderen Tabelle (Relation)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Abarbeitungslogik für Einzelfeldprüfung mit CASE
• Temporäre Tabelle ist optional
– Ist wesentlich übersichtlicher
– Erlaubt Kombination von unterschiedlichen Prüfkriterien
Gepruefte_Daten
Kopieren
Stage-Tabelle
Varchar2()
Feld1
Feld2
Feld3
INSERT INTO
temp_table
SELECT
CASE
....
FROM
Stage_Table
Temp-Tabelle
Varchar2()
Feld1
Feld2
Feld3
Feld1_is_null
Feld1_is_numeric
Feld2_is_numeric
INSERT ALL
WHEN
Feld_1_is_null =1
into
Error_Daten
WHEN
Feld_1_is_null=0
into
Gepruefte_Daten
Date
Number
Varchar2()
Error_Daten
Date
Number
Varchar2()
251
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Error Logging
• Constraints
– Unique Key / Primary Key
– Foreign Key
– NOT NULL
– Check Constraint
Kunde
INSERT INTO Kunde
VALUES (......)
LOG ERRORS INTO
kunde_err('load_2004
0802')
KUNDENNR
VORNAME
NACHNAME
ORTNR
STRASSE
TELEFON
Kunde_err
KUNDENNR
VORNAME
NACHNAME
ORTNR
STRASSE
TELEFON
ORA_ERR_NUMBER$
ORA_ERR_MESG$
ORA_ERR_ROWID$
ORA_ERR_OPTYP$
ORA_ERR_TAG$
252
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Check Constraint mit Regular Expressions
CREATE TABLE Check_KUNDE (
KUNDENNR
NUMBER,
GESCHLECHT
NUMBER,
VORNAME
VARCHAR2(50),
NACHNAME
VARCHAR2(50),
ANREDE
VARCHAR2(10),
GEBDAT
DATE,
ORTNR
NUMBER,
STRASSE
VARCHAR2(50),
TELEFON
VARCHAR2(30)
);
Regel:
Im Kundennamen müssen Buchstaben
vorkommen und
keine reine Zahlenkolonne
ALTER TABLE check_kunde
ADD CONSTRAINT Ch_KD_Name
CHECK(REGEXP_LIKE(NACHNAME, '[^[:digit:]]'));
INSERT INTO check_kunde (Kundennr, Geschlecht, Vorname, Nachname, Anrede, Gebdat,
Ortnr, Strasse, Telefon)
VALUES (9,1,'Klaus','123','Herr','01.01.60',2,'Haupstr.',08923456);
FEHLER in Zeile 1:
ORA-02290: CHECK-Constraint (DWH.CH_KD_NAME) verletzt
• Verwendung von Regular Expressions steigert die Performance bei
Prüfungen
253
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Dimension
Umschlüsseln mit Key Lookup
Künstl. Schlüssel (Primary Key)
Log.Business Schlüssel (Alternate Unique)
6
5
4
3
2
1
KD_66
KD_55
KD_44
KD_33
KD_22
KD_11
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Join Lookup
Log.Business Schlüssel
Satz12
AA
34
dddf
KD_11
1
DFG
64
dloidf
Satz13
DFG
64
dloidf
KD_22
2
DFG
64
dloidf
Satz14
erf
78
ghzf
KD_33
3
erf
78
ghzf
Satz15
sdfg
4456
llkof
KD_44
4
sdfg
4456
llkof
Fakten
Bewegungsdaten
254
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lookup-Verfahren mit Aktualisierung (Stammdaten)
Join
Bewegungssätze
Zielsätze
Anti –
Join
Referenzdaten
Tmp Table
alle Sätze ohne
Referenz
Insert mit
Dummy –
Schlüssel
Protokoll
255
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Künstl. Schlüssel (Primary Key)
Log.Business Schlüssel (Alternate Unique)
Sequenz
Next Val 7
1. Schritt
7
KD_99
Dummy
Dummy
Dummy
6
5
4
3
2
1
KD_66
KD_55
KD_44
KD_33
KD_22
KD_11
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Anti - Join
Wenn nicht in Dimension
enthalten dann
Dimension
2. Schritt
Join Lookup
INSERT INTO Dim
SELECT .... FROM Bew, Dim
WHERE Log Key NOT IN Dim
DATA WAREHOUSE
Log.Business Schlüssel
Satz12
XX
567
ddwer
KD_99
7
XX
567
ddwer
34
dddf
KD_11
1
DFG
64
dloidf
Satz12
AA
Satz13
DFG
64
dloidf
KD_22
2
DFG
64
dloidf
Satz14
erf
78
ghzf
KD_33
3
erf
78
ghzf
Satz15
sdfg
4456
llkof
KD_44
4
sdfg
4456
llkof
Bewegungsdaten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Fakten
DATA WAREHOUSE
256
Native Support für Pivot und Unpivot
Sinnvoller Einsatz im Rahmen
des ETL-Prozesses
SALESREP
Q1
Q2
Q3
Q4
---------- ----- ----- ----- ----100
230
240
260
300
101
200
220
250
260
102
260
280
265
310
257
SALESREP
---------100
100
100
100
101
101
101
101
102
102
102
102
QU
REVENUE
-- ---------Q1
230
Q2
240
Q3
260
Q4
300
Q1
200
Q2
220
Q3
250
Q4
260
Q1
260
Q2
280
Q3
265
Q4
310
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Native Support für Pivot und Unpivot
Sinnvoller Einsatz im Rahmen
des ETL-Prozesses
QUARTERLY_SALES
SALESREP
Q1
Q2
Q3
Q4
---------- ----- ----- ----- ----100
230
240
260
300
101
200
220
250
260
102
260
280
265
310
SALESREP
---------100
100
100
100
101
101
101
101
102
102
102
102
QU
REVENUE
-- ---------Q1
230
Q2
240
Q3
260
Q4
300
Q1
200
Q2
220
Q3
250
Q4
260
Q1
260
Q2
280
Q3
265
Q4
310
select * from quarterly_sales
unpivot include nulls
(revenue for quarter in (q1,q2,q3,q4))
order by salesrep, quarter ;
258
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Native Support für Pivot und Unpivot
Sinnvoller Einsatz im Rahmen
des ETL-Prozesses
SALESREP 'Q1' 'Q2' 'Q3' 'Q4'
---------- ----- ----- ----- ----100
230
240
260
300
101
200
220
250
260
102
260
280
265
310
SALES_BY_QUARTER
SALESREP
---------100
100
100
100
100
100
100
101
101
101
101
102
QU
REVENUE
-- ---------Q1
230
Q2
240
Q3
160
Q4
90
Q3
100
Q4
140
Q4
70
Q1
200
Q2
220
Q3
250
Q4
260
Q1
260
select * from sales_by_quarter
pivot (sum(revenue)
for quarter in ('Q1','Q2','Q3','Q4'))
order by salesrep ;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
259
Aggregate bilden
• Bereitstellung in Form von Materialized Views
– Spart einen separaten ETL-Lauf
– Flexibler, weil nur 1 SQL-Kommando nötig
– Geht zu Lasten der Dokumentation
• Mit Partition Change Tracking die Aktualisierung der MAVs steuern
– Auch andere Refresh-Mechanismen nutzen
260
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Multiple
Inserts
261
INSERT ALL
WHEN STATUS = 'P'‚
THEN INTO WH_TRANS_PRIVAT
(BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS)
VALUES
(BESTELLMENGE$1,KUNDENCODE$1,BESTELL_TOTAL$1,STATUS)
WHEN STATUS = 'F'‚
THEN INTO WH_TRANS_FIRMA
(BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS)
VALUES
(BESTELLMENGE$1,KUNDENCODE$1,BESTELL_TOTAL$1,STATUS)
SELECT WH_TRANSAKTIONEN.BESTELLMENGE BESTELLMENGE$1,
WH_TRANSAKTIONEN.KUNDENCODE KUNDENCODE$1,
WH_TRANSAKTIONEN.BESTELL_TOTAL BESTELL_TOTAL$1,
WH_TRANSAKTIONEN.STATUS STATUS
FROM
WH_TRANSAKTIONEN WH_TRANSAKTIONEN
WHERE
(WH_TRANSAKTIONEN.STATUS = 'P‚ /*SPLITTER.PRIVATKUNDEN*/)
OR
(WH_TRANSAKTIONEN.STATUS = 'F‚ /*SPLITTER.FIRMENKUNDEN*/);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
MERGE-Funktion
• Funktion MERGE dient dem
gleichzeitigen INSERT und UPDATE
• Basierend auf dem Matching des
definierten Schlüssels (ON-Klausel)
• Auch DELETE-Operationen möglich
262
MERGE INTO "Kunde_TGT" USING
(SELECT
"KUNDEN_STAMM"."KUNDENNR" "KUNDENNR",
"KUNDEN_STAMM"."VORNAME" "VORNAME",
"KUNDEN_STAMM"."NACHNAME" "NACHNAME",
"KUNDEN_STAMM"."STATUS" "STATUS",
"KUNDEN_STAMM"."STRASSE" "STRASSE",
"KUNDEN_STAMM"."TELEFON" "TELEFON",
"KUNDEN_STAMM"."TELEFAX" "TELEFAX„
FROM "KUNDEN_STAMM" "KUNDEN_STAMM") MERGE_SUBQUERY
ON ( "Kunde_TGT"."KUNDENNR" = "MERGE_SUBQUERY"."KUNDENNR")
WHEN NOT MATCHED THEN
INSERT
("Kunde_TGT"."KUNDENNR",
"Kunde_TGT"."VORNAME",
"Kunde_TGT"."NACHNAME",
"Kunde_TGT"."STATUS",
"Kunde_TGT"."STRASSE",
"Kunde_TGT"."TELEFON",
"Kunde_TGT"."TELEFAX")
VALUES
("MERGE_SUBQUERY"."KUNDENNR",
"MERGE_SUBQUERY"."VORNAME",
"MERGE_SUBQUERY"."NACHNAME",
"MERGE_SUBQUERY"."STATUS",
"MERGE_SUBQUERY"."STRASSE",
"MERGE_SUBQUERY"."TELEFON",
"MERGE_SUBQUERY"."TELEFAX")
WHEN MATCHED THEN UPDATE
SET
"VORNAME" = "MERGE_SUBQUERY"."VORNAME",
"NACHNAME" = "MERGE_SUBQUERY"."NACHNAME",
"STATUS" = "MERGE_SUBQUERY"."STATUS",
"STRASSE" = "MERGE_SUBQUERY"."STRASSE",
"TELEFON" = "MERGE_SUBQUERY"."TELEFON",
"TELEFAX" = "MERGE_SUBQUERY"."TELEFAX";
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lade-Transaktionssteuerung innerhalb der
Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
263
Aufgabenstellung der Lade-Transaktion
• Betrachten des kompletten Ladelaufs als eine zusammenhängende
Transaktion
– Entweder alle Sätze oder keine geladen
• Wie können abgebrochene Ladeläufe wieder rückgängig gemacht
werden?
264
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Transaktionssteuerung / -rücksetzung
• Markieren von Sätzen eines Ladelaufs in zusätzlichen Feldern
– Ladelauf-Nummer, Ladelauf-Datum, ...
– Zurückrollen durch langsames Einzel-DELETE
3
• Arbeiten mit Partitioning
– Aufbau einer neuen Partition unabhängig von der Zieltabelle
– Schnelles DROP PARTITION im Fehlerfall
– Einfachste und schnellste Variante
2
• Flashback Database / Table / Query
– Transaktions-genaues Zurückrollen
– Flashback DB benötigt zusätzlichen Plattenplatz
265
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
1
DATA WAREHOUSE
Flashback
• Steuerung über
– SCN ( Sequence Change Number / Log Archiving)
– Zeit (Timestamp)
– Restore Point
ETL
Flashback Recovery Area
Zeit
Log
SCN
Restore Point
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
266
Flashback Technologie in der Datenbank
Flashback table x to scn 16552768;
• Flashback Table
• Flashback Drop
• Flashback Query
• Flashback Versions Query
• Flashback Transaction Query
• Flashback Database
• Flashback Data Archive
SELECT * FROM employees AS OF TIMESTAMP
TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
WHERE last_name = 'Chung';
SELECT versions_startscn, versions_starttime,
versions_endscn, versions_endtime,
versions_xid, versions_operation,
last_name, salary
FROM employees
VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2008-12-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS') AND
TO_TIMESTAMP('2008-12-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS') WHERE
first_name = 'John';
SELECT xid, operation, start_scn,
commit_scn, logon_user, undo_sql
FROM flashback_transaction_query
WHERE xid = HEXTORAW('000200030000002D');
Flashback Database to scn 16552768;
Flashback Database AS OF TIMESTAMP
TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel Flashback Table
CREATE TABLE x (Nummer number);
ALTER TABLE x ENABLE ROW MOVEMENT;
INSERT INTO X VALUES (1);
INSERT INTO X VALUES (1);
INSERT INTO X VALUES (1);
COMMIT;
Jetzt erst wird eine SCN erzeugt
Abfrage u. Flashback der letzten Änderungs-SCN
SELECT ora_rowscn FROM x;
SELECT * FROM x AS OF SCN 12555060;
SELECT * FROM x AS OF TIMESTAMP to_timestamp('2012-02-15 10:15:00', 'YYYY-MM-DD HH:MI:SS');
Zurücksetzen
Flashback table x to scn 16552768;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
268
Flashback Database
• Flashback Database
–
–
–
–
–
Erstellen der Fast (Flash) Recovery Area
Restart Database ( mount exclusive, wenn DB <11.2)
SQL> ALTER DATASE FLASHBACK ON;
SQL> ALTER SYSTEM SET db_flashback_retention_target = <number_of_minutes>;
SQL> ALTER DATABASE OPEN;
• Restore Points (ab 11.2 im laufenden Betrieb)
– create restore point PRE_LOAD;
– create restore point PRE_LOAD guarantee flashback database;
(impliziert das Anlegen von Flashback Logs)
– drop restore point PRE_LOAD;
• Anwendung eines Restores nur im DB Mount-Status
– flashback database to restore point PRE_LOAD;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Security und Mandantensteuerung im Data
Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
270
Sicherheit in der Datenbank
Service
Servicekunde
Integration
Layer
BI-Anwendungen werden im Schnitt alle 4 Jahre ausgetauscht
Oft laufen mehrere BI-Anwendungen parallel
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
BI Plattform
Referenzdaten (extern) (10%)
Stammdaten (10%)
Bewegungsdaten / Transaktionen (80%)
Logistik
Logistikaufwand
Controlling
Marketingsicht
Sozialsituation
Kundenhistorie
Profitabilität
ODBC
Vorberechnete
Kennzahlen
Profitabilität
C
Einkauf
Q
Kunde
A
MJ
Produkte&Trends
Vertrieb
Kundenhistorie
A
L
Logistikaufwand
für einen Kunden
Produkte&Trends
Data Mining
Statistikdaten
Servicekunde
Oracle R
Marketing
Marketingsicht
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Zwei Level des Zugriffs-Monitoring
1) Standard Auditing
2) Fine Grained Auditing
Statement
level. all
statements
in a sessions
any objects
Granting
Priviliges
activities
Object
level
(update, insert
delete, select)
By session
X
X
X
By access
X
Monitoring of all activities by
User by session, by object.
- Action based auditing
(e. g. analysing the predicate
example: value > 100000)
- all detailed commands
- Timestemps
-trials and successes
- Additional triggers
- notifications and other actions
DATA WAREHOUSE
Audit select on F_UMSATZ;
X
X
EXECUTE DBMS_FGA.ADD_POLICY(
object_schema => 'DWH‘
,
object_name
=> 'F_UMSATZ’,
policy_name
=> 'Chk_F_Umsatz', statement_types=> 'SELECT’
, enable
=> TRUE);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
272
sondern so...
Nicht so...
Mandant 1
Mandant 2
Mandant 3
Mandant4
Mandant 5
Mandant 6
Channels
Kunde
Channels
Kunde
Channels
Kunde
Channels
Kunde
Umsatz
Channels
Kunde
Umsatz
Channels
Kunde
Umsatz
Umsatz
Zeit
Produkte
Umsatz
Zeit
Produkte
Umsatz
Zeit
Produkte
Zeit
Produkte
Zeit
Produkte
Zeit
Produkte
Channels
Kunde
Alle Mandanten
in einer Tabelle
Umsatz
Zeit
Produkte
DATA WAREHOUSE
Nur einmal pflegen und verwalten!
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
273
Fine Grained Security on Row level
Zu lesenden Objekte
Zugreifende Users
User: DataMart1
User_Table
Context
User 2
User 3
Set User Context
Set User Context
select
sum(UMSATZ)
from umsatz;
select
sum(UMSATZ)
from umsatz;
Build Predicate Procedure
Partner
Catalog
Channels
Internet
Direct Sales
Kunde
Umsatz
Zeit
Predicate
Add / DROP Policy
Sieht nur
Partner-Umsatz
Sieht nur
Katalogwaren-Umsatz
Produkte
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA
DATAWAREHOUSE
WAREHOUSE
274
Auf der Seite des zu lesenden Objektes
Auf der Seite des zugreifenden Users
Definieren der Policy
Logon-Trigger
create or replace package channel_security as
function channelnum_sec (A1 VARCHAR2, A2 varchar2)
return varchar2;
end;
/
create or replace package body channel_security as
function channelnum_sec (A1 VARCHAR2, A2 varchar2)
return varchar2
is
d_predicate varchar2(2000);
v_channel_id number;
begin
select sys_context('channel_info','channel_num') into v_channel_id from DUAL;
d_predicate := 'SALES.CHANNEL_ID = '||v_channel_id||' or '||v_channel_id||' = 10';
return d_predicate;
end;
end;
/
Aktivieren der Policy
exec dbms_rls.drop_policy('AREA1','SALES','CHANNEL_POLICY');
exec dbms_rls.add_policy('AREA1','SALES','CHANNEL_POLICY','AREA1',
'channel_security.channelnum_sec','SELECT');
CREATE OR REPLACE TRIGGER vpd_init_trig AFTER LOGON ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'DROP CONTEXT channel_infostr';
EXECUTE IMMEDIATE 'CREATE CONTEXT channel_info using user_context';
system.User_context.select_user_Channel;
EXCEPTION
WHEN NO_DATA_FOUND THEN null;
end;
Erstellen des Kontextes
create or replace package User_context as
Procedure select_user_Channel ;
end;
/
Create or replace Package Body User_context as
Procedure select_user_Channel is
Channelnum number;
begin
select channel_id into Channelnum from area1.user_table where
upper(User_name) = sys_context('USERENV', 'SESSION_USER');
dbms_session.set_context('channel_info', 'channel_num',Channelnum);
end;
end;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA
DATAWAREHOUSE
WAREHOUSE
275
Label Security
• Regelgestützter Zugriffsschutz auf Record-Ebene
Label Security Policies
Data Label Components
User Labels
Maximum / Minumum / Default /
Row Level
Read / Write Compartments
Bis zu 9999
Bis zu 9999
Bis zu 9999
Read / Write Groups
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
276
Beispiel über die Wirkungsweise
Sätze einer Tabelle werden „gelabelt“
Benutzer erhalten „User Labels“
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
277
Redaction und Encryption
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Oracle Confidential
–
278
Encryption
• Schutz vor nicht autorisiertem Lesen von Datenträgern, Tablespaces, Files etc.
• Findet im Verlauf der DB-Installation statt
• Online – Encryption von Tablespaces
• Ausnutzen von CPU-basierter Hardware (Intel + SPARC Plattform)
– Performance
• Ausnutzen der Smart-Scan-Prozessen in Storage-Servern (Exadata)
• Separates Vorhalten von Encryption Schlüssel
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
279
Redaction (Maskierung)
• Selektives Maskierung von sensiblen Daten als Schutz vor
unberechtigtem Lesen
• SQL-Leseoperation und die gespeicherten Daten bleiben unverändert
– Daten werden erst nach dem Lesevorgang und unmittelbar vor der Anzeige der
Daten für den Benutzer „überschrieben“
– -> optimal für Performance
• Varianten
– Full
– Partial (*)
– Regular Expressions
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
280
Redacting Data - Beispiel
Die Daten selbst werden nicht verändert.
Die Maskierung erfolgt erst unmittelbar vor der Anzeige.
In diesem Bsp. Werde die ersten 7 Zeichen
der Column ‘CUSTID‘ mit der Ziffer ‘9‘ maskiert.
Die Spalte LAST_NAME aus der customerTabelle wurde ab dem 3. Zeichen mit ‘*‘ maskiert.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
281
Multi-strukturierte Daten mit JSON
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
JSON (Java Script Object Notation)
• Standardisiertes Format
– ECMA-404 (JSON Data Interchange Format)
– ECMA-262 (ECMAScript Language Specification, third edition)
• Leichteres Format als XML
– Weniger Datenmenge /Overhead
– Einfacher Umgang
• Besonders beliebt bei noSQL-DB- Java – Entwicklern
• Im Hadoop-Umfeld weit verbreitet
• Ab Oracle 12.1.0.2 direkt in der Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
283
Multi-Strukturierte Informationen
INSERT INTO Web_Log_array
VALUES (SYS_GUID(),
SYSTIMESTAMP,
'{"wl_rec_id" : 1600,
"wl_ip_Adr" : "168.192.1.10",
"wl_dns"
: "MP-AM5643",
"wl_start_date" : "11-08-2014:23:21",
"wl_end_date" : "11-08-2014:25:18",
"wl_ses_id" : "77763576423",
"wl_Ses_anz_sec" : "10",
"wl_status" : "ACK"}');
1
2
INSERT INTO Web_Log_array
VALUES (SYS_GUID(),
SYSTIMESTAMP,
'{"wl_rec_id" : 1600,
"wl_ip_Adr" : ["168.192.1.10","168.192.1.11"],
"wl_dns"
: "MP-AM5643",
"wl_start_date" : "11-08-2014:23:21",
"wl_end_date" : "11-08-2014:25:18",
"wl_ses_id" : "77763576423",
"wl_Ses_anz_sec" : "10",
"wl_status" : "ACK"}');
3
INSERT INTO Web_Log_array
VALUES (SYS_GUID(),
SYSTIMESTAMP,
'{"wl_rec_id" : 1600,
"wl_ip_Adr" : {"ip" : "168.192.1.10", "sub" : "255.255.255.0"},
"wl_dns"
: "MP-AM5643",
"wl_start_date" : "11-08-2014:23:21",
"wl_end_date" : "11-08-2014:25:18",
"wl_ses_id" : "77763576423",
"wl_Ses_anz_sec" : "10",
"wl_status" : "ACK"}');
SQL> select wa.Log_Record.wl_ip_Adr from Web_Log_array wa;
WL_IP_ADR
-----------------------------------------------------------------"168.192.1.10"
["168.192.1.10","168.192.1.11"]
{"ip":"168.192.1.10","sub":"255.255.255.0"}
SQL> select wa.Log_Record.wl_ip_Adr.sub from Web_Log_array wa;
WL_IP_ADR
--------------------------------------------------------------"255.255.255.0"
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
284
An welcher Stelle passen JSON-Objekte in das
Data Warehouse ?
• Daten für Auswertungen?
Integration
Layer
User View
Layer
Enterprise Layer
Core - DWH / Info Pool
• Daten zur Aufbewahrung?
• JSON – Format als Vorstufe vor
Einführung von Big Data
JSON
HDFS / NoSQL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
JSON
JSON
Unstructured Data
DATA WAREHOUSE
Die optimale Hardware für das
Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
286
Optimale („Balanced“) Konfiguration
• Anzahl CPU‘s
• ~200 MB Datendurchsatz pro CPU
• Anzahl CPU = Max. Durchsatz in MB/s / 200
• Größe des Speichers in GB = 2 * Anz. CPUs
• Größe des
Hauptspeichers
• Anzahl Platten
• Trennung von Storage für
OLTP und DWH-Systeme !!
• Schnelle Platten nutzen (15000 U/min)
• Eher mehr, kleine Platten nutzen,
als wenige große Platten nutzen
• Flash-Speicher in Betracht ziehen
• ASM in Betracht ziehen
•
Einfaches und DB-optimiertes Verwalten
Anzahl Disk Controller =
Max. Durchsatz in MB/s
Controllerdurchsatz in MB
Controllerdurchsatz in MB =
70% * Herstellerangaben in Gbit/s
8
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
287
Die Hardware Umgebung – Storage
• Trennung von Storage für OLTP und DWH-Systeme
• Schnelle Platten nutzen (15000 U/min)
• Eher mehr, kleine Platten nutzen,
als wenige große Platten nutzen
• Flash-Speicher in Betracht ziehen
• ASM in Betracht ziehen
– Einfaches und DB-optimiertes Verwalten
288
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Messung von IO-Durchsatz
• Einfache Schätzmethode
• Calibrate_IO
– Read-only Test
– Wenige Test-Optionen -> leicht anwendbar
– > 11g
• Orion (ORacle IO Numbers)
– Read / Write – Tests (Achtung schreibt auf Platten)
– Viele Test-Optionen
– OLTP + DWH Workload
– Ab 11.2 im BIN-Verzeichnis der DB
– www.oracle.com/technology/software/tech/orion/index.html
289
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Einfache Schätzmethode zur Lesegeschwindigkeit
Blockgröße
feststellen
select tablespace_name, block_size from dba_tablespaces;
Anzahl Blöcke/
Anzahl Bytes
SELECT table_name, num_rows, blocks,
blocks*8 KB,blocks*8/1000 MB,blocks*8/1000000 GB FROM user_tables;
Messen der
Lesegeschwindigkeit
Berechnung des
Durchsatzes
select count(*)
from bestellung_part_Range_4; -- liest komplette Tabelle
COUNT(*)
TABLESPACE_NAME
BLOCK_SIZE
------------------------------ ---------MON_G
8192
MON
8192
MON_D
8192
MON_E
8192
MON_F
8192
TABLE_NAME
NUM_ROWS
BLOCKS
KB
MB
GB
------------------------------ ---------- ---------- ---------- ---------- ---------BESTELLUNG_PART_RANGE
163840000
962355
7698840
7698,84
7,69884
BESTELLUNG_PART_RANGE_4
163840000
962355
7698840
7698,84
7,69884
---------163840000
Abgelaufen: 00:00:31.32
select 7.7/31 from dual;
SQL>
Ergibt ~0,25 GB pro Sekunde Lesegeschwindigkeit
(Achtung Blöcke eventuell nicht voll, daher geringer )
7.7/31
---------,248387097
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
290
Calibrate_IO
• Einfaches Tool
• Bestandteil des
Ressourcen
Managers
• Wird aus der DB
heraus aufgerufen
SET SERVEROUTPUT ON
DECLARE
lat INTEGER;
iops INTEGER;
mbps INTEGER;
BEGIN
-- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (<DISKS>, <MAX_LATENCY>,
iops, mbps, lat);
DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 10, iops, mbps, lat);
DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
DBMS_OUTPUT.PUT_LINE ('latency = ' || lat);
dbms_output.put_line('max_mbps = ' || mbps);
end;
/
max_iops = 73
latency = 12
max_mbps = 20
291
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
ASM
• Verwalten ganzer Gruppen von Platten
– Keine Einzelaktionen
• DBA übernimmt die Storage-Verwaltung
– Gewohnte Kommandos… SQL Create…
• SAME in der DB
– Verlagern des Striping and Mirroring Everything in die Verantwortung der Datenbank
• Automatische Verteilung der Daten über alle Platten
– Verhindert von Hotspots
– Messung von IO-Zugriffen über DB-Statistiken (ist klassischen RAID-Verfahren überlegen)
• Bequemes Hinzufügen /Wegnehmen von Platten
• Verhindert Fragmentierung der Platten
• Einführung von ASM kann bis 25% verbessertes IO-Verhalten liefern
• Performance kommt an Raw Devices heran
292
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
ASM Architektur
• ASM Disks
– Partitionen oder LUNs, die über das Betriebssystem bereitgestellt werden
•
Ab 11 sind einfache Partitionen, RAW Devices oder auch NFS-Dateien möglich
• ASM Disk Groups
• ASM Files
– Files, die in den Disk Groups abgelegt sind, ohne
dass man deren physischen Ort bestimmt
– Die ASM-Files entsprechen den sonst üblichen
Datenbank-Files (1:1 Mapping)
– Eine oder mehrere ASM Disks
– ASM verteilt diese Files über mehrere physische Bereiche (Platten)
– Logical Volumes – logische Einheit von Speicherplatz
– Die logischen Konzepte wie Extents, Segmente
oder Tablespaces bleiben erhalten
– Eine DB kann mehrere Disk Groups haben
• ASM Failure Groups
– Ensemble von ASM Disk Groups, die als 2 oder 3-Wege-Spiegel
arbeiten
• ASM instance
ASM Disk
ASM Disk
ASM Disk
ASM Disk
ASM Disk
– Ähnlich einer DB-Instanz aber ohne datafiles
– Muss hochgefahren und auch über eine SID ansprechbar sein
293
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Intelligent Data Placement
• Intelligent Placement
• Häufig genutzte Daten werden automatisch auf die äußeren Spuren der Platten gelegt
• Weniger häufige auf die inneren
• Minimiert Verwaltungsaufwand und steigert die Performance um bis zu 50 %
• Bereitstellung der Plattenkapazität
• nicht an dem benötigten Volumen messen sondern an der Performance
• Platten müssen
nicht komplett
Mehr Daten erreichbar bei
gefüllt werden
gleicher Drehzahl
-> häufig genutzte Daten
Weniger Daten erreichbar
bei gleicher Drehzahl
-> seltener genutzte Daten
294
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Options: RAC
Der physische Aufbau einer RAC-Umgebung
Öffentliches Netzwerk
Privates Netzwerk
(Interconnect)
CPU
CPU
CPU
Knoten 1
CPU
CPU
Knoten 2
CPU
CPU
Instanz 1
CPU
Instanz 2
Speichernetzwerk
Daten
295
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Options: RAC
Oracle Cluster-Umgebung –
Real Application Clusters und Automatic Storage Management
Öffentliches Netzwerk
RAC
Privates Netzwerk
(Interconnect)
CPU
CPU
Knoten 1
CPU
Instanz 1
Oracle
Clusterware
CPU
CPU
Knoten 2
CPU
CPU
CPU
Instanz 2
Speichernetzwerk
ASM
296
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Architektonische Vorteile RAC und ETL
• Voraussetzung ETL in der Datenbank
– Nur dieses bringt Last auf die RAC-Knoten
• Verteilung der Datenbank-basierten ETL-Jobs auf unterschiedliche Knoten
• Laufen keine ETL-Jobs
– Knoten frei für andere Datenbank-Aufgaben
• Geringere Hardware-Anschaffungskosten
• Wegfall Backup-Rechner
• Wegfall Netzlast
– Direkter ETL-Zugriff auf Daten der eigenen Datenbank und über schnelle Leitungen
297
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Allgemeine Aufbauempfehlungen - RAC aus ETL-Sicht
• Die Knoten nicht zu klein wählen
– Sollten so stark sein, dass sie zusammenhängende ETL-Jobs auch alleine bewältigen können. (Z. B. 4
CPUs pro Knoten)
• RAC und ETL
– Das System sollte nicht darauf angewiesen sein, über die Knoten hinweg parallelisieren zu müssen, um
zu skalieren.
– Skalierung gelingt über die gezielte Steuerung zusammenhängender Lade-Jobs auf die
unterschiedlichen Knoten.
• Durchsatz für Interconnect 1-2 Gbit / Sec
• Hauptspeicher 4 GB pro CPU
• Durchsatz für das Speichernetzwerk:
pro CPU mindestens 100 MB/Sec
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
298
Monitoring Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
299
Umgang mit Alerts
• Unvorhergesehene Vorgänge
– Statefull Alerts:
Entstehen durch
Überschreiten von Schwellwerten
– Stateless Alerts:
Unvorhergesehene Vorgänge
select metrics_name,
warning_value,
critical_value,
object_type,
object_name,
status
From dba_thresholds
• Z. B. zu wenig Recovery Area Space
300
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Mit OEM
301
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Automatic Database Diagnostic Monitor (ADDM) und AWR
Statistics_level
TYPICAL -> ON
BASIC -> OFF
1
AWR-Report
stündlich
AWR
ADDM
use
MMONProcess
User 1
sysaux
User 2
Findings
1……nn%
2……nn%
3……nn%
…….
2
Recommendations
3
Action
- Hardware
- Init-Parameter
- Space Konfig.
- Performance
Advisor
8 Tage lang
Undo Advisor
302
OEM
Addmrpt.sql
DBMS_ADVISOR Package
SQL Tuning Advisor
Segement Advisor
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
4
Rationale
DATA WAREHOUSE
AWR (Analytic Workload Repository)
• Regelmäßiges Sammeln von einer Vielzahl von System-generierten Statistiken
– Mit Hintergrundprozessen (MMON)
– Gespeicherte Statistiken des MMON in SYSAUX Tablespace
– Vorkonfiguriert generiert AWR alle 60 Minuten Snapshots
• Parameter STATISTICS_LEVEL (Basic/Typical/All)
– Basic schaltet das Sammeln aus
– Retention-Time (Default 8 Tage)
– DBA_HIST_* - Views zur Auswertung
• Manuell starten
– execute dbms_workload_repository.create_snapshot(‘ALL‘);
• Auswerten mit Awrrpt.sql OEM
303
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verwaltung von AWR
• Prozeduren
– MODIFY_SNAPSHOT_SETTINGS
• Rentention / Vorhaltezeit der Snapshots
• Interval / Zeitabstand zwischen den Snapshots
• Topnsql / Menge der erfassten SQL-Statements (Default 30/Typical)
• Feststellen der eingestellten Intervalle
– Select * from dba_hist_wr_control;
• Feststellen Platzverbrauch
– @/Ora-home/Rdbms/admin/awrinfo.sql
– Oder V$SYSAUX_OCCUPANTS abfragen
• Select occupant_name, space_usage_kbytes from V$SYSAUX_OCCUPANTS where
occupant_name = 'SM/AWR‚
• Auflistung der bestehenden Snapshots
•
304
Select SNAP_ID, STARTUP_TIME, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME, FLUSH_ELAPSED,SNAP_LEVEL from dba_hist_snapshot;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
ADDM (Automatic Database Diagnostic Monitor)
• Automatic Database Diagnostic Monitor (ADDM)
– Gezielte Auswertung von AWR Daten
– Liefert Informationen zu
•
•
•
•
•
Besonders teuere SQL-Statements
I/O – Performance
Locking-Situationen
Ressourcen-Engpässe (Speicher, CPU bottlenecks)
Exzessive Logon/Logoff-Aktivitäten
– Manuelle Berichtserstellung: ADDMRPT.SQL
305
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Art der Information
• „Intelligente“ selbständige Analyse von Zuständen und Vorkommnissen in der
DB
• „Findings“
– Basierend auf Erfahrungswerte und Best-Practises
– Sortiert nach der Schwere und dem Grad der Beeinflussung
• „Recommendations“
– Allgemeine Empfehlung mit einer Abschätzung über die prozentuale Gewichtung der
Verbesserung der Situation
(nn% benefits)
– Konkreter „Action“-Vorschlag
– „Rationale“ Vorschlag: Sonstige, damit in Verbindung stehende Massnahmen.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
306
DWH-bezogene Monitoring-Aktivitäten
• ASH-Report
• SQL-Monitoring (OEM)
• Informationsbedarf Endanwender
• Messung Platzverbrauch
• Lesestatistiken über tatsächlich genutzte Daten
• Ressourcen-Manager
• ETL-Monitoring
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
307
Beobachten des Informationsbedarfs
• Regelmäßige Teilnahme an Gremien
– Abstimmung / Feedback / Planung mit Fachabteilungen und DWH-Nutzern
• Statistiken über DWH-Nutzung
– Benutzerzahlen / Session-Statistik
– Datenmengen / Platzverbrauch
– Segment-Reads
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
308
Welche Daten werden wirklich genutzt?
10 – 50 Tabellen
500 – 1000 Tabellen
Große Tabellen
Partitioniert
Namentlich bekannt
> 70 % des Datenvolumens
309
KleineTabellen
Nicht Partitioniert
Unkenntliche Masse
< 30 % des Datenvolumens
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lesestatistiken für die wichtigsten Tabellen anlegen
• dba_hist…. - Views zum Sammel der Lese-Zugriffe
– dba_hist_seg_stat
– dba_hist_seg_stat_obj
– dba_hist_snapshot
• dba_hist_sqlstat
• dba_hist_sqltext
• Achtung:
– Views werden nur aktualisiert wenn
• Auch tatsächlich gelesen wurde
• Ein AWR-Snapshot gezogen wurde
– Zähler fällt auf 0, wenn die DB durchgestartet wird
• Aufbau einer eigenen Statistik-Tabelle mit
– Tab-Name, Snap-ID, Datum/Uhrzeit, Physical Reads
– Aktualisieren immer nachdem ein AWR-Snapshot gezogen wurde
310
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lesestatistiken für die wichtigsten Tabellen anlegen
Select distinct * from
(select
to_char(begin_interval_time,'dd.mm.yyyy:hh24:MI') Zeit,
logical_reads_total log_rd,
logical_reads_delta log_rd_delta,
physical_reads_total phy_rd,
physical_reads_delta phy_rd_delta
from
dba_hist_seg_stat
s,
dba_hist_seg_stat_obj o,
dba_hist_snapshot
sn
where
o.owner = 'DWH1'
and
s.obj# = o.obj#
and
sn.snap_id = s.snap_id and
object_name = 'UMSATZ')
order by zeit;
ZEIT
LOG_RD LOG_RD_DELTA
PHY_RD PHY_RD_DELTA
---------------- ---------- ------------ ---------- -----------06.09.2010:22:00
3357520
3357520
3355361
3355361
06.09.2010:23:00
4030816
673296
4028177
672816
07.09.2010:12:32
8060160
4029344
8054609
4026432
07.09.2010:15:50
688
688
1
1
311
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Zugriffsdaten auf Tabellen über SQL sammeln
• SQL-Statements pro User analysieren
– From-Klausel parsen
– Zugriffe auf Tabellen
• System-Zugriffe ausschließen
– Wegen der Menge
• Historien-Tabelle aufbauen
– Mit aus der FROM-Klausel herausgefilterten Tabellennamen
– Zuordnung zu USER, Zeit und SQL-Statement
312
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispielabfrage
select
to_char(s.begin_interval_time,'mm-dd hh24') c1,
sql.sql_id
c2,
t.SQL_TEXT
C9,
sql.executions_delta
c3,
sql.buffer_gets_delta
c4,
sql.disk_reads_delta
c5,
sql.iowait_delta
c6,
sql.apwait_delta
c7,
sql.ccwait_delta
c8
from
dba_hist_sqlstat
sql,
dba_hist_snapshot
s,
dba_hist_SQLTEXT
t
where
s.snap_id = sql.snap_id
and
sql.PARSING_SCHEMA_NAME = 'DWH1' and
t.SQL_ID = sql.SQL_ID
and
sql.sql_id = '01978kjxb5yd2' and
to_char(s.begin_interval_time,'mm-dd hh24') = '09-12 13'
order by c1, c2;
col
col
col
col
col
col
col
col
col
c1
c2
c3
c4
c5
c6
c7
c8
c9
heading
heading
heading
heading
heading
heading
heading
heading
heading
‘Begin|Interval|time’
‘SQL|ID’
‘Exec|Delta’
‘Buffer|Gets|Delta’
‘Disk|Reads|Delta’
‘IO Wait|Delta’
‘Application|Wait|Delta’
‘Concurrency|Wait|Delta’
'SQL-Text'
format
format
format
format
format
format
format
format
format
a8
a13
9,999
9,999
9,999
9,999
9,999
9,999
a50
break on c1
Auszug
`Begin
`Buffer `Disk
Interval `SQL
`Exec
Gets
time'
ID'
SQL-Text
Delta' Delta' Delta‘
-------- ------- ------------------------------------------- ------ ------- ------ ---------09-12 13 01978kj Select * from (select Produkt, sum(U.summe)... AS Wert, 1
8,573 8,390
7448344
----- ------------------------------------------------ ------ ------- ------ ---------- -------01978k2 Select * from (select Produkt, sum(U.summe) ... AS Wert, 1
8,573 8,390
7494081
313
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verwendungsinformationen speichern
User
Tabelle DWH-Zugriffshistorie
Tabname
314
Gelesen_Von_User
Anzahl_Read_IO
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Lese_Datum
DATA WAREHOUSE
Daten-Owner und Verursachung von Aufwand
D_ARTIKEL SPARTEN_MANAGER
SPARTE_NAME
SPARTE_NR
GRUPPE_NR
GRUPPE_NAME
PK
ARTIKEL_NAME
ARTIKEL_ID
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
D_REGION
REGION_ID
PK
ORTNR
ORT
KREISNR
KREIS LANDNR
LAND
REGIONNR
REGION
D_Org_Unit
Org_unit
Org_Unit_Nr
Mitarbeiter_Name
Mitarbeiter_Nr
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
REGION_ID
FK
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
PK: Btree Index
FK: Bitmap Index
F_Usage_Count
Summe
Spartensätze
pro Tag
Mitarbeiter_Nr
ZEIT_ID
Segment_Nr
Sparten_Owner
Channel_Owner
Region _Owner
Count_Record
Amount_Byte
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
D_Table
Segment_Nr
Table_Name
Partition_Name
• Indirektes Dokumentieren von Verursachern für ein
bestimmtes Datenvolumen
• Kriterien aus den Stammdaten ableiten
• Tägliche Messung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
315
Datenwachstum dokumentieren
D_ZEIT
• Täglich Messung
• Wachstumskurve
• Prognosemöglichkeit
• Star Schema analoge
Darstellung
D_Segment
Tabellen_Name
Segment_Name
Segment_Type
Partition_Name
Segment_Nummer
Segment_Nr
Mess_Tag
Anzahl_Zeilen
Anzahl_Byte
Comp_Faktor
Index_Byte
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
WOCHE_DES_JAHRES
Wochen_Tag_Nr
DATUM_Tag
TAG_DES_MONATS
TAG_DES_JAHRES
Mess_Tag
DATA WAREHOUSE
Werden Tabellen und deren Daten genutzt
• Tägliche/stündliche
Messung
• Welche Segmente
(Partitionen) werden genutzt
• History und
Monitoring-Views*
- dba_hist_seg_stat
- dba_hist_seg_stat_obj
- dba_hist_snapshot
- v$sql_Monitor
D_ZEIT
D_Segment
Tabellen_Name
Segment_Name
Segment_Type
Partition_Name
Segment_Nummer
Segment_Nr
Tag_Stunde
D_Org_User
Org_Einheit
Org_Einheit_Nummer
Kostenstelle
User_Name
• Star Schema analoge Darstellung
User_Name
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
WOCHE_DES_JAHRES
Wochen_Tag_Nr
DATUM_Tag
TAG_DES_MONATS
TAG_DES_JAHRES
Tag_Stunde
Logical_Reads_Total
Physical_Reads_Total
Logical_Reads_Delta
Physical_Reads_Delta
• Alternative:
AUDIT select ON table-name
* Siehe passende Skripte in TiF-Skripte-Sammlung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
317
Aufgabenstellungen beim ETL-Monitoring
• Laufzeit-Kontrolle / ETL-Monitoring
– Gelesene/Geschriebene Sätze
– Ressource-Verbrauch (IO und Memory)
– Laufzeit
– Historischen Verlauf dokumentieren
– Trends ableiten
• Zuwachsmenge pro Tabelle
– Historischen Verlauf dokumentieren
• Mengen-Kontrolle
– Beobachtung des tatsächlichen Platzverbrauchs im DWH
– Alerts
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verbrauchsdaten sammeln
• Mess-Aufruf in der
aktuellen
ETL-Job-Session
als letzten
Aufruf einbauen
• Ergebnis-Daten in
Historien-Tabelle
eintragen
SELECT
/*+ use_nl (e s) ordered */
s.sql_id, s.plan_hash_value,
to_char(s.hash_value),
rawtohex(s.address),
s.sql_text,
s.disk_reads,
s.buffer_gets,
s.executions,
s.sharable_mem,
s.parsing_user_id,
s.sorts,
s.parse_calls,
s.command_type,
s.child_number,
s.parsing_schema_id,
s.rows_processed,
e.username dbuser,
u.name parsing_user,
e.sid,
s.module,
s.action,
s.open_versions,
1 current_set
FROM
v$session e, v$sql s, sys.user$ u
WHERE s.address = e.sql_address AND
s.hash_value = e.sql_hash_value AND
s.child_number = e.sql_child_number AND
u.type# != 2 AND
s.parsing_user_id = u.user#
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
319
Oracle Business
Intelligence Suite
L e g a c y
Oracle Database 12c
Integrierte Modelle Granulares Level
Meist 3NF
Relational Database Oracle 12c
Harmonizing
Data Quality
Data Profiling
Data Governance
ER Modeler
Logical
/Physical
Access
Integriertes Row Level Security
All Data
Data Lake
Concept
Advanced / Predictive Analytics
R + Data Mining
Exadata
Large
Objects
N e w
Stream
Analytics
Human/Trends
Hadoop-Datastore
(HDFS/noSQL)
Iot
Data
Big Data Appliance
Ad-hoc
Analysis
S Q L
Log +
Produktions
Daten
Batch
Realime
Remote
Access
Dashboards
Business Logik
In Memory Oracle 12c
Metadata Repository
IoT
(Dashboards,
Reporting)
Interactive
User View
Published
Reporting
Office
Integration
Mobile
Consumption
Oracle BI Apps
A c c c e s s
D a t a
SAP R/3
SAP BW
Enterprise Layer
S i n g e l e
Alle
Unternehmens
Prozesse
Oracle
Data
Integrator
IoT
Service
Integration
M u l t y Te n a n c i e s
D a t a
Single-Enterprise Analyse-Plattform
Financial
Procurement&Spend
HR, SCM, & OM, PIM
Big Data
Discovery Studio
Find
Explore
In-Memory
Discovery Index
Cloudera Hadoop Distribution
Transform
Discover
Exalytics IM Machine
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Regeln einer effizienten Data Warehouse Architektur
• Breite Abfragemodelle bereitstellen
• Verbund-Data Marts
• Über Data Mart-Grenzen hinweg gemeinsam
genutzte Berechnungen + Aggregationen usw.
so früh wie möglich umsetzen
• Kern-Warehouse-Schicht schon mit Blick auf
Auswertemodelle / Hierarchien modellieren
• Technisches und fachliches Monitoring von
Inhalten und System
• Kompaktes Schichtenmodell schaffen
– Data Marts so weit wie möglich virtualisieren
– Redundanzen in unterschiedlichen Schichten vermeiden
– Berechnungen / Aggregate so früh wie möglich durchführen
• Zusammenhängende Data Mart-Schicht
• Alle Schichten in einem DB-Raum
• In-Database-Aktivitäten (Prüfen/Laden)
• 1:1 Kopien verhindern
• Permanente Orientierung an den
Informationsbedürfnissen der Benutzer
– Mehrfachnutzung von Dimensionen / Conformed
Dimensions
– Geschickter Umgang mit sehr großen Faktentabellen /
Vermeiden unnötiger Kopien
– Eher granulare Informationen auch in den Fakten-Tabellen
• Dokumentation aller Informationen Im Warehouse
(Business Glossar)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
322
Herunterladen