Data Warehousing in a Nutshell

Werbung
Data Warehousing in a Nutshell
Bianca Stolz
Systemberaterin
ORACLE Deutschland B.V. & Co. KG
Berlin, 08. Dezember 2010
Agenda
• Die Motivation hinter einem Data Warehouse
<Insert Picture Here>
• Konzept und Design
• Drei in Eins: Das Schichtenmodell
• Über die Rolle der Fachanwender
• Laden der Daten
• Eine Auswahl an geeigneten Methoden
• Parallelisierung nutzen
• Betrieb des Warehouse
• Effiziente Datenhaltung über die Zeit
• Optimizer Statistiken
• Backup
Agenda
• Die Motivation hinter einem Data Warehouse
<Insert Picture Here>
• Konzept und Design
• Drei in Eins: Das Schichtenmodell
• Über die Rolle der Fachanwender
• Laden der Daten
• Eine Auswahl an geeigneten Methoden
• Parallelisierung nutzen
• Betrieb des Warehouse
• Effiziente Datenhaltung über die Zeit
• Optimizer Statistiken
• Backup
Wozu überhaut ein Data Warehouse?
• Auf Daten zentral zugreifen
Einfache Verwaltung, (fast) alle Unternehmensdaten liegen
einheitlich und integriert vor
• Nach Themen sortieren
Geschäftsobjekte in einem für alle verständlichen Kontext
bereitstellen
• Historische Daten sammeln
Änderungen über die Zeit verfolgen, Trends berechnen
• Neue Daten, Referenzdaten und „weiche“ Daten
Entlastung operativer Systeme, wenn Reports und Analysen in ein
eigenes System verlegt werden
Unternehmensweit gültige Daten
• Als zentraler Knotenpunkt liefert das Data
Warehouse geprüfte Daten für jegliche
Kennzahlberechungen
• Flexibilität sowohl für die Fachbereiche als auch für
die IT wird durch eine unternehmensweit gültige
Architektur möglich
Schnittstellen und Performance
• Das Data Warehouse ist die definierte Schnittstelle zu
sämtlichen Daten für alle Report-Anfragen
• Gleichzeitig sind durch das Warehouse alle Schnittstellen
zu sämtlichen Quellsystemen dokumentiert
• Die Performance der Quellsysteme bleibt vom
Reporting unbeeinträchtigt
• Eine gute Performance des Data Warehouse sichert die
Performance im Bereich der Auswertungen (BI, Statistik)
Eine Zugriffs- und Bewegungssprache
Data
Mart
CRM
SQL
SQL
Staging
Area
SQL
Stage
Warehouse
SQL
SQL
SQL
XML
Data
Mart
ERP
SQL
XML
SQL
SQL / XML
SQL
XML
SQL
XML
Data
Mart
SQL
XML
Vorteil: Alles mit einer Sprache – mit SQL
• SQL ist ein weit verbreiteter Standard
• Breite Palette an Werkzeugen
• Breites Wissen am Markt
• Während Design und Betrieb gibt es keine
Reibungsverluste durch „Brüche“ mit anderen Systemen
• SQL ist eine mächtige mengenbasierte Sprache
• Kennzahlen direkt in der Datenbank berechnen, deren Engine für
solche Rechnungen genau ausgelegt ist
• Große Bandbreite an fertigen, integrierten SQL-Funktionen
Agenda
• Die Motivation hinter einem Data Warehouse
<Insert Picture Here>
• Konzept und Design
• Drei in Eins: Das Schichtenmodell
• Über die Rolle der Fachanwender
• Laden der Daten
• Eine Auswahl an geeigneten Methoden
• Parallelisierung nutzen
• Betrieb des Warehouse
• Effiziente Datenhaltung über die Zeit
• Optimizer Statistiken
• Backup
3-Schichten-Modell auf einen Blick
Neutral gegenüber
Vorsystemen,
Sprachen, OS
Anwendungsneutral,
granular,
Zeit-neutral
Neutral gegenüber
Endbenutzern:
Alle Nutzer / Werkzeuge
Aufgaben der Staging Area
• Konsolidierung der verschiedenen Quellen
(Schnittstellen-Thematik)
• Fehler abfangen während des Ladevorgangs
• Datenanalyse
• Datenbereinigung
• Kann bereits für Abfragen verwendet werden
• Dient als temporäre Datenablage, bis die Daten im
übergeordneten Datenmodell korrekt geladen sind
• Daten aus Quellsystemen laden
• Batch-Betrieb oder laufend als „Mini-Batch“
• Parallelisierung
• Constraints
Varianten von Prüfungen
Attributbezogen
• NOT NULL / Pflichtfelder
• Formatangaben
• Check Constraint
• Wertbereiche
•
•
Ober- / Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
Rekursive Zusammenhänge
•
•
•
•
Ober- / Untergrenzen / Wertelisten
Satzbezogen (Tupel)
• Abhängigkeiten von Werten in
anderen Attributen desselben Satzes
Satzübergreifend (Relationen)
• Primary Key / Eindeutigkeit
• Aggregat-Bedingungen
•
•
Tabellenübergreifend (interrelational)
• Foreign Key
• Aggregat-Bedingungen
Verweise auf andere Sätze derselben
Tabelle (Relation)
Ober- / Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
Rekursive Zusammenhänge
•
Verweise auf Sätze einer anderen
Tabelle (Relation)
Zeitbezogen (Tupel)
• Zeitinvariante Inhalte
•
•
•
Anz. Bundesländer
Zeitabhängige Veränderungen
Über die Zeit mit anderen Daten
korrelierende Feldinhalte
Verteilungsbezogen
• Arithmetische Mittel
• Varianz / Standardabweichungen
• Qualitätsmerkmale und Mengen
Der Foundation Layer
• Aufbau eines geschäftsneutralen, übergreifenden
Datenmodells
• Üblicherweise in der 3. Normalform
• Dient der Flexibilität bei Anfragen der Fachbereiche
• Enthält nur endgültig korrekte Daten, die von der
Staging Area geladen werden
• Archivierung von Daten (Historie pflegen)
• Wenn Änderungen des Datenmodells nötig werden,
lassen sich diese im Foundation Layer leichter
nachvollziehen
Datenmodelle aufbauen
Normalisierung
Denormalisierung
• Abstrakte, informationstechnische Sicht
• Viele kleine Tabellen
Schneller Zugriff für viele
Benutzer
• Geschäftsobjekt-orientiert
• Fachlich verständlich
• Auf mehrere Tabellen verteile
Daten
Gut für Online-Masken
• Einfach und intuitiv verständlich
(auch für den Fachbereich)
• Oft viele Joins
• Tendenz zu aufwendigem SQL
• Wenige Joins
• Oft einfaches SQL
Prinzip Normalisieren / Denormalisieren
Quelldaten
Normalisierte
Daten
Neue migrierte
Daten
Produktsparten
PRODUKTDATEN
PD4711
AMKLB
9987865234
7769
0000000
KLAUBAUTER
IIO
???
EERWEERW
883466
888750000
888000
EU-Wert
735328567353654
i8886345
7746
Müll und Altlast
Spartenname
Spartennr
Produktdaten
Produktename
Produktgruppen
Produktenr
Gruppenname
Einzelpreis
Gruppennr
Gruppenname
Gruppennr
Produkte
Produktename
Produktenr
Einzelpreis
Spartenname
Spartennr
Regeln für künstliche Schlüssel
• 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
Bilden von künstlichen Schlüsseln
Anwendung 1
Verkaufsregion
Einkommensgruppe
Wohnart
Data Warehouse
Berufsgruppe
Verkaufsregion
Anzahl Kinder
Einkommensgruppe
Alter
Wohnart
Name
...
Kunden_NR
PLZ
Ort
Anwendung 2
Kunden_NR
Tel
Partnernummer
PLZ
Dim_Kd_NR
Ort
Strasse
Partnernummer
Sequence
Neuer Schlüssel
Der Access und Performance Layer
• Geschäftsrelevanter Kontext für die Fachbereiche
• Unterschiedliche Data Marts für unterschiedliche
Anforderungen (Bereichs-spezifisch)
• Daten liegen in denormalisierter Form und
entsprechend transformiert vor
• Aggregierte Daten, andere Kalkulationen usw.
• Relational oder „Würfel“
• Zugriffstrukturen sind für effiziente Verarbeitung
komplexer Statements optimiert
• Partitionierte Objekte
• Vorberechnete Daten
• Joins
Multidimensionales Modell: Star Schema
V1
V2
V3
V4
Einstiegspunkte
für Abfragen
Produkttabelle
P1
P2
P3
P4
Prod1
Prod3
Prod5
Prod6
Lief1
Lief4
Lief5
Lief9
Maier
Müller
Schmid
Engel
1
:
n
Verkäufe
1:n
P1
P2
P3
P4
R1
R2
R3
R4
Verkäufer
Z1
Z2
Z3
Z4
V1
V2
V3
V4
Zeit
4
4
9
8
n:1
Z1
Z2
Z3
Z4
n
:
1
R1
R2
R3
R4
München
Berlin
Hamburg
Frankfurt
Regionen
6.7.09
7.7.09
8.7.09
9.7.09
Q3
Q3
Q3
Q3
Beispiel einer Star Query Transformation
Tabellen und Daten
Faktentabelle Umsatz
Betrag
ID
Reg_ID
Kd_ID
Prod_ID
Zeit_ID
<Sequence>
<NUMBER>
<NUMBER>
<NUMBER>
<NUMBER>
<NUMBER>
0001
42.50
02
02
201004
0002
0003
9.99
51.31
03
02
010908
500030
071269
04
01
201004
201004
Dim_Produkt
ID
01
02
03
04
Prd_Kat
Buch
CD
Video
DVD
4 Ausprägungen
für Prd_Kat
Dim_Region
ID
01
02
03
04
Region
Nord
Sued
West
Ost
4 Ausprägungen
für Region
Dim_Zeit
Zeit
ID
201001 Jan_2010
201002 Feb_2010
Dim_Kunde
KdName
ID
000001 Müller
000002 Schulz
201003 Mär_2010
201004 Apr_2010
000003 Fritsch
4 Ausprägungen für
Zeit (fiktives Bsp.!)
000005 Ahrens
000004 Heinze
Beispiel einer Star Query Transformation
Verwendete Bitmap-Indizes
Faktentabelle Umsatz
Betrag
ID
Reg_ID
Kd_ID
Prod_ID
Zeit_ID
<Sequence>
<NUMBER>
<NUMBER>
<NUMBER>
<NUMBER>
<NUMBER>
0001
42.50
02
02
201004
0002
0003
9.99
51.31
03
02
010908
500030
071269
04
01
201004
201004
Bitmap-Indizes auf den FK-Spalten
der Faktentabelle (hier nur für die
WHERE-Prädikate)
01 02 03 04
01 02 03 04
0 1 0 0
0 0 1 0
0 1 0 0
0 1 0 0
0 0 0 1
1 0 0 0
Bitmap_Idx Reg_ID
Bitmap_Idx Prod_ID
4 Ausprägungen
201001 201002 201003 201004
0
0
0
0
0
0
0
0
0
Bitmap_Idx Zeit_ID
1
1
1
Beispiel einer Star Query Transformation
Schritt 1 und 2
01 02 03 04
01 02 03 04
Bedingungen der
WHERE Clause filtern,
wiederholte Lookups
auf den Dimensionstabellen
0 1 0 0
0 0 1 0
0 1 0 0
0 1 0 0
0 0 0 1
1 0 0 0
201001 201002 201003 201004
Bitmap_Idx Reg_ID Bitmap_Idx Prod_ID
Aus dem SELECT Statement:
...WHERE P.Prd_Kat='CD'‚
AND R.Region='SUED'‚
AND Z.Zeit='APR_2010'; *
0
0
0
Bitmap_Idx Zeit_ID
Passender Bitmap Stream
Passender Bitmap Stream
ID
01
02
03
04
Region
Nord
Sued
West
Ost
Dim_Produkt
ID
01
02
03
04
Prd_Kat
Buch
CD
Video
DVD
Dim_Zeit
Zeit
ID
201001 Jan_2010
201002 Feb_2010
201003 Mär_2010
201004 Apr_2010
* Transformation: .. WHERE (SELECT Prd_Kat FROM Dim_Produkt WHERE Prd_Kat IN('CD')) AND ..
( Bildung von Sub-SELECTs)
1
1
1
Passender Bitmap Stream
Dim_Region
Lookups
0
0
0
0
0
0
Beispiel einer Star Query Transformation
Schritt 3 und 4
01 02 03 04
01 02 03 04
201001 201002 201003 201004
Bitmap Merge der
0 1 0 0 AND 0 1 0 0 AND 0
1
0
0
herausgefilterten
Bitmap Streams,
0 0 1 0 AND 0 0 0 1 AND 0
1
0
0
Zugriff auf die Fakten0 1 0 0 AND 1 0 0 0 AND 0
1
0
0
tabelle, Anwendung
von Funktionen
Bitmap_Idx Reg_ID Bitmap_Idx Prod_ID
Bitmap_Idx Zeit_ID
(hier sum(..))
TRUE
Für den Ausschnitt an Daten in diesem
FALSE
Beispiel wird nur der erste Datensatz
FALSE
als Ergebnis zurückgeliefert
Faktentabelle Umsatz
Betrag
ID
Reg_ID
Kd_ID
Prod_ID
Zeit_ID
<Sequence>
<NUMBER>
<NUMBER>
<NUMBER>
<NUMBER>
<NUMBER>
0001
42.50
02
02
201004
0002
0003
9.99
51.31
03
02
010908
500030
071269
04
01
201004
201004
[Schritt 5]
Join Back auf Dimensionstabellen für evtl. weitere angeforderte Spalten im SELECT Statement
Materialized Views
Verkäufe Faktentabelle
R1
R2
R3
R4
Z1
Z2
Z3
Z4
Partition
Woche 2
P1
P2
P3
P4
R1
R2
R3
R4
Z1
Z2
Z3
Z4
V1
V2
V3
V4
4
4
9
8
V1
V2
V3
V4
4
4
9
8
Materialized View (MAV)
Summe aller Verkäufe für
alle Produkte
der letzten 8 Wochen
aller Verkäufer
in Region 1 bis 8
..
Partition
Woche 1
P1
P2
P3
P4
..
Refresh
Partition
-NEUWoche 8
P1
P2
P3
P4
R1
R2
R3
R4
Z1
Z2
Z3
Z4
V1
V2
V3
V4
4
4
9
8
P1
P2
P3
P4
R1
R2
R3
R4
Z1
Z2
Z3
Z4
V1
V2
V3
V4
P5
P6
P7
P8
R5
R6
R7
R8
Z5
Z6
Z7
Z8
V5
V6
V7
V8
8
8
18
16
8
8
18
16
Veränderte
Werte
..
Kennzahlenbäume mit Nested MAVs
Anstelle von Lade-Operationen
Umsatz Prod. Gr B relativ zum Gesamtjahresumsatz
Summierung/Jahr
Umsatz Prod.Gr A
Umsatz Prod.Gr B
Summierung/Monat
Aufwendige
Join-Operation
DIM_Zeit
FAKT_Umsatz
Materialized View
Level 4
Materialized View
Level 3
Materialized View
Level 2
Materialized View
Level 1
DIM_Produkte
Basistabellen
Funktion EXPLAIN_REWRITE
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
zu analysierende
f_umsatz u,
Abfrage
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;
MAV
MV_UMS_ART_ZEIT_JOIN
QSM-01082: Materialized View, MV_UMS_ART_ZEIT_JOIN, kann nicht mit Tabelle, F_UMSATZ,
verknüpft werden
MV_UMS_ART_ZEIT_JOIN
QSM-01102: Materialized View, MV_UMS_ART_ZEIT_JOIN, erfordert Join zurück zu Tabelle, F_UMSATZ,
in Spalte, UMSATZ
Funktion EXPLAIN_MVIEW
• Zeigt auf, welche Funktionen für eine jeweilige MAV
genutzt werden kann, z.B. Refresh-Varianten
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');
MAV-Definition
Multidimensionales Modell: MOLAP
st
ca
re
Fo
et
dg
Bu
Szenario
T
IS
Umsätze
Kennzahlen
Zelle
Kosten
Mar
Zeit
Feb
Jan
Deckungsbeitrag in %
Integrierte SQL-Funktionen
• LAG / LEAD: Vorgänger und Nachfolger
• FIRST / LAST und MIN / MAX
• ROW_NUMBER: eindeutige Zahl z.B. für TOP-n
• RANK: Rangfolge
• RATIO_TO_REPORT: Verhältnis zur Summe
• AVG, SUM: Aggregierungs-Funktionen
• NTILE: Aufteilung in n Teile
• PERCENTILE_CONT/_DISC: Median-Berechnung
• STDDEV: Standardabweichung
(Komplette Liste aller SQL-Funktionen: SQL Language Reference Guide 11gR2, Kapitel 5, “Aggregate Functions” und “Analytic Functions”)
OLAP als Erweiterung zum Star Schema
• Für manche Kennzahlen ist die Berechnung auf reiner
SQL-Ebene nicht mehr performant genug
• OLAP speichert die Daten in einer Form, welche die
Verarbeitung besonders von rechenintensiven
Kennzahlen und Prognosen beschleunigt
• Vorberechnung des gesamten Würfels oder Teilen davon
• Die Datenbank berechnet zuerst diejenigen Werte, welche die
längste Verarbeitungszeit benötigen
• Obwohl in der Datenbank als eigenes Format definiert,
lässt sich OLAP trotzdem mit SQL bedienen
• Auch MAVs können mit OLAP arbeiten (ab 11g)
Sinn und Zweck der OLAP-Technologie
• Das multidimensionale OLAP-Speicherformat ist
speziell für Analyse-Funktionen optimiert
Mit “OLAP” ist im Folgenden die Oracle OLAP-Option gemeint
im Unterschied zum “relationalen OLAP”, welches durch ein
Star oder Snowflake Schema repräsentiert wird
• Komplexe Analysen lassen sich relational nicht effizient
abbilden
• Mehrfaches Verarbeiten derselben Daten mehrerer
Dimensionen während der Berechnungen
• Daten werden z.T. temporär in Struktur und Inhalt geändert, um
Analyse-Kriterien zu genügen
• Temporäre Änderungen sollen nicht in der Datenbank sichtbar
werden
BI-Funktionalität in der Datenbank
OLTP /
3NF DWH
Star Schema
Standard
Reporting
Ad-Hoc
Reporting
Ad-Hoc
Analysis
“Analyse-freie
Zone”
Ad Hoc-Abfragen
Ad Hoc-Analysen
Zeitreihen
Shares/Indizes
“Analyse in
Denkgeschwindigkeit”
OLAP
Planning
Vorhersagbare
Analysen
Statistisches Forecasting
Budgetzuordnungen
Advanced Aggregations
Modellberechnung
Wirtschaftsbezogene und
selbstdefinierte Funktionen
OLAP TransaktionsModell
Oracle 11g: Cube-Organized MAVs
PRODUCT
SQL
item_id
subcategory
category
type
CUSTOMER
cust_id
city
state
country
TIME
SALES
day_id
prod_id
cust_id
chan_id
quantity
sales
Automatisches
Query Rewrite
day_id
month
quarter
year
CHANNEL
chan_id
class
Materialized View
Refresh
OLAP relational: Dimension Views
• Für jede Dimension gibt es eine Dimension View und
eine Hierarchy View
• Eine Zeile für jedes
DimensionsElement
• Keine Hierarchiespezifischen
Spalten
channel_view
channel_sales_channel_view
dim_key
level_name
long_desc
short_desc
dim_key
parent
level_name
long_desc
short_desc
all_channels_long_desc
class_long_desc
channel_long_desc
channel_all_channels_id
channel_class_id
channel_channel_id
all_channels
all_channels_long_desc
channel_all_channels_id
class
class_long_desc
channel_class_id
channel
channel_long_desc
channel_channel_id
• Eine Zeile für
Dimensions-Elemente
innerhalb der Hierarchie
• Hierarchie-spezifische
“Parent”-Spalte
Channel
OLAP relational: Cube Views
• Jeder Cube ist eine einzelne View
• Dimensionen entsprechen den Schlüsseln, Kennzahlen den
Datenspalten
sales_cube_view
time
product
geography
channel
sales
quantity
sales_ytd
sales_ytd_pr_year
sales_pr_year
sales_pr_period
sales_share_tot_chan
sales_share_prnt_chan
sales_rank_by_prod_lv
sales_3_per_mov_avg
sales_3_per_mov_tot
…
sales_cube
forecast_view
keys
time
product
geography
measures
best_fit
linear_regression
measures
forecast_cube
Cube Views für SQL-Abfragen nutzen
Summe aller Verkäufe
Fact Table Query:
SELECT SUM(sales)
FROM sales_fact;
Cube View Query:
SELECT sales
FROM sales_cube_view
WHERE product = 'ALL_PRODUCTS'
AND geography = 'ALL_REGIONS'
AND channel = 'ALL_CHANNELS'
AND time = 'ALL_YEARS'
• Der Cube hat bereits den summierten Wert
Kein Full Table Scan nötig
• “ALL”-Bedingungen für jede Dimensions-Spalte
bringen den größten Mehrwert der bereits summierten
Werte im Cube
Der Fachbereich wirkt beim Design mit
• Der Fachbereich legt fest, welche Kennzahlen
berechnet werden sollen
• Einfluss auf das Design des Daten-Modells:
•
•
•
•
Welche Daten gehören logisch zusammen (Geschäftsprozess)
Welche Daten sind Stammdaten, welche Bewegungsdaten
Welche Daten können weggelassen werden
Welche mathematischen/analytischen Funktionen kommen zum
Einsatz
• Fachanwender sind für die Datenqualität
mitverantwortlich
• Definieren Qualitätskriterien
• Liefern valide Daten
Eigenschaften und Objekte trennen
Wohnsituation
Artikel
Privat- zu Firmenkunden
regionale Schwerpunkte
Berufsgruppe
Kundensegmente
Umsatz
• Was ist ein Attribut? / Was ist eine Entity?
• Lassen sich Objekte spezifizieren / generalisieren?
• Über die Prozess-Sicht Bewegungsdaten und
Stammdaten ermitteln
Analysemodell – komplex
Was wissen wir über den Prozess?
Produkte
Handwerker
bietet an
beauftragt
Dienstleistungen
Kunden
Firmen
bietet an
verkauft
Lieferanten
Service GmbH
holt ab
Privat
Kundenkarte
bestellt
storniert
beauftragt
liefert aus
Spediteur
beliefert
Lager
holt
stornierte
Ware ab
liefert ab
Geschäftsprozess: Bestellungen
Bewegungs- und Stammdaten finden
Status
Bestellprozess
Beschaffung
offene
Posten
Kundendaten
prüfen
MAX/MIN
Menge
Kreditlimit
prüfen
Kundenstamm
Verfügbarkeit
prüfen
Kundenstamm
Spediteur
beauftragen
Bestellung
anlegen
Produktestamm
Bestellung
Best_Pos
Lieferschein
Dienstleistung
beauftragen
Vertrag
Bestellsatz
updaten
Liefersatz
anlegen
Bestellung
Best_Pos
Lieferung
Objektmodell
Generalisierungen und Spezialisierungen
Bestellung
Kunde
tätigt
Kontaktperson
KD#...
Bestelldatum
Lieferdatum
Sparte
...
Externe
Personen
Status
Generalisierung
Spezialisierung
Status
Artikel
Privatkd
...
Gruppe
Firmenkd
...
...
Name
Gruppe
Sparte
...
• Kandidaten für Dimensions-Hierarchien finden
• Schlüsselpaare PK / FK für spätere Fakten-Joins
Agenda
• Die Motivation hinter einem Data Warehouse
<Insert Picture Here>
• Konzept und Design
• Drei in Eins: Das Schichtenmodell
• Über die Rolle der Fachanwender
• Laden der Daten
• Eine Auswahl an geeigneten Methoden
• Parallelisierung nutzen
• Betrieb des Warehouse
• Effiziente Datenhaltung über die Zeit
• Optimizer Statistiken
• Backup
Kopiertechniken beim Laden
•
•
•
•
•
•
•
•
•
•
Trigger in Quelltabelle
SQL*Loader und Data Pump
External Tables
Transportable Tablespaces
Change Data Capture
Golden Gate
Multi-Table Insert
MERGE
Table Functions
Partition Exchange Load
SQL*Loader – Empfehlungen
• Direct Path Load nutzen
• Alle Integrity Constraints ausschalten
• NOT NULL, Unique und Primary Key Constraints
• Verhindern von Index-Aktualisierungen
• UNRECOVERABLE Option wählen
• Partitionen nach und nach laden
• Andere Partitionen bleiben für andere Benutzer im Zugriff
• Parallel laden, wenn es möglich ist
• Nutzung paralleler Schreib-Threads
• Alternativ parallele Jobs starten
Beispiel: Control File für SQL*Loader
OPTIONS (SKIP=1, BINDSIZE=50000, ERRORS=50, ROWS=200, DIRECT=TRUE,
PARALLEL=TRUE, READSIZE=65536, RESUMABLE=TRUE,
RESUMABLE_TIMEOUT=7200)
UNRECOVERABLE LOAD DATA
CHARACTERSET WE8MSWIN1252
INFILE 'C:\orte.csv'
BADFILE 'orte.bad'
DISCARDFILE 'orte.dis‚
INTO TABLE dwh.tb_orte WHEN ort_id != BLANKS
APPEND
REENABLE DISABLED_CONSTRAINTS
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "'"
(orte_nr POSITION(1) INTEGER EXTERNAL ,
ort CHAR ,
plz CHAR ,
bundesland CHAR ,
region CHAR ,
nummernfeld INTEGER EXTERNAL )
External Tables
• Eine External Table ist eine Tabelle, die eine Datei
referenziert
• Datei wird als normale Tabelle behandelt
• Nur lesend zugreifbar
• RMAN sichert nicht die Daten
• Bulk Loads wie INSERT..SELECT möglich
• Mehr Transformationsoptionen
als im SQL* Loader
• Parallelisierbares Lesen
• Alternative zum SQL*Loader
External Tables mit Data Pump
• Erstellen einer External Table im Quellsystem
• Verwendung von CREATE AS SELECT * FROM
<source_table>
• Das Ausführen des CREATE startet den Data Pump Export
• Kopieren der Dump-Datei auf die Zielumgebung
• In der Zielumgebung neue External Table Definition
erstellen und aktivieren
• Durch Zugriff mit SELECT auf die External Table die
Daten lesen
Ablauf des Exports bei Data Pump
expdp dwh/dwh@o11 parfile=dp_export_param.txt
impdp dwh2/dwh2@o11 DIRECTORY=DP_OUT
DUMPFILE=EXP1.DMP
LOGFILE=DP_OUT:imp_log
REMAP_SCHEMA=DWH:DWH2
• Export über Parameter-Datei
• Export auch mit Remote-Zugriff
• Einschränkung der Datenmenge
durch QUERY
• Bei dem Import: REMAP auf das
Schema
Preprocessing für External Tables in 11g
CREATE TABLE sales_transactions_ext
(PROD_ID NUMBER, CUST_ID NUMBER
...)
ORGANIZATION external (TYPE oracle_loader
DEFAULT DIRECTORY data_file_dir
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
PREPROCESSOR exec_file_dir:'gunzip' OPTIONS '-C'
BADFILE log_file_dir:'sh_sales.bad_xt'
LOGFILE log_file_dir:'sh_sales.log_xt'
FIELDS TERMINATED BY "|" LDRTRIM
( PROD_ID, CUST_ID, TIME_ID DATE(10) "YYYY-MM-DD",
CHANNEL_ID, PROMO_ID, QUANTITY_SOLD, AMOUNT_SOLD,
UNIT_COST, UNIT_PRICE))
LOCATION ('sh_sales.dat.gz'))
REJECT LIMIT UNLIMITED;
Multi-Table Insert
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*/);
MERGE
• Funktion MERGE dient
dem gleichzeitigen
INSERT und UPDATE
• Basierend auf dem
Matching des
definierten Schlüssels
(ON-Klausel)
• Auch DELETEOperationen möglich
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
DELETE WHERE merge_subquery.status=-1;
Table Functions: Pipelined Transformation
Merge
Multiple
Inserts
External Table
Table Function
Validate
Tabellen
Flat Files
Transform
Lookup
Aggregate
Analytische
Funktionen
Ein Schritt, parallelisierbar, mengenbasiert
Mengenbasiert trotz Programmierung
Table Functions
INSERT INTO Table
SELECT Feld1, Feld2
FROM Table_Function(
Funktion
Cursor
Fetch
Loop
Variante 1
Variante 2
If a = b...
Update...
Case...
pipe
row(record Type)
Return Table
)
• Schnelle Verarbeitung
(Pipelined)
• Objekttechnik
• Parallelisierung
• Mehrere
Rückgabewerte
und Einzelrückgaben
• Cursor als Input
• Schachtelbar
Beispiel einer Table Function
CREATE OR REPLACE FUNCTION f_bestellung_x(cur cursor_pkg.refcur_t) Übernahme von Ausgangssätzen
als Cursor
RETURN bestellung_x_t_table IS
bestellnr
NUMBER(10);
kundencode
NUMBER(10);
bestelldatum
DATE;
lieferdatum
DATE;
bestell_total
NUMBER(12,2);
fehler_datum,
DATE;
order_id
NUMBER(10);
Definieren einer Nested-Table-Struktur
objset bestellung_x_t_table := bestellung_x_t_table();
für die spätere Rückgabe.
i number := 0;
BEGIN
LOOP
Lesen aus Cursor
-- read from cursor variable
FETCH cur INTO bestellnr, kundencode, bestelldatum, lieferdatum, bestell_total, order_id;
-- ext when last row
EXIT WHEN cur%NOTFOUND;
i := i+1;
IF substr(to_char(lieferdatum,'YYYY.MM.YY'),1,4) > 2002 THEN
fehler_datum := to_date('9999.12.12','YYYY.MM.DD');
Erweitern Nested-Table um einen
ELSE fehler_datum := lieferdatum;
Satz und Überführen eines Satzes in
END IF;
die Nested-Table
objset.extend;
objset(i) :=
bestellung_x_t(bestellnr,kundencode,bestelldatum,lieferdatum,bestell_total,fehler_datum);
END LOOP;
CLOSE cur;
Rückgabe der kompletten Tabelle an
RETURN objset;
das aufrufende Statement
END;
(Alternative zu PIPE).
Aufruf der Table Function
INSERT INTO bestellung_x
SELECT * FROM
TABLE(f_bestellung_x(CURSOR(SELECT * FROM bestellung)))
SELECT * FROM
TABLE(f_bestellung(CURSOR(SELECT * FROM bestellung)))
SELECT count(*) FROM
TABLE(f_bestellung(CURSOR(SELECT * FROM bestellung))
Partition Exchange Load Verfahren
Buchhaltung
Produktion
Personal
Lager
Lieferanten
Temp Tabelle
P1
P2
P3
P4
Z1
Z2
Z3
Z4
4
4
9
8
Time
Monat 13
Marketing
Service
Neuer Monat
Kein Index / Constraint
Parallel Direct Path Insert (Set Based)
CREATE TABLE AS SELECT (CTAS)
Monat 12
Monat 11
Monat 10
Region
Faktentabelle
Indizes und DDL
• Bei DDL-Operationen auf Partitionsebene können
globale Indizes UNUSABLE werden
• Mit MERGE, SPLIT, MOVE, DROP, TRUNCATE
• Lösung I: Globalen Index mitpflegen
Tabellen Tabellen
Partition Partition
• ALTER TABLE T1 DROP PARTITION P1
UPDATE GLOBAL INDEXES
• Operation dauert länger
• Lösung II: Index-“Reparatur” (sämtliche Index-Partitionen)
• Kommando ALTER INDEX ... REBUILD [ONLINE]
• Parameter SKIP_UNUSABLE_INDEXES beachten (seit 10g)
• Für lokale Indizes existiert eine optionale Klausel, um
die Speicherung zu beeinflussen
ALTER TABLE part1
MOVE PARTITION p1 TABLESPACE new_tbsp UPDATE INDEXES
(my_parts_idx (PARTITION p1 TABLESPACE my_tbsp));
Rebuild Index Operation
ALTER INDEX index_name REBUILD [ NOLOGGING ];
• Schneller als DROP / CREATE, besonders bei nicht-partitionierten Indizes
• NOLOGGING-Klausel einsetzen (weniger Redo-Informationen)
• Fragmentierung wird beseitigt
• Nach Änderungsaktivitäten
• Freier Platz wird “richtig” freigegeben
• Im DWH werden Änderungen aber oft als Batch-Lauf durchgeführt
Zunächst DROP INDEX (beschleunigt den Batch-Lauf)
Dann Neuerstellen des Index
Ab Oracle 11.2: UNUSABLE Indizes geben automatisch ihre Segmente frei
und können mit REBUILD wieder aufgebaut werden
Parallelisierungsgrad manuell bestimmen
Hoch
• SELECT /*+ PARALLEL(b)n PARALLEL(a)n */
a,b,c FROM bestellung b, artikel a;
• Setzen von Hints
• Eher vor 10g... (Optimizer)
• ALTER SESSION FORCE PARALLEL QUERY;
• Als Sessionparameter
• ALTER TABLE <table_name> PARALLEL n;
• Als Tabelleneigenschaft
Priorität des definierten DOP
• Festlegung im Resource Manager
Niedrig
Funktionsweise von Automated DOP
SQL
Statement
Statement wird geparsed
Optimizer ermittelt
Geschätzte Ausführung ist
Execution Plan
größer als Schwellwert
Geschätzte Ausführung ist
kleiner als Schwellwert
Optimizer bestimmt
idealen DOP
Tatsächlicher DOP
= MIN(Default DOP, idealer DOP)
PARALLEL_MIN_TIME_THRESHOLD
Statement wird
seriell ausgeführt
Statement wird
parallel ausgeführt
Arbeitsweise von Parallel Stmt. Queuing
SQL
Statements
Statement wird geparsed
Oracle ermittelt
automatisch den DOP
Wenn zu wenig Parallel Server vorhanden
sind, landet das Statement in der Queue
64
32
64
16
32
128
16
FIFO Queue
Sind genügend Parallel
Server vorhanden, wird
erstes Statement aus der
Queue ausgeführt
Wenn genügend Parallel
Server vorhanden sind, wird
das Statement sofort
ausgeführt
8
128
Parallel Statement Queuing
SQL Monitoring im Enterprise Manager
Klicken auf
SQL ID für
weitere
Informationen
Uhrsymbol
zeigt ein
wartendes
Statement
an
Awaiting screen
shot from EM
Parallel Statement Queuing
SQL Monitoring im Enterprise Manager
Wait Event
zeigt an,
dass das
Statement
am Anfang
der Queue
steht
Parameter für Parallel Query in 11.2
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 = 16384
parallel_instance_group = ''
parallel_max_servers = 20
parallel_min_percent = 0
parallel_min_servers = 0
parallel_threads_per_cpu = 2
(TRUE|FALSE)
(2148 – 32768)
()
(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)
Level der Systemauslastung
Anzahl ServerProzesse
100% Auslastung
Seriell und im Hintergrund
256
PARALLEL_MAX_SERVERS
Spielraum für
parallele Statements
PARALLEL_SERVERS_TARGET
128
ConcurrencyLevel
PARALLEL_DEGREE_LIMIT
0
Annahme: PARALLEL_DEGREE_LIMIT = 16 (mit 32 Prozessen)
Parameter-Hierarchie
PX Features:
• NONE
1.
PARALLEL_DEGREE_POLICY = MANUAL
a) Keiner der neuen Parameter wird genutzt
PX Features:
2.
3.
PARALLEL_DEGREE_POLICY = LIMITED
a)
PARALLEL_MIN_TIME_THRESHOLD = 10s
b)
PARALLEL_DEGREE_LIMT = CPU
• Auto DOP
Restricted
PARALLEL_DEGREE_POLICY = AUTO
a) PARALLEL_MIN_TIME_THRESHOLD = 10s
PX Features:
b)
PARALLEL_DEGREE_LIMT = CPU
• In-Memory
c)
PARALLEL_SERVERS_TARGET = 4 * CPU_COUNT *
PARALLEL_THREADS_PER_CPU (* ACTIVE_INSTANCES)
• Auto DOP
• Queuing
Full Partitionwise Join
Beispiel Range-Hash
SELECT sum(sales_amount)
FROM sales s, customer c
WHERE
Sales
s.cust_id = c.cust_id;
Customer
Range
partition May
18th 2008
Range
partition May
18th 2008
Sub part 1
Sub part 1
Sub part 1
Sub part 1
Sub part 2
Sub part 2
Sub part 2
Sub part 2
Sub part 3
Sub part 3
Sub part 3
Sub part 3
Sub part 4
Sub part 4
Sub part 4
Sub part 4
Beide Tabellen haben den
gleichen Parallelisierungsgrad
und sind nach der Join Column
partitioniert
Ein großer Join wird in
mehrere kleine Joins
unterteilt, wobei
parallelisiert über die
Partitions gearbeitet wird
Agenda
• Die Motivation hinter einem Data Warehouse
<Insert Picture Here>
• Konzept und Design
• Drei in Eins: Das Schichtenmodell
• Über die Rolle der Fachanwender
• Laden der Daten
• Eine Auswahl an geeigneten Methoden
• Parallelisierung nutzen
• Betrieb des Warehouse
• Effiziente Datenhaltung über die Zeit
• Optimizer Statistiken
• Backup
Über die richtige Anzahl an Platten
Performance optimieren
OLTP
DWH
• Typisch sind
5 IOPs pro Transaktion
• Erreichbar sind
• SAS: 80-100 IOPs
• SATA: 50
• Formel
• 200 MB Daten pro Core
• Erreichbar sind
20-30 MB/Sec pro Platte
• Anzahl Platten =
Anzahl Transaktionen pro Sek. * 5
--------------------------------------------Erreichbare IOPs pro Platte
• Formel
• Anzahl Platten =
Anzahl Cores * 200 / 20
Messung von I/O-Durchsatz
• Orion (ORacle IO Numbers)
•
•
•
•
•
Read/Write-Tests (Achtung: schreibt Daten auf Platte!)
Command Line Tool mit vielen Testoptionen
OLTP- und DWH-Workload werden nachgestellt
Ab 11.2 im /bin-Verzeichnis der DB
www.oracle.com/technology/software/tech/orion/index.html
• Calibrate_IO
• Read-Only Test
• Wenige Testoptionen
• Ab Version 11g verfügbar
• Beide Werkzeuge erfordern die Aktivierung von
asynchronous I/O
Calibrate_IO
• Nutzt Oracle Libraries statt beliebige Last-Generatoren
• 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; /
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_resmgr.htm#CJGHGFEA
Performance und Systemzustand
Hilfsmittel beim Monitoring
•
•
•
•
•
•
•
•
•
PERFSTAT
Diverse Alerts
AWR Reports (Automatic Workload Repository)
ADDM (Automatic Database Diagnostic Monitor)
SQL Tuning
Statistiken
Histogramme
Proaktive Healthchecks
Support Workbench
Inkrementelle globale Statistiken
Sales
Table
May
18 2008
S1
May 19th 2008
S2
May 20th 2008
S3
May 21st 2008
S4
May 22nd 2008
S5
May 23rd 2008
S6
th
1. Partitions-Statistiken
werden gesammelt &
zusammengefasst
Global
Statistic
2. Globale Statistiken
werden durch die
Aggregation von
Partitionsinformationen
erzeugt
Sysaux Tablespace
Inkrementelle globale Statistiken
Sales
Table
May
18 2008
S1
May 19th 2008
S2
May 20th 2008
S3
May 21st 2008
S4
May 22nd 2008
S5
May 23rd 2008
S6
th
May 24th 2008
3. Eine neue Partition
wird hinzugefügt &
Daten fließen ein
6. Generierung der globalen
Statistiken durch Aggregation
der neuen PartitionsStatistiken
Global
Statistic
S7
4. Statistiken für neue
Partition sammeln
Sysaux Tablespace
5. PartitionsStatistikdaten aus
SYSAUX anfordern
Weitere Neuerungen für Statistiken
• Pending Statistics
• OPTIMIZER_USE_PENDING_STATISTICS=FALSE (Default)
• Verifizieren und publizieren (mittels DBMS_STATS Pack)
• Erweiterte Optimizer-Statistiken
• Verhinderung von falschen Kardinalitäts-Schätzungen für
Spalten, für die funktionale Abhängigkeiten bestehen
• Spalten, die oftmals gemeinsam in der WHERE-Klausel als Filter genutzt
werden
• Betrachtung von Spalten-Gruppen und deren Wechselwirkung:
Spalten-Abhängigkeiten wie Automarke und Typ, saisonale
Verkäufe etc.
• Bekanntgabe von Spalten, auf die in der WHERE-Klausel mit
einer Funktion gebraucht werden, z.B. to_upper()
http://st-curriculum.oracle.com/obe/db/11g/r1/prod/perform/multistats/multicolstats.htm
Konzept der Table Compression
Unkomprimierter Block
Lokale
Symboltabelle
Komprimierter Block
Mehr Daten pro
Block
Advanced Compression in Oracle 11g
Overhead
Free Space
Unkomprimiert
Komprimiert
Weitere Inserts sind
wieder nicht
komprimiert
Inserts sind nicht
komprimiert
Block Usage erreicht
PCTFREE
– Komprimierung wird
ausgelöst
Block Usage erreicht
PCTFREE
– Komprimierung wird
ausgelöst
Verwendung OLTP Table Compression
• Compression für existierende Tabelle einschalten
ALTER TABLE t2 COMPRESS FOR OLTP;
Keine Komprimierung für existierende Datensätze
• Existierende Tabelle komprimieren
ALTER TABLE … MOVE COMPRESS;
ALTER TABLE … MOVE COMPRESS FOR OLTP;
ALTER TABLE … MOVE PARTITION … COMPRESS;
Partitionen: Lokale Bitmap Indizes werden UNUSABLE
“Normale” Komprimierung mit PCTFREE=0,
Advanced Compression mit PCTFREE=10
Best Practices OLTP Table Compression
• Komprimieren der zehn größten Tabellen
• 20% der Tabellen verbrauchen 80% des Speicherplatzes
• Bessere Kompressionsraten mit größeren Blöcken
• Höhere Wahrscheinlichkeit mehrfacher gleicher Werte
• Sortiertes Laden nach nicht selektiven Spalten
• B-Tree Index Kompression
• Index validieren und INDEX_STATS analysieren
index_stats.opt_compr_count
liefert Prefix Länge N
index_stats.opt_compr_pctsave liefert Einsparung in %
CREATE INDEX idx_comp ON ... COMPRESS N;
• Bitmap Indexes sind an sich hoch komprimiert
• Geeignet für niedrige bis mittlere Kardinalität
Abschätzen der Compression Ratio
• Compression Advisor
(für Oracle 9i und höher, ab 11.2 im DB Control enthalten)
http://www.oracle.com/technology/products/database/compression/compression-advisor.html
Exadata: Hybrid Columnar Compression
• Compression Unit
• Eine logische Struktur, welche mehrere Datenblöcke umspannt
• Die Spaltenorganisation wird während des Ladens der Daten
durchgeführt
• Jede Spalte wird separat komprimiert
• Alle Spaltendaten für ein Datenset werden in einer Compression
Unit gespeichert
• Typische Größe von 32k (4 Blöcke x 8k Blockgröße)
Logical Compression Unit
BLOCK HEADER
CU HEADER
C1
C2
BLOCK HEADER
C3
BLOCK HEADER
C7
C4
C5
C6
BLOCK HEADER
C8
C8
Vergleich der Kompressionstypen
1000
500
Unkomprimiert
OLTP Compress
1000
500
Hybrid & Pure
Column
0
Unkomprimiert
OLTP
Pure
Column
50
Hybrid
Pure Column
0
Tabellengröße
100
0
Zeit eines Scans
Zeit zum Auffinden einer Zeile
• HCC ist eine spaltenorientierte Technologie der zweiten Generation, welche
die Vorteile der spalten- und zeilenorientierten Speicherung kombiniert
• Höchste Komprimierung – HCC reicht an rein spaltenorientierte Systeme heran
• Sehr gute Zeiten beim Scan – 93% so gut wie bei rein spaltenorientiert
• Gute Zeiten beim Auffinden einer einzelnen Zeile – eliminiert die Schwäche rein
spaltenorientierter Systeme
• Das Zeilenformat ist immer noch am geeignetsten für Workloads mit Updates
oder Trickle Feeds
Information Lifecycle Management (ILM)
• Archivierung der Daten in einem
rollierenden Verfahren
Jan 2009
• Backup der ältesten Partition
• Älteste Partition löschen
• Aktuellste Partition hinzufügen
Feb 2009
Mar 2009
• Einzelne Partitionen bzw. Tablespaces mit
Partitionen
• Auf READ ONLY setzen
• Tablespaces komprimieren und verschlüsseln
• Partitionen auf günstigen Storage verschieben
Apr 2009
May 2009
Jun 2009
:
Jan 2010
Eine eigene Backup/Recovery-Strategie
Warum für das Data Warehouse wichtig?
• Datenmengen sind viel größer
• Kosten für OLTP-analoge Verfahren zu hoch
• Geringerer Anspruch an Hochverfügbarkeit
• System kann auch mal 1 Tag oder länger nicht zur Verfügung
stehen
• Änderungsvorgänge finden kontrolliert statt
• Keine Online-Updates durch Benutzer
• Zeitpunkt-bezogene Batch-Läufe sind wiederholbar
• Fehlerhafte Daten können gezielt wieder entladen werden
• Ein Warehouse enthält oft historische Daten
• Statische Daten, die nicht mehr geändert werden
• Sind bereits gesichert und müssen nicht mehr gesichert werden
Wo liegen die Unterschiede
Zeitlich
definierter
Bulk-Ladestrom
Viele Updates
Viele Inserts
OLTP
DWH
OLTP
OLTP
OLTP
2-200
GB
2-200
TB
Read Only
OLTP
Incremental Backup
• RMAN> BACKUP INCREMENTAL LEVEL n DATABASE;
Incremental
Differential
Backup
Incremental
Cumulative
Backup
Sonntag
Incremental Level 0
Incremental Level 0
Montag
Incremental Level 1
Incremental Level 1
Dienstag
Incremental Level 2
Incremental Level 1
Mittwoch
Incremental Level 3
Incremental Level 1
DWH-spezifische Aspekte
• RMAN> REPORT UNRECOVERABLE;
• Liste aller Files, die aufgrund von z.B. einer NOLOGGINGOperation nicht in sicherem Zustand vorliegen
• Frühzeitig Warnung vor dem Volllaufen von
Tablespaces absetzen
Read-only Tabellen und Tablespaces
• Read-only Tabellen und Tablespaces einsetzen
• Erweiterte Performance, Skalierung und Sicherheit
• Reduzierung der zu sichernden Datenmenge
• RMAN muss Read-only Tabellen nicht immer wieder
sichern
• Bessere Abfrage-Performance für Read-only Tabellen
• Dient zusätzlich auch der Absicherung von
Compliance-Vorgaben (keine Datenveränderung)
• Die Daten können auf Read-only Medien gespeichert
werden
Rollback von Ladeläufen
• Betrachten des kompletten Ladelaufs als eine
zusammenhängende Transaktion
• Entweder werden alle Sätze geladen oder keine
• Wie können abgebrochene Ladeläufe wieder
rückgängig gemacht werden?
Vorteile des RMAN
• Incremental Backup
• Die einzige Lösung, die dies erlaubt
• Block Media Recovery
• Einzelne fehlerhafte Blöcke können korrigiert werden
• Minimiert „menschliche“ Fehler
• Einfach handhabbar
• Komplettsicherung mit Kommandos wie BACKUP DATABASE
• Backup-Vorgänge sind automatisierbar
• Unused Block Compression
Vorteile des RMAN
• Es entstehen keine Redo-Informationen während des
Online Backup
• Minimierter Aufwand
• Binary Compression
• Scripting
• Stored Scripts und Test Scripts
• Verwalten von Backup-Scripts im RMAN Katalog
•
•
•
•
Simulieren von Backups und Restores
Integrierbar mit 3rd Party Media-Management-Produkten
Lässt sich auch über Enterprise Manager ansteuern
Erstellen von Clones und Standby Datenbanken
Verwaltungsdaten des RMAN
• Gespeichert werden die Verwaltungsdaten entweder
• Im Control file
• Einfacher zu handhaben
• Nicht alle Funktionen verfügbar
• Oder im Recovery Catalog
• Empfohlen in separater Datenbank
• Hält alle historischen Informationen
• Mehrere DBs können gleichzeitig verwaltet werden
• Das Backup-Thema kann zentralisiert durchgeführt werden
• Es können Scripte gespeichert werden
Ausblick: Workshop-Reihe DWH im Fokus
•
•
•
•
•
•
Teil 1: Architektur und Konzepte
Teil 2: Tabellen als Basis
Teil 3: Star Schema / Optimierung
Teil 4: Materialized Views und OLAP
Teil 5: Laden und Aktualisieren
Teil 6: Betrieb und Management
Ankündigung in der Oracle DWH Community:
http://www.oracle.com/global/de/community/dwh/index.html
[email protected]
Herunterladen