Oracle Data Warehouse Technik im Fokus Praxis-Seminar, Mai 2015 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Die Themen Data Warehouse – Architekturen für effiziente Informationsverarbeitung Partitionierung Schlüssel und Indizierung im Data Warehouse Partitionierung und Indizierung im Data Warehouse Star Query Transformation Komprimierung im Data Warehouse Query-Optimizer und System-Statistiken im Data Warehouse Speicher-Hierarchie – Beispiel Flash Automatische Verwaltung von Daten im Data Warehouse (Heat Map) Information Lifecycle Management Parallelisierung Query Result Cache Materialized Views und Kennzahlenkonzepte Automatische Aktualisierung von Materialized Views Konzepte rund um Materialized Views Automatisches “Query Rewrite” Materialized Views und Hierarchisierung von Dimensionen Hilfsmittel bei der Verwaltung von Materialized Views Analytische SQL-Funktionen In-Memory Database im Data Warehouse Wo und wie macht In-Memory im Data Warehouse Sinn und was ändert sich? Laden und Updaten im Data Warehouse mit Bordmitteln der Datenbank ETL-Performance-Techniken in der Datenbank Set-Based ETL-Prüf- und –Transformations Techniken in der Datenbank Umgang mit Schlüssel im Verlauf des Ladens Lade-Transaktionssteuerung innerhalb der Datenbank Lade-Tools ausserhalb der Datenbank Security und Mandantensteuerung im Data Warehouse Multi-strukturierte Daten mit JSON Big Data Analysen im Data Warehouse mit Big Data SQL R als universelles Analyse-Mittel Notwendige Dinge, die niemand macht: Metadatenverwaltung im Data Warehouse Die optimale Hardware für das Data Warehouse Cluster-Einsatz Monitoring Data Warehouse Zusammenfassung Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 2 Data Warehouse – Architekturen für effiziente Informationsverarbeitung Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Immer wieder auf den Punkt bringen! Ein unternehmensweites DWH muss mehr leisten: 1 Zentral und Unternehmensweit Zusammenführen von Daten aus allen Geschäftsprozessen Ermöglichen einer integrierten Sicht auf das ganze Unternehmen und nicht nur einzelner Abteilungen Integration bedeutet die Harmonisierung verschiedner Sichten 3 Historisierung Aufgrund der Vergangenheit Trends der Zukunft erkennen Nur wer die Geschichte kennt, kann die Zukunft verstehen Nicht nur aktuelle Realtime- sondern vor allem historische Daten sind dafür nötig 2 Erklärende Mehrwerte Für alle, auch sachfremde Mitarbeiter verständliche Daten Zusätzliche Referenzdaten von außerhalb des Unternehmens Erklärungen statt Codes 4 Entkopplung von op. Systemen Nur in separierten Systemen simulieren Neue Daten-Kombinationen schaffen Realtime-freie zeitbezogene Messpunkte schaffen 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 5 Was geschieht in einem Data Warehouse wirklich Service Servicekunde Integration Layer Enterprise Layer Core - DWH / Info Pool Referenzdaten (extern) (10%) Stammdaten (10%) Bewegungsdaten / Transaktionen (80%) Logistik Logistikaufwand Controlling Marketingsicht Sozialsituation Kundenhistorie Profitabilität Profitabilität Einkauf Kunde Produkte&Trends Vertrieb Kundenhistorie Marketing Marketingsicht Logistikaufwand für einen Kunden Produkte&Trends User View Layer GeschäftsObjekte Kennzahlen Es geht um Gesamtsichten Top 5 Geschäftsfelder Profitabilität eines Kunden Multidimensionale Sichten Profitabilität eines Produktes über den gesamten Lebenszyklus Themenbezogene Sichten Bedarfsprognose von sozialen Gruppen Servicekunde Top 100 unternehmensweite Kennzahlen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Aktualität und Entwicklung des eigenen Portfolios Eigene Marktstärke im Vergleich zu den Wettbewerbern DATA WAREHOUSE 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 – 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 3-Schichten-Architektur Schlagwörter: • Stabilität Das Ziel der 3-Schichten-Architektur ist der Entwurf einer möglichst umfassenden, mehrere Unternehmens- und Themenbereiche abdeckenden stabilen Informationsablage, die in kurzer Zeit konsolidierte Berichte und Analysen für alle (!) Zielgruppen des Unternehmens bereitstellt. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | • Kurze Lieferzeit • Konsolidiert • Alle Zielgruppen DATA WAREHOUSE Normalisieren / Denormalisieren Grundprinzip der Warehouse-Modellierung / Granularisierung als Lösung Operative Daten PRODUKTDATEN PD4711 AMKLB 9987865234 7769 0000000 KLABAUTER IIO ??? EERWEERW 883466 888750000 888000 EU-Wert 735328567353654 i8886345 7746 Müll, Altlast, unverständliche Daten Neu sortierte Daten Normalisierte Daten (DWH) Produktsparten Spartenname Produktdaten Spartennr Produktname Produktgruppen Produktenr Gruppenname Einzelpreis Gruppennr Gruppenname Gruppennr Produkte Spartenname Produktname Spartennr Produktenr Einzelpreis Granulare Daten Im DWH Verständliche Information (denormalisiert) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 9 Ein vollständiges Bild über relevante Geschäftsobjekte Service Integration Layer Servicekunde Enterprise Layer Core - DWH / Info Pool Referenzdaten (extern) (10%) Stammdaten (10%) Bewegungsdaten / Transaktionen (80%) Logistik Logistikaufwand Marketingsicht Sozialsituation Kundenhistorie Profitabilität Controlling Profitabilität Einkauf Produkte&Trends Kunde Vertrieb Kundenhistorie Marketing Marketingsicht Log Files Web-Clicks Mails Call-Center Verträge Berichte HDFS / NoSQL Logistikaufwand für einen Kunden Produkte&Trends User View Layer GeschäftsObjekte Kennzahlen Top 5 Geschäftsfelder Profitabilität eines Kunden Multidimensionale Sichten Profitabilität eines Produktes über den gesamten Lebenszyklus Themenbezogene Sichten Bedarfsprognose von sozialen Gruppen Servicekunde Multi-strukturierte Daten Es geht um Gesamtsichten Top 100 unternehmensweite Kennzahlen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Aktualität und Entwicklung des eigenen Portfolios Eigene Marktstärke im Vergleich zu den Wettbewerbern DATA WAREHOUSE Flexibilität und schnelles Bereitstellen Service Integration Layer Servicekunde B B T Einkauf B Kundenhistorie Log Files Web-Clicks Mails Call-Center Verträge Berichte HDFS / NoSQL Logistikaufwand für einen Kunden Produkte&Trends D D F D F D D Kunde Vertrieb D F D B Produkte&Trends D Marketingsicht Sozialsituation Kundenhistorie Profitabilität T Profitabilität B User View Layer Servicekunde GeschäftsObjekte Multi-strukturierte Daten Kennzahlen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Zusammenhängender Abfragebereich Controlling R S S S B T Logistikaufwand Marketingsicht Core - DWH / Info Pool R Logistik Marketing Enterprise Layer Es geht um Gesamtsichten „Breite“ der Datenmodelle DATA WAREHOUSE Flexibilität und schnelles Bereitstellen Service Integration Layer Servicekunde Controlling T Profitabilität T Einkauf B Produkte&Trends Vertrieb R S S S B T Logistikaufwand B D B Strategische Daten Rolle der zentralen Schicht D D • Sich aus Informationsvorat bedienen F D • Schneller reagieren können F D • Synchronisierung von „User Views“ F D D D Taktische Daten Log Files Web-Clicks Mails Call-Center Verträge Berichte HDFS / NoSQL User View Layer B B Kundenhistorie Marketingsicht Core - DWH / Info Pool R Logistik Marketing Enterprise Layer Multi-strukturierte Daten Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | • Vermeiden von Redundanzen • Historische Sicht DATA WAREHOUSE Die Rolle multidimensionaler Sichten Buchhaltung: Es fehlen Daten Warum sind die Spediteursrechnungen so hoch? Sind alle Bestellungen korrekt bezahlt worden? Wie hoch sind die Versandkosten pro Lieferung? Was wurde storniert? Controlling: Vergleichbarkeit fehlt Marketing: Absatzzahlen sind nicht aussagefähig Wie viele Kunden gibt es? Lohnt die Kundenkarte? Welche Segmentierung gibt es? Vertrieb: wünscht leichtere Auswertungen Was sind wichtige Produkte? Was sind rentable Sparten? Hat sich der Servicebereich gelohnt? SERVICE GmbH Vertrieb Marketing Management Buchhaltung Was sind rentable Sparten? Wie rentabel sind einzelne Produkte? Was kosten Produkte im Einkauf? Wie teuer wurden Produkte verkauft? Management: Kennzahlen fehlen Wie hoch sind die liquiden Mittel? Wie hoch sind die Außenstände? Controlling Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 13 Die Rolle multidimensionaler Sichten Buchhaltung: Es fehlen Daten Warum sind die Spediteursrechnungen so hoch? Sind alle Bestellungen korrekt bezahlt worden? Wie hoch sind die Versandkosten pro Lieferung? Was wurde storniert? Kunden Kundenkarte Segmentierung Umsatz / Nicht-Umsatz Marketing: Absatzzahlen sind nicht aussagefähig Vertrieb: wünscht leichtere Auswertungen Was sind wichtige Produkte? Was sind rentable Sparten? Hat sich der Servicebereich gelohnt? Unternehmensbereiche SERVICE GmbH Vertrieb Marketing Management Bestellung Controlling: Vergleichbarkeit fehlt Wie viele Kunden gibt es? Lohnt die Kundenkarte? Welche Segmentierung gibt es? Produkte Sparten Lieferung Buchhaltung Sparten Was sind rentable Sparten? Wie rentabel sind einzelne Produkte? Produkte Was kosten Produkte im Einkauf? Einkauf/ Wie teuer wurden Produkte verkauft? Verkauf Management: Kennzahlen fehlen Wie hoch sind die liquiden Mittel? Wie hoch sind die Außenstände? Geldflüsse Gebundene Werte Controlling Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 14 Referenzdaten Stammdaten Wohnkategorien Wohnart_ID Wohnart Lieferanten Lieferanten_Art Bildung und Berufe Lieferant Produktart_ID Berufs_GRP Produktart Kundenstamm Kunderart Eink_GRP_ID KD_Karten_ID Einkomm_GRP PrivatKD_Art Skonto_Proz Gr_Haushalt Land Fam_Stand Kreis Geb_Dat Ort Kanal_ID Internet, Baumarkt, Partner, Kette .... Produktarten Berufs_GRP_ID Regionen Kanal Lieferant_ID Bildungs_GRP Einkommenskategorien Vertriebskanäle Vermittlung, Handelsware Geschäftssegmente Segement_ID Segment Dienstleistungen Vermittl_Art_ID Vermittl_Art Finanzleistung Handwerksleistung IT-Ware, Baumarktware Produkte Pref_Liefer_ID Produktgruppen Name Produktgrp_ID Kunden_ID Produktgruppe Computer, Haushaltsware, KFT... Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | VK_Preis Produkt Produkt_ID DATA WAREHOUSE 15 D_Kunden Alle_Kunden Land D_Zeit Kreis Alle_Zeiten Ort Jahr Kunderart Quartal Wohnart_ID Monat Wohnart Monats_i_Jahr KD_Karten_ID Tag_i_Jahr PrivatKD_Art Tages_ID F_Einkaeufe D_Lieferanten Mitarbeiter_ID Alle_Lieferant Produkt_ID Land Lieferanten_ID Kreis D_Produkt EK_Preis Ort Alle_Produkte Menge Lieferanten_Art Kanal Lieferzeit_ID Lieferant Zeit_ID Lieferant_ID Y Berufs_GRP_ID Segment Beruf& Bildung Merkmal Familie Geb_Dat Einkomm_GRP Segement_ID F_Verkaeufe Vermittl_Art_ID Vermittl_Art Produkt_ID Produktgrp_ID Menge Segmentierung nach Einkommen VK_Wert Discout_Proz Name Kunden_ID Kunden_ID Filial_ID Vermittlung, Handelsware IT-Ware, Baumarktware Segment Zeiit_Id Positions_ID Fam_Stand Eink_GRP_ID Produktart_ID Kauf_ID Berufs_GRP Gr_Haushalt Kanal_ID Produktart Skonto_Proz Bildungs_GRP Internet, Baumarkt, Partner, Kette .... Sicht auf - Geschäftsobjekte - Sicht auf Kennzahlen - Drillpfade - Synchronisierungselemente Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Finanzleistung Handwerksleistung Computer, Haushaltsware, KFT... Produktgruppe Pref_Liefer_ID VK_Preis Produkt Produkt_ID DATA WAREHOUSE 16 Multidimensionales Modell (Star Schema) Status V1 V2 V3 V4 Einstiegspunkte für Anwender-Abfragen Artikel A1 A2 A3 A4 Art1 Art2 Art3 Art4 Star Schema • Flexibel • Graphisch auch für Business-User verständlich 17 Verkäufe Farbe Blau Gelb Rot Lila Maier Müller Schmid Engel 1:n A1 A2 A3 A4 R1 R2 R3 R4 R1 R2 R3 R4 Nord Sued West Ost Z1 Z2 Z3 Z4 P F P F 1 : n V1 V2 V3 V4 Kunde 4 4 9 8 Zeit n:1 n : 1 Schwach Mittel Hoch Schwach Wohndichte Z1 Z2 Z3 Z4 6.7.09 7.7.09 8.7.09 9.7.09 Q3 Q3 Q3 Q3 Regionen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Multidimensionales Modell (Star Schema) Status V1 V2 V3 V4 A1 A2 A3 A4 Dimensionen Star Schema • Flexibel • Graphisch auch für Business-User verständlich 18 (Kontext) Verkäufe Farbe Art1 Blau Art2 Gelb Art3 Rot (Kontext) Art4 Lila P F P F Dimensionen Einstiegspunkte für Anwender-Abfragen Artikel Maier Müller Schmid Engel 1:n 1 : n Kennzahlen 4 A1 R1 Z1 V1 4 A2 R2 Z2 V2 9 A3 (Numerische R3 Z3 V3 8 A4 Messungen) R4 Z4 V4 R1 R2 R3 R4 Kunde Zeit n:1 n : 1 Schwach Nord Mittel Sued Hoch West (Kontext) Schwach Ost Z1 Z2 Z3 Z4 6.7.09 Q3 7.7.09 Q3 8.7.09 Q3 9.7.09 (Kontext) Q3 Dimensionen Dimensionen Wohndichte Regionen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Levelschlüssel Dim_Artikel Artikelsparte_Langname Artikelsparte Sparte Artikelgruppe_Langtext Levelschlüssel Künstlicher Dimension Key Aggregation Parent Aggregation Artikelgruppe Artikel_Langtext Artikel Artikel_Schlüssel Dim_Schlüssel Fakten (Umsatz) 19 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Konsolidierungslevel Levelschlüssel/ Objektname Business Key Parent Betrachtungslevel Hierarchie Dimensionen DATA WAREHOUSE Unbalanced Hierarchy Star Schema-Design - Modellierungstechniken Produkt Lieferanten Zeit Factless Fact Teile Parent Teil von Benutzte Teile Count Produkte Sparte Gruppe Produkt Region Fakt Gelieferte Teile Bestellkosten Lieferant Ort Kreis Land Region Verkauf Fakten Conformed Dimension Lieferant Intersection- Table (Degenerated Fact) Verkäufer Verkaufsanteil Kunde Segment Alter Bildung Verkäufer 1:1 KD_CRM Anschrift Kontakt Ja-Umsatz Fakt Umsatz pro Verkäufer Bonusgruppe Bonusprogramm Degenerated Dimension Ausgelagerte Dimension Zeit Conformed Dimension 20 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Varianten von Analyseprozessen 1. Kennzahlen-gesteuertes Event-Processing 2. Klassisches Standard-Berichtswesen x Operativer Prozess DWH 3. Interaktives Ad-Hoc-Analysen 4. Analyse-Cycle Problem Definition Data Preparation Model Building Deployment Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Anforderungen aus den Analyseprozessen Modell form Nähe zu Operativen Prozessen 1. Kennzahlen-gesteuertes Event-Processing Keine Vorgaben eng Sekunden 2. Klassisches Standard-Berichtswesen Keine Vorgaben weit Bis zu 24 Std. 3. Interaktives Ad-Hoc-Analysen multidimensional weit Bis zu 24 Std. Flach, maschinen-lesbar Sehr weit 4. Analyse-Cycle Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Dauer der AnalysePhase Wochen bis zu mehreren Jahren DATA WAREHOUSE 22 Anforderungen aus den Analyseprozessen + Technologie Modell form Nähe zu Operativen Prozessen Dauer der AnalysePhase 1. Kennzahlen-gesteuertes Event-Processing Keine Vorgaben eng Sekunden 2. Klassisches Standard-Berichtswesen Keine Vorgaben weit Bis zu 24 Std. 3. Interaktives Ad-Hoc-Analysen Multidimensional weit Bis zu 24 Std. Sehr weit 4. Analyse-Cycle Flach, maschinenlesbar Wochen bis zu mehreren Jahren Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Technologie Materialized Views als vorbereitete Profile (event. noSQL) Materialized Views in Verbindung mit ETL Star Schema -> In-Memory / event. Views Flexibilität für interaktive Analysen , Alle ausgewählten Felder sind schnell analog OLAP - Würfel Mining Tabellen -> In-Memory Die Mining-tabellen werden für den jeweiligen Analyse-Prozess einzeln und gezielt In-Memory geladen DATA WAREHOUSE 23 Allgemeine Regeln für das Star Schema • Star Schema einfach halten • Überfrachtete Dimensionen aufspalten – Für Endbenutzer überschaubarer – Nicht mit zu vielen Dimensionsattributen überfrachten – Bei sehr oft genutzten Selektionskriterien • Code-Attribute vermeiden – Attribute mit beschreibenden Inhalten verwenden – Sprechende Columnnamen verwenden – Level-bezogene Präfixe verwenden • Operativ genutzte Daten in separate Tabellen auslagern – Bei zu vielen Attributen • Dimensionen mit nur einem Attribut in die Faktentabelle verlagern • Keine Snowflakes nutzen – 1:1-Beziehung zu Dimensionen • Star Schema = VirtualisierungsKandidat bei In-Memory Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 24 User View Layer (Faktentabellen) • So granular wie möglich aufbauen – Performance-Thematik separat lösen – Keine eigene Faktentabelle bilden, nur um eine höhere Aggregations-Ebene zu erhalten – Keine separate Faktentabelle aus Performance-Gründen • “Verwandte” Faktentabellen schaffen – Über gemeinsam genutzte Dimensionen (Conformed Dimensions) • Die Faktentabelle besitzt keinen eigenen PK – Zugriff nur über die Foreign Key-Felder – Sätze müssen nicht eindeutig sein Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Integration Layer • Arbeitsschicht für alles, was der technischen Bearbeitung unterliegt • Überprüfung von – Syntaktischer Korrektheit (Typ, Länge, NULL) – Vollständigkeit der Daten und Mengenverhältnisse – Gültige Wertebereichen – Vorhandensein von Referenzdaten – Eindeutigkeit (optional) – Eliminierung von NULL-Werten – ..... Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Integration Layer • Zusammenführung operativ getrennter Daten • Bilden neuer Informationsobjekte mit dem Ziel der einfacheren Weiterverarbeitung (optional) Stage ist leer, wenn nicht geladen wird • Waisen-Management (optional) • Bildung von Daten-Deltas (optional) • Keine 1:1-Kopien • Keine besonderen Datenmodell-Strukturen • Wenn möglich, bereits beim Extrahieren Prüfungen und Wandlungen von Daten vornehmen • Keine Indizes verwenden Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Enterprise Layer (DWH Kerndatenschicht) • In Richtung 3. Normalform (3 NF) tendierend • In Teilbereiche (Subject Areas) gegliedert aber sachgebietsübergreifend zusammenhängend • Anwendungs- und Geschäftsprozess-neutral – Dieselben Objekte werden in mehreren Geschäftsprozesse benötigt – Daten müssen tauglich genug sein, Datenarten um sie in allen Anwendungen zu – Stammdaten (historisiert) verwenden – Referenzdaten – externe / interne, allgemeine – Eindeutigkeit aller Objekte und Namen Sammlungen – Bewegungsdaten / Transaktionslevel (angesammelt) – Redundanzfreiheit aller Informationen – Langlebigkeit der Daten (Historisierung) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Regeln einer effizienten Data Warehouse Architektur • Permanente Orientierung an den Informationsbedürfnissen der Benutzer • Technisches und fachliches Monitoring von Inhalten und System • Kompaktes Schichtenmodell schaffen – Wege verkürzen – Redundanzen in unterschiedlichen Schichten vermeiden – Berechnungen / Aggregate so früh wie möglich durchführen • Zusammenhängende Data Mart-Schicht – Mehrfachnutzung von Dimensionen / Conformed Dimensions – Geschickter Umgang mit sehr großen Faktentabellen / Vermeiden unnötiger Kopien – Eher granulare Informationen auch in den Fakten-Tabellen • Data Marts eventuell virtualisieren Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 29 Regeln einer effizienten Data Warehouse Architektur • Granularisierte 3NF-DWH Schicht schafft – Neutralität gegenüber Vorsystemen – Flexibilität bei der Bereitstellung neuer Abfragemodelle – Über Data Mart-Grenzen hinweg gemeinsam genutzte Berechnungen Aggregationen usw. so früh wie möglich umsetzen • Alle Schichten in einem DB-Raum – Ein zusammenhängender DB-Server-Cluster zum Verhindern unnötiger Wege • In-Database-Aktivitäten (Prüfen/Laden) – Ein zusammenhängender DB-Server-Cluster zum Verhindern unnötiger Wege • 1:1 Kopien verhindern – Bereits beim Lesen in die Vorsysteme einfache Prüf- und Filteraktivitäten – Updates und einzelne Deletes vermeiden – ETL wiederholbar aufbauen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 30 Szenario DWH - Gesamtsicht OLTP Systeme In Memory Temporäre Daten T T Enterprise Layer Core - DWH / Info Pool Referenzdaten Stammdaten R R R S S S User View Layer (teils virtuell) • Dimensionen als Views • Fakten als In-Memory-Variante von Core-Transaktionen • Kennzahlen-MAVs physikalisch • R-Objekte physikalisch • JSON-Objekte physikalisch Partitionierte Transaktionsdaten nur wenn sie abgefragt werden Vorberechnete Kennzahlen I n t e r n e D a t e n Disk-Daten Integration Layer Embedded Meta-Layer C Q A A L MJ Operational Data JSON Unstructured E x t e r n e (virtuell) JSON Data JSON HDFS / NoSQL Unstructured Data JSON Data Mining Statistikdaten Oracle R Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Grenzfälle: Wo Wünsche nach Verbesserungen entstehen Integration Layer • Schichtenmodell ist Blaupause für Verantwortlichkeiten Enterprise Layer Core - DWH / Info Pool User View Layer DWHAdmin • Fehlendes ganzheitliches Informationsmanagement – Redundanzen, wenig Wiederverwendung, – fehlende Synchronisation bei zusammenhängenden Themen Integration Layer Enterprise Layer Core - DWH / Info Pool DWHAdmin User View Layer User View Layer User View Layer • Fehlende sachgebietsübergreifende Breite beim Informationsangebot • Zu hohe Latenz-Zeiten • Zu geringe Flexibilität und Schnelligkeit in den Projekten bei der Umsetzung neuer Informations-Bedarfe Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 32 Die Rolle der zentralen Schicht Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer ????????? • End-Anwender benötigen diese Schicht nicht! • Aber: Sie hat eine strategische und taktische Bedeutung – Historisches Wissen (strategisch) – Sachgebiets-übergreifende Zusammenhänge (Enterprise-View, strategisch) – Projekt-taktische und Maintenance Aspekte: • schnelles Erzeugen neuer Strukturen • Integriertes Datenmodell verhindert Redundanzen • Leichtere Organisation des Gesamt-ETL-Ablaufs: Einfacheres Normalisierung / Denormalisierungs-Schema Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 33 Zugriff von Endbenutzern auf die zentrale Schicht • Nicht akzeptiert werden Gründe wie • • • • Security-Gründe Hoheits-Denken des DB-Administrators Performance-Gründe Überkommene und unreflektierte Standard-Architekturen „So haben wir das immer schon gemacht“, “Das steht in unserem Architektur-Blueprint” Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer ????????? Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 34 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 Tablespace Tablespace Tablespace Tablespace Tablespace Tablespace Feld für PartitionierungsKriterium nach fachlichen oder organisatorischen Gesichtspunkten ausgewählt 36 Range List Hash Unterstützung bei der Aktualisierung von Materialized Views (Partition Change Tracking) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Hochverfügbarkeit auch während des Ladens und Maintenance DATA WAREHOUSE Verschiedene Varianten • Partitioning-Typen – Range – List – Hash – Reference – Interval – Interval-Reference – System – Virtual Column 37 • Subpartitioning-Typen • Range - Hash • Range - List • Range - Range • List - Range • List - Hash • List - List 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 Jan 2007 Feb 2007 • Abfrage nur auf eine Partition Mär 2007 SELECT * FROM orders Partition Pruning: WHERE order_dat between Automatische Beschränkung to_date ('2007-01-01') AND to_date ('2007-01-31'); SQL-Abfrage ist von Partitionierung unabhängig auf betroffene Partition Apr 2007 Mai 2007 Jun 2007 38 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('2007-02-01','YYYY-DD-MM')), PARTITION M2 VALUES LESS THAN (to_date('2007-03-01','YYYY-DD-MM')),... 40 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Jan 2007 Feb 2007 Mär 2007 Apr 2007 Mai 2007 Jun 2007 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 41 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(' 2007-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); 42 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) ) 44 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 45 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 46 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Zuweisen unterschiedlicher Tablespaces ALTER TABLE Bestellung ADD PARTITION "DEZ08" VALUES LESS THAN (to_date('2008-12-31 00:00:00','SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLESPACE "TS_PAR" DEPENDENT TABLES (Best_Position(PARTITION DEZ08_Child TABLESPACE TS_DEZ08_Child)); 48 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Virtual Column Partitioning • Anwendung im DWH eher selten • IM ETL-Prozess würde man stattdessen eine zusätzliche Spalte erstellen Partitionierung einer Bestelltabelle nach den Produktgruppen. Die Nummer der Produktgruppen ist allerdings Bestandteil der Produktnummer (5.- 9. Stelle). 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 .... 0901UAGBM1338 578 17,70 .... Abnehmer P1 P2 P3 substr(Produktnummer,4,5) • Für alle Partitioning-/Subpartitioning-Varianten einsetzbar 49 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 50 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 51 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 52 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)); Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Beispiel List-List Beispiel für die nachfolgende Systemabfrage 54 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. | 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 55 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 56 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Verwaltung von Partitionen • ADD PARTITION • DROP PARTITION • TRUNCATE PARTITION • MOVE PARTITION • SPLIT PARTITION • MERGE PARTITION • EXCHANGE PARTITION • Verändern der Default-/ realen Attribute • Partition Exchange Loading 57 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 ; 58 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 59 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 60 • 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 62 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 63 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 Data Dictionary 64 DBA_PART_TABLES Table-Level DBA_TAB_PARTITIONS DBA_TAB_SUBPARTITIONS Partition-/Subpartition-Level DBA_PART_KEY_COLUMNS DBA_SUBPART_KEY_COLUMNS Partition-/Subpartition- KeyInformationen DBA_PART_COL_STATISTICS DBA_SUBPART_COL_STATISTICS Statistiken und Histogramme per Partition / Subpartition 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) 65 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 66 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 Warum künstliche Schlüssel verwenden? • 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 Künstliche Schlüssel bedeuten Performance für das Star Schema 68 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Umschlüsselung 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 Neuer Schlüssel Ort Strasse Partnernummer 69 Sequence Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Regeln für künstliche Schlüssel in Dimensionen • 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 70 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE B*Tree Index – 4 Zugriffe bis zum Wert 1 2 Clustering Factor Zugriff über die RowID 3 4 71 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‘; 72 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 73 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 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] 74 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Indexed-organized Tabellen Index organized Tables (IOT) Heap Tables Blöcke sind entsprechend einer Btree-artigen Organisation abgelegt Blöcke sind nach einem Heap-Mechanisums abgelegt (Zufallsverfahren) Jeder Leaf-Block speichert sowohl Werte eines Schlüssel und von nicht-Schlüssel-Feldern Schlüsselwerte sind zusätzlich in einer Btree-Indey-Struktur abgelegt -Schneller Random – Zugriff (Einzelsatzlesen) - Schneller Range-Scan weil die Daten bereits geclustert sind - Spart Platz, weil kein Platz für separaten Index benötigt wird Alle Zugriffe in der Regel über einen separaten Index • Relevanz für das DWH gering – Zwingt zur Eindeutigkeit der Sätze – Erfordert bei Massen Import eine Orientierung an der Index-Struktur und Constraintprüfung -> bremst aus – Ausnahmen: sehr große Dimensionstabellen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Partitionierung und Indizierung im Data Warehouse 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 78 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)); 80 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 - - - - - - - - - - - - - - - - - 81 COM --NO NO NO NO - - PARTITION_NAME -----------------------------Feb07 Jan07 Mar07 Apr07 - - - - - - - - - - - - - - - - - HIGH_VALUE -------------------TO_DATE(' 2007-02-28 TO_DATE(' 2007-01-31 TO_DATE(' 2007-03-31 TO_DATE(' 2007-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 83 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 86 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'); 87 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 ---------------------------------------------------------------------------------------- 88 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 | | | | | ------------------------------------------------------------------------------------------------ 89 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Star Query Transformation 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 FaktentabellenRow IDs 4. Zugriff mit gefundenen Row IDs auf die Faktentabelle 5. Evtl. Join-back auf die Dimensionen für die restlichen Spalten, die benötigt werden. Es findet zu keinem Zeitpunkt ein Full Table Scan auf der Faktentabelle statt 90 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Bedingungen für die Star-Transformation • 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) Kann keine View sein Kann keine Remote-Tabelle sein Muss mehr als 2 Bitmap Indizes haben • Die Foreign Key Felder müssen als Bitmap Index definiert sein (Faktentabelle) • Ein Foreign Key Constraint als solches muss nicht definiert sein 91 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 92 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 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 krasser 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 96 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 97 Anwendung für Komprimierung • In der DB EE für – Indizes – Strukturierte Daten in Tabellen (bzw. Partitionen) mit DIRECT Load • Mit der Option Advanced Compression auch für – – – – – Unstrukturierte Datentypen (SecureFiles) Konventionelles DML (OLTP Compression) DataPump Daten und RMAN Redo Traffic mit Data Guard SQLNET Redo Logs Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Standby DATA WAREHOUSE Backups 98 OLTP Tabellen Kompression • Block-Level Batch Komprimierung leerer Block initial unkomprimierter Block komprimierter Block teilweise komprimierter Block komprimierter Block Legende Header Daten unkomprimierte Daten Freier Platz komprimierte Daten Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 99 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 100 Hybrid Columnar Compression (HCC) • Neue Kombination der Anordnung nach Spalten und Zeilen höhere Compression Ratio möglich • Verschiedene Level der Verdichtung möglich • Designed für Daten, die nicht häufig verändert werden • 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 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>); 108 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Sammeln von Statistiken • Tabellen -> GATHER_TABLE_STATS • Indexe 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) -> GATHER_INDEX_STATS • Schema -> GATHER_SCHEMA_STATS Begin dbms_stats.gather_schema_stats( ownname => 'PERF' ,options => 'GATHER AUTO' ,estimate_percent => 5 ,block_sample => TRUE); end; • Automatisiertes Sammeln für ein Schema 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 (Histogramme) • 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 Gruppen 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 Warum Histogramme? • Histogramme sinnvoll – 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 (11g) • 11g: Incremental Global Statistics – Synopsis 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'); 114 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 • Nach jedem Laden einer neuen Partition, die Statistiken aktualisieren: Partition Tag 8 Partition Tag 9 Partition Tag 10 ETL 115 Partition Tag n – EXEC DBMS_STATS.SET_TABLE_PREFS(‚DWH',‘UMSATZ, 'INCREMENTAL','TRUE'); Neu hinzugefügte Partiton verfälscht Statistiken – EXEC DBMS_STATS.GATHER_TABLE_STATS('DWH','UMSATZ '); 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 partitionierten 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 Speicher-Hierarchie – Beispiel Flash Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Datennutzung und Speicherhierarchieen 10000 mal schneller Memory < 10% aller Daten Flash Technology 60% aller Abfragen SAS drives 35% aller Abfragen SATA drives 5% aller Abfragen Off-line Data Archives < 50% aller Daten 100-200 mal schneller 100% aller Daten Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Flash Cache – Transparente Erweiterung des Buffer Caches Hot Data 16 GB SGA Memory 120 GB Flash Cache Extended Buffer Cache Warm Data Install Flash Drive in the Host Server • Set two init.ora parameters: • db_flash_cache_file = <filename> • Specifies the path to the flash disk • db_flash_cache_size=<size> • Cold Data 360 GB Magnetic Disks 119 Specifies the amount of flash disk to use •Flash Disks oder Cards in den Server-Maschinen •SSD wirken als Level 2 Cache (SGA ist Level 1) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Hausgemachte Engpässe und Lösungen Hauptspeicher / RAM Internal Bus CPUs Sinnvolle Positionierung von Flash-Speicher • Direkt adressierbar durch Server-CPUs • Für die Datenbank sichtbar • „Dynamischer Flash-Index“ Internal Bus Public-SAN Controller Controller Controller Controller Flash-Speicher Disk-Arrays Physikalische Grenzen • Drehgeschwindigkeit von Platten • Anzahl Platten pro Controller • Distanz und Remote-Netz-Topologie 120 SSD Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | SSD SSD SSD DATA WAREHOUSE Automatische Verwaltung von Daten im Data Warehouse (Heat Map) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Heat Map – Datenzugriff tracken HOT Active Frequent Access Occasional Access Dormant Actively updated Infrequently updated, Frequently Queried Infrequent access for query and updates Long term analytics & compliance COLD • Ebenen – Auf Segment Ebene • Welche Tabellen und Partitionen werden verwendet? – Auf Block Ebene • Welche Veränderung auf Block Ebene liegen vor? • Umfassend – Verfolgung von Lese- und Schreib - Operationen – Unterscheidet zwischen Lookups und Full Table Scans – Schließt Operationen wie Statistiksammeln, DDLs oder Tabellen Redefinition aus • Performant Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 122 Heat Map Enterprise Manager Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 124 Heat Map für Tabellen und Partitionen “Segment” Level Tracking OR • Welche Tabellen und Partitionen werden wie verwendet? RS DE • Aktueller Ausschnitt aus DBA_HEAT_MAP_SEG_HISTOGRAM OWNER ---------SH SCOTT SCOTT SCOTT SCOTT SCOTT SCOTT OBJECT_NAME ----------------------CUSTOMERS_PK DEPT EMP EMP EMP PK_EMP PK_EMP 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 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 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 126 Heat Map für Blöcke “Row” Level Tracking O S ER D R • Letzte Änderung auf Block Ebene • Beispiel: Letzte Änderung an Tabelle CUSTOMERS mit DBMS_HEAT_MAP 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 … Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 127 Heat Map • Einschalten über Initialisierungsparameter HEAT_MAP SQL> ALTER SYSTEM SET heat_map = 'ON' | 'OFF'; SQL> ALTER SESSION SET heat_map = 'ON' | 'OFF'; • Voraussetzung für Automatische Daten Optimierung • Administration und Monitoring über – V$Views – Data Dictionary Views – Packages • Graphische Implementierung im Enterprise Manager Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 128 Heat Map für Daten Komprimierung Weniger Speicherplatz und Vorteile durch Komprimierung Hot Data Warm Data Archive Data 1110101010101010 10101010111010100110101110 0110101010101101 00010100010110111010101001 0001011011000110 01001001000010001010101101 1001010000010011 00101101001110000101001001 1000101010110100 01000010010000100010101011 1011010010110001 10011010 0100100111110010 0100001000101010 1101000 1010101011101010 0110101110000101 0001011011101010 1001010010010000 1000101010110100 1011010011100001 0100100101000010 0100001000101010 1101001 1010101011101010 0110101110000101 0001011011101010 1001010010010000 1000101010110100 1011010011100001 0100100101000010 0100001000101010 1101001 3X 10X 15X Columnar Query Compression Columnar Archive Compression Advanced Row Compression 1010101011101010011010111000010100010110111 0101010010100100100001000101010110100101101 0011100001010010010100001001000010001010101 11001101110011000111010 1010101011101010011010111000010100010110111010101 0010100100100001000101010110100101101001110000101 0010010100001001000010001010101110011011100 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 129 Zeilenkomprimierung auf Basis der Nutzung “Background Row Compression” OR RS E D ALTER TABLE EMPLOYEE ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER 1 DAY OF NO MODIFICATION Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 131 Automatic Data Optimization Storage-Tiering – how it works SQL> ALTER TABLE employee ILM ADD POLICY TIER TO LOW_COST_TABLESPACE 1. Tables grow in size ILM policies compress data 2. Tablespace containing partitions reaches ILM tiering threshold 3. Partitions are moved to different tablespace on lower spec disk group Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 134 Automatische Daten Optimierung OLTP Reporting 10x komprimiert Im Quartal Advanced Row Compression für OLTP Im Jahr Columnar Query Compression für schnelle Analysen Compliance & Reporting 15x komprimiert Automatische ONLINE Konvertierung Jahre zuvor Columnar Archive Compression für max. Kompression Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 135 Backup & Recovery OLTP Reporting Compliance & Reporting 10x compressed Read / Write Tablespace 15x compressed Read-mostly Daten verlagert zu READONLY Tablespace Online Move zu READ ONLY Tablespace => Einmaliges Backup erforderlich READONLY TBS Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 136 Parallelisierung Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 138 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 139 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 140 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 141 Parallelisierung und Skalierung Parallelisierbare Operationen • Abfragen – SELECT serial 100% CPU I/O CPU I/O SQL – Join Operationen 50% – Sort Operationen – GROUP BY • DDL – CREATE TABLE/MV – CREATE INDEX – Online Index Rebuild 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 142 Voraussetzungen für Parallelisierung • Hardware-Architektur – Symmetric Multiprocessors (SMP) – Clusters (RAC, Grid Computing) – Massively Parallel Processing (MPP) • Ausreichend I/O-Bandbreite • Geringe oder mittlere CPU-Auslastung – Systeme mit CPU-Auslastungen von weniger als 30% • Genügend Hauptspeicher für speicherintensive Prozesse – Sortierung – Hashing – I/O-Puffer Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 143 Funktionen für Parallelisierung • Automated Degree of Parallelism (DOP) – Anpassung über Schwellwert und Systemressourcen • Parallel Statement Queuing – Zwingend parallel auszuführende Statements werden „geparkt“ – Bei genügend freien Ressourcen wird das Statement automatisch „aufgeweckt“ und parallel ausgeführt • In-Memory Parallel Execution = weniger Disk I/O – Im RAC werden Daten aus den Buffer Caches genutzt Optimale Systemauslastung Mehr Parallelisierung, weniger Aufwand = Performance Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 144 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 145 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 146 Automatischer Parallelisierungsgrad • Bisher erfolgt das Tunen der Parallelisierung manuell – Nur einen DOP zu haben ist nicht für alle Queries geeignet – Zuviel Parallelisierung kann das System überlasten • Automated Degree of Parallelism entscheidet automatisch, – Ob ein Statement parallel ausgeführt wird oder nicht – Welchen DOP das Statement nutzt • Der Optimizer leitet den passenden DOP von den nötigen Ressourcen des Statements ab – Kosten aller Scan-Operationen – Maximales Limit der Parallelisierung wird berücksichtigt Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 147 Automatischer Parallelisierungsgrad • Wie funktioniert das? 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 148 Parallel Statement Queuing • Mit Automatic Degree of Parallelism können mehr Statements parallel arbeiten – ABER: Potentielle Systemüberlastung • Parallel Statement Queuing entscheidet automatisch, ob ein Statement sofort ausgeführt werden kann oder nicht • Sobald ein paralleles Statement startet wird geprfüt, ob genügend Parallel Server (Parallel Query Slaves) vorhanden sind – Wenn nicht, wird das Statement in die Queue geschoben – Sobald genügend Parallel Server verfügbar sind, wird das Statement aus der Queue geholt und ausgeführt Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 149 Parallel Statement Queuing • Wie funktioniert das? 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 150 In-Memory Parallel Execution • Data Warehouse-Umgebungen haben große Hauptspeicher, die nicht immer genutzt werden • Ein Algorithmus plaziert Objektfragmente (Partitionen) in den Hauptspeicher der verschiedenen Knoten – Mehr Daten im Hauptspeicher bei Einsatz von Kompression – Parallel Servers (PQ Slaves) arbeiten auf den jeweiligen Knoten • Automatic Degree of Parallelism erforderlich Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 151 In-Memory Parallel Execution SQL Statement Die Größe der angeforderten Tabelle wird bestimmt Tabelle ist sehr klein Die Tabelle eignet sich für InMemory Parallel Execution Fragmente der Tabelle werden in den Buffer Cache jedes einzelnen Knotens gelesen Tabelle ist sehr groß In den Buffer Cache irgendeines Knotens lesen Immer direkt von Disk lesen Nur Parallel Server auf demselben RAC-Knoten werden auf die einzelnen Fragemente zugreifen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 152 Parameter für Parallel Query Oracle DB 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 = 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 (FALSE|TRUE) (FALSE|TRUE) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 153 Parameter für Parallel Query Oracle DB 11.2 • Parameter – – – – – – – – – – – – 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) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 154 Query Result Cache Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 155 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 156 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 157 ... 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 158 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 159 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 160 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 161 Prinzip und Aufgabenstellung - Summentabellen Basistabelle Summentabelle Complete Refresh Incremental Refresh ? Änderungen 162 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 163 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) 164 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 165 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 166 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; 167 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.) 168 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 von Materialized Views Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 170 DBMS_MVIEW (Refresh-Funktion) 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 DBMS_MVIEW (Refresh-Funktion) • 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); 172 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 173 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; 174 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 175 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 176 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; 177 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 178 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 Partitionen für Query Rewrite genutzt werden 179 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 180 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 181 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Konzepte rund um Materialized Views Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 182 Prinzip: 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 183 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: 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; 184 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 Vorteil: Minimierung von Komplexität “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); 185 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Vorteil: Minimierung von Komplexität • Minimierung von Komplexität “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; 186 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 Kennzahlen standardisieren Umsatz Prod. Gr B relativ zum Gesamtjahresumsatz Summierung/Jahr Umsatz Prod.Gr A Umsatz Prod.Gr B Summierung/Monat Aufwändige Join-Operation DIM_Zeit 187 FAKT_Umsatz Materialized View Level 4 Materialized View Level 3 Materialized View Level 2 Materialized View Level 1 DIM_Produkte Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Basistabellen DATA WAREHOUSE Kennzahlen standardisieren • Kennzahlen nur als Materialized Views • Automatisches Refresh anstatt ETL • Standardisierte und stimmige • Kennzahlen User View Layer • Wiederverwenden von • bereits aggregierten Daten L1 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | L2 L3 L4 DATA WAREHOUSE Beispiel Mv_EA_Finanz_Kum_Gruppe_Monat Level 4 Produktgruppen-Sicht 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 User View Layer So viel wie möglich in der DB vorbereiten Millionen von Sätzen Verhindert unnötiges Kopieren Keine Verlagerung von Pseudo-ETL in die BI-Tools Standardisierte Kennzahlen User View Layer Oder so BI-Tool Server + Caches So WenigeSätze Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Konzept zur Verteilung von Materialized im Star Schema MAV_Region_Zeit_Artikel_Umsatz MAV_Region_Artikel_Umsatz MAV_Region_Umsatz D_REGION F_UMSATZ D_ZEIT MAV_Zeit_Umsatz D_KUNDE D_ARTIKEL MAV_Artikel_Umsatz MAV_Kunde_Umsatz MAV_Region_Zeit_Umsatz MAV_Kunde_Zeit_Umsatz 191 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Zugriffspfade planen Sprechende Name Übersichtliche Darstellung Ziele: Keine MAV für spezielle Abfrage von Herrn M Abfragestatistiken verwenden Nutzung überwachen (siehe Systemtabellen) Architektur auch für Pflege optimieren ... 192 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Automatisches “Query Rewrite” Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 193 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 194 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 195 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; 196 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 197 D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID 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 198 D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID 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 | -------------------------------------------------------------------------------------------------- 199 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; 200 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 = '2007' 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 201 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)); 202 D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID 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; 203 D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID 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 | -------------------------------------------------------------------------------------------------- 204 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 205 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; 206 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Hilfsmittel bei der Verwaltung von Materialized Views Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 207 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 208 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'); 209 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 210 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 211 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, 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 212 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 213 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 Beispiel Star Schema D_KUNDE 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 215 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 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 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 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. | 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 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 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 - Auflistung von Umsatz pro Monat und Jahr - Kumulierung der Monatsumsätze von Jahresbeginn an select z.Jahr_nummer Jahr, 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 u, DATUM_ID TAG_DES_MONATS d_zeit z TAG_DES_JAHRES where WOCHE_DES_JAHRES MONATS_NUMMER z.zeit_id = u.zeit_id F_UMSATZ MONAT_DESC group by QUARTALS_NUMMER ARTIKEL_ID JAHR_NUMMER KUNDEN_ID z.Jahr_nummer, ZEIT_ID ZEIT_ID z.MONATS_NUMMER, REGION_ID KANAL_ID z.MONAT_DESC UMSATZ / MENGE UMSATZ_GESAMT Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Ausführungsplan • Alle Tabellen werden nur einmal gelesen • Ausführung der Kumulation am Ende kurz vor der Ausgabe ------------------------------------------------------------------------------|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) ASC ) 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 and MONAT_DESC QUARTALS_NUMMER ARTIKEL_ID z.Jahr_nummer between 2006 and 2011 JAHR_NUMMER KUNDEN_ID group by z.Jahr_nummer,z.Quartals_nummer) ZEIT_ID ZEIT_ID REGION_ID where Rangfolge = 1 KANAL_ID order by Jahr; UMSATZ MENGE 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 F_UMSATZ D_REGION REGION_ID ORTNR ORT KREISNR KREIS LANDNR LAND REGIONNR REGION 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 Ranking • 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 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 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) / Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Beispiel 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 239 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 Dual Format Database Memory Memory F_UMSATZ F_UMSATZ Row Format Column Format • Beides Row- und Column- Format für dieselbe Tabelle • Tabellen, Materialized Views, Partitionen • Gleichzeitiges Lesen und Updaten, gesicherte Transaktionen • Updates direkt persistiert • Optimizer wählt optimalen Zugriff • Analytics & Reporting können In-Memory Column-Format nutzen • OLTP-Anwendungen mit umfangreicher Satzverarbeitung nutzen bewährtes Row Format • Laden durch Hintergrundprozesse • Bei erstmaligem Lesen oder Datenbank-Start • ORA_W001_orcl / INMEMORY_MAX_POPULATE_SERVERS Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 241 Es ist nur ein Schalter!! – Kein Migrationsprojekt D_KUNDE D_ARTIKEL ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID PK 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 F_UMSATZ FK ARTIKEL_ID FK KUNDEN_ID ZEIT_ID FK REGION_ID FK KANAL_ID FK UMSATZ MENGE UMSATZ_GESAMT 50 Mio Sätze D_VERTRIEBSKANAL PK KANAL_ID VERTRIEBSKANAL KANALBESCHREIBUNG VERANTWORTLICH KLASSE PK: Btree Index FK: Bitmap Index 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 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 Kompressions-Varianten NO MEMCOMPRESS MEMCOMPRESS FOR DML The data is not compressed. MEMCOMPRESS FOR QUERY LOW This method results in the best query performance. This method compresses IM column store data more than MEMCOMPRESS FOR DML but less than MEMCOMPRESS FOR QUERY HIGH. This method is the default when the INMEMORY clause is specified without a compression method in a CREATE or ALTER SQL statement or when MEMCOMPRESS FOR QUERY is specified without including either LOW or HIGH. MEMCOMPRESS FOR QUERY HIGH This method results in excellent query performance. This method compresses IM column store data more than MEMCOMPRESS FOR QUERY LOW but less than MEMCOMPRESS FOR CAPACITY LOW. MEMCOMPRESS FOR CAPACITY LOW This method results in good query performance. This method compresses IM column store data more than MEMCOMPRESS FOR QUERY HIGH but less than MEMCOMPRESS FOR CAPACITY HIGH. This method is the default when MEMCOMPRESS FOR CAPACITY is specified without including either LOW or HIGH. MEMCOMPRESS FOR CAPACITY HIGH This method results in fair query performance. This method compresses IM column store data the most. This method optimizes the data for DML operations and compresses IM column store data the least (excluding NO MEMCOMPRESS). Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 244 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-Column-Storage profitieren Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Vektor-Scans Memory REGION Example: Finde alle Verkäufe In der Region CA • SIMD Vektor Instruktionen CPU Vector Register CA Load multiple region values • Jeder CPU Kern liest einzelne In-Memory Columns CA CA Vector Compare all values an 1 cycle • Milliarden von Sätzen/Sekunde/Core CA Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 246 Join-Verfahren: Bloom-Filter Example: Find all orders placed on Christmas eve LINEORDER Amount Datekey is 24122013 DateKey DateKey Date DATE_DIM • Erstellen von Filtertabellen (Bloom-Filter) Type=d.d_date='December 24, 2013' Sum Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 247 In-Memory Aggregation Example: Report sales of footwear in outlet stores Products In-Memory Report Outline Sales • Dynamisches Erstellen von In- Memory Aggregat-Objekten Footwear Stores Outlets Outlets Footwear $ $$ $ $$$ Sales Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 248 Wo und wie macht In-Memory im Data Warehouse Sinn und was ändert sich? Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Zunächst ein wichtiges Prinzip: Verteilung von Tabellendaten über die Speicherhierarchie Umsatzdaten DISK SSD Flash In Memory Juni 14 Juni 14 Mai 14 Mai 14 April 14 April 14 März 14 März 14 Februar 14 Februar 14 Januar 14 Januar 14 Dezember 13 Dezember 13 November 13 November 13 Oktober 13 Oktober 13 September 13 September 13 August 13 August 13 Juli13 Juli13 Juni 13 Juni 13 April 13 April 13 März 13 März 13 Februar 13 Februar 13 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 250 An welchen Stellen macht In-Memory Sinn OLTP Systeme Disk-Daten In Memory Integration Layer Temporäre Daten T Enterprise Layer Core - DWH / Info Pool User View Layer In-Memory Alle Dimensionen Referenzdaten R R R Bei sehr großen Dimensionen nur die am häufigsten genutzten Spalten Stammdaten S S S Die aktuellen Partitionen T Partitionierte Transaktionsdaten nur wenn sie abgefragt werden Vorberechnete Kennzahlen C Q A A L MJ Data Mining Statistikdaten Operational Data Oracle R Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Enge Verzahnung von OLTP und DWH wird möglich OLTP Systeme Disk-Daten In Memory Integration Layer Temporäre Daten T T Ermöglichen von Realtime-Reporting und Realtime-ETL • Kein expliziter Ladevorgang für Transaktionsdaten • Gelesen wird die In-Memory-Version während das OLTP-System klassisch die Disk-Version der Daten beschreibt • Operational Data Stores entfallen, wenn sie nur OLTP-Daten 1:1 bereitstellen. (Wenn machbar können operative Daten direkt gelesen werden) Operational Data Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Sind Star Schemen noch sinnvoll? User View Layer • Ja, natürlich! • Star-Schemen hatten auch schon vor In Memory ihre Aufgabe als „Performance-Bringer“ verloren • Star Schemen stellen Kennzahlen (FAKT) in ihrem fachlichen Kontext (DIMENSION) dar. Vorberechnete Kennzahlen C Q A Kunden Zeit Welches Kundensegment macht in welcher Region in welcher Zeit mit welchem Produkt am meisten Umsatz A L MJ Data Mining Statistikdaten Produkt Region Oracle R Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Sind Materialized Views noch sinnvoll? User View Layer • Nicht als reine Performance-Objekte • Aber: – Bis zu 80% aller BI-Auswertungen sind vorhersehbar und sollten in der Datenbank vorberechnet werden – Berechnung in der Datenbank ist wesentlich schneller – Die Berechnung von Kennzahlen wird standardisiert – Sie verhindern, das jeder BI-Benutzer Kennzahlen individuell berechnet Vorberechnete Kennzahlen C Q A A L • Materialized Views bilden fixe Kennzahlensysteme im Warehouse ab MJ Data Mining Statistikdaten • Mit In-Memory sind sie noch schneller Oracle R Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Klassisches Vorgehen • Redundanz wegen • Denormalisierung • Bereitstellung physischer Tabellen wg. Star Query • Vorberechnung von Kennzahlen in Form von MAVs Enterprise Layer Core - DWH / Info Pool Referenzdaten Stammdaten User View Layer R R R S S S Physikalische Dimension Stammdaten Mav KZ F Physikalische Fakten Bewegungsdaten auf Transaktionslevel der operativen Systeme Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Zusätzlich Bitmap Indexe DATA WAREHOUSE 255 Mögliches Vorgehen: Virtualisierung User View Layer • Dimensionale Modelle simulieren • Vorberechnung von Kennzahlen on-the-fly Enterprise Layer Core - DWH / Info Pool Referenzdaten Stammdaten User View Layer R R R Dimension als View auf In-Memory Stammdaten Mav KZ S S S Bewegungsdaten auf Transaktionslevel der operativen Systeme Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Nur aktuelle Partitionen Und nur die wichtigsten Spalten Kleine Dimensionen Im klassischen Buffer Cache DATA WAREHOUSE 256 Mögliches Vorgehen : Virtualisierung User View Layer Enterprise Layer • Im Enterprise Layer – Dimensionsschlüssel müssen bereits existieren – Historisierung • Historisierung • Kaum physikalische Persistenz auf den Festplatten • Zugewinn 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 VW_ORT KREISNR ORTNR ORT REGION_ID – Flexiblere und schneller Bereitstellung multidimensionaler Strukturen – Weniger Plattenplatz weil weniger Redundanz im Schichtenmodell – Mehr Performance Mav KZ 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 Im klassischen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 257 Herausforderungen Enterprise Layer • Durch Wegfall von Tabellen – Fehlende Orientierung bzgl. Hierarchisierung und mögliche Drill-Pfade • Welche normalisierten Tabellen lassen sich zu Dimensionen formen? • Lösung: – Dokumentation über Metadaten-Layer 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 Im klassischen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 258 Metadaten – Basis für schnelles Agieren • Zusammenhänge von Hierarchie-Leveln – Hierarchisierung von Attributen • Zusammenhänge von Dimensionen und Fakten • Zusammenhänge von Fakten und Kennzahlen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 259 Konsequenzen • Auflösung der Schichtengrenzen Enterprise/End User – Layer Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer – Trennung nur noch logisch bzgl. der Modellart • Physikalische Nähe von Enterprise/End User – Layer – Keine separate Datenhaltung für Data Marts – Keine Datenkopien für Fachabteilungen • Zugriffe von Endbenutzer auf zentrale Schicht • Datenzentriertes Security-Modell • Virtuelle Dimensionen (z. B. als Views) • Neuer Umgang mit Faktentabellen – Wegfall von Bitmap-Indizierung – Selektiver Umgang mit Spalten – Eventuell Ersatz von Faktentabellen durch In-Memory-MAVs Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 260 Jeder wird profitieren, der wichtige DWH-Prozesse in die Datenbank verlagert • Komplette Schichten-Architektur in einer Datenbank, auf einem Server • Advanced Analytics in der Datenbank – InPlace-Data Mining – R-Objekte + R-Skripte in der Datenbank Single Point + In-Memory-fähig – Vorberechnete Kennzahlen – Generieren von Graphiken • Zentrale Security-Verwaltung mit Bordmittel der Datenbank • ETL-Strecken mit Native-SQL in der Datenbank Vorberechnete Kennzahlen Zentrales Security in der Datenbank R-Objekte Data Quality Analysen Alle Schichten in einer Datenbank ETL-Strecken mit Native SQL Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | In Place Data Mining DATA WAREHOUSE 261 Fehlentwicklungen Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer 1 2 BI Plattform Cache Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer Analytische Datenbank In Memory In Memory Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 262 Fehlentwicklungen Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer 1 ! 1:1 Kopie ! 2 BI Plattform Verlängerung des Gesamtbeschaffungsprozesses Zusätzliche versteckte IT-Aufwende in den Fachabteilung Gefahr nicht abgestimmter Kennzahlen Integration Layer Enterprise Layer Core - DWH / Info Pool Cache Analytische Datenbank User View Layer ! 1:1 Kopie In Memory In Memory Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | ! Separate Hardware + Maintenance DATA WAREHOUSE 263 Mit In-Memory Integration Layer Enterprise Layer Core - DWH / Info Pool 1 User View Layer In Memory BI Plattform Cache Kompakte Analyse-Umgebungen profitieren am meisten von In-Memory direkt in der Datenbank 2 Integration Layer Enterprise Layer Core - DWH / Info Pool User View Layer Analytische Datenbank In Memory In Memory In Memory Eine Datenbank, ein Server Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 264 Mit In-Memory Integration Layer 3 Enterprise Layer Core - DWH / Info Pool User View Layer Virtuelle Strukturen BI Plattform Cache Virtualisierung des User View Layers - Mehr Flexibilität - Schnellere Weiterentwicklung / Reagieren - Weniger Redundanz von Daten - Volle multidimensionale Sicht Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 265 Sekundenschnelle Antworten des Systems unterstützen ein intuitives Analysieren Click and Think • Das Analysesystem behindert nicht mehr den Gedankenfluss. Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think Click and Think • Benutzer starten mehr Abfragen in der gleichen Zeit • Benutzer haben mehr Mut für komplexere Abfragen • Reaktionszeiten verkürzen sich - Schlagzahl wird erhöht • Mehr Resultate -> mehr Aktionen -> mehr Nutzen aus den Daten 1 Der Informationsvorrat der Systeme ist schneller erschöpft 2 Bedarf nach vielfältigeren Daten und komplexeren Datenmodellen Noch mehr Daten aus unterschiedlichen 3 Bereichen werden zusammenhängend abgefragt 4 Noch intensivere Nutzung der Warehouse-Systeme Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 266 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 267 Noch einmal zum Schluss • Die Ansprüche der Anwender werden wachsen und damit die Datenmengen und die Datenvielfalt • Architekturen werden kompakter – BI Caches wandern zurück in die Datenbank – Direkt lesende BI-Werkzeuge haben Vorteile – Analytische Datenbanken werden überflüssig • In-Database-Prozesse sind auf dem Vormarsch – In-Database Data Mining – In-Database ETL Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA DATAWAREHOUSE WAREHOUSE 268 Laden und Updaten im Data Warehouse mit Bordmitteln der Datenbank Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 269 Ziele und Aufgaben • Bereitstellen von Daten in adäquater Weise – Zeitlich passend – Richtige Form – Passende Inhalte • Daten so ablegen, dass man sie wiederfindet Was wird geladen • Es sollte nur das geladen werden, was wirklich gebraucht wird • Gibt es einen Auftrag für das Laden bestimmter Daten? – Wer braucht die Daten? – Welche Daten werden gebraucht? – Dokumentation • Sind die zu ladenden Daten in einem • Daten-Ressourcen ökonomisch speichern brauchbaren Zustand? – Berücksichtigung von Plattenplatz – Welche Anforderungen sind an Quelldaten zu stellen? – Wer definiert die Anforderungen? Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 270 ETL-Prozess planen und Lade-Aufwand minimieren • Ladeläufe orientieren sich an den Daten, die man braucht 1. Erst die Datenstrukturen und Schichten entwerfen 2. Ladelauf planen • Zur Orientierung hilft das 3-Schichten-Modell: Data Integration Layer R S T S S B T B B User View Layer Enterprise Information Layer R T ETL: Kosten pro Kunde B B B D ETL: Kosten pro Kunde F ETL: Kosten pro Kunde D D D ETL: Kosten pro Kunde D 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 271 Die Organisation des ETL-Prozesses Data Integration Layer Richtig selektieren Die Masse aller Prüfungen Enterprise Information Layer StammReferenzdaten aktualisieren User View Layer Nur denormalisierende Joins Möglichst viele Kennzahlen in die Datenbank Repository (Glossar, alle Objekte) Für alle Aktionen den frühest möglichen Punkt finden Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 272 Lade-Aktivitäten an Schichtübergängen Integration Flüchtige Daten Clearing-Verfahren, technisches, logisches, semantisches Prüfen Generische Datenstrukturen (isolierte Tabellen, teil-ausgeprägte Datentypen) Keine Constraints Kopieren Selektieren 273 Mengenbasiertes Prüfen ohne Constraints Enterprise User View Persistent Kopien / teilpersistent dynamisch Normalisieren Historisieren (Granularisieren) Denormalisieren z.T. Aggregieren 3 NF Datenstrukturen (ER-Tabellen, ausgeprägte Datentypen) Multidimensionale Modelle (ER-Tabellen, ausgeprägte Datentypen) Aktivierte Constraints Umschlüsselung Lookups -> Referenz-/Stammdaten Joins Aufbauen von Distinct-Strukturen (Normalisieren) Umschlüsselung Lookups -> Dimensionsdaten Joins - Denormalisieren Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 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 Beknnte Kennzahlen in die DB weniger Koipien in BI-Tools DATA WAREHOUSE Deltadaten Extrahieren OLTP DWH 1 Table Änderungsdatum Table 2 Table Trigger Table Queue 3 Table Deltabildung über MINUS Table 4 LogFile Logminer Table Queue 5 LogFile Streams Queue Table 6 LogFile Golden Gate Queue Table Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Deltadaten-Erkennung Einmaliger Initial - Load SRC Table 1:1 Kopie SRC Table 1:1 Kopie TGT Table Regelmäßiges Laden SRC Table 1:1 Kopie SRC Table (neu) merge into TGT Table select * from ((select ...from SRC_TABLE_neu) minus select * from SRC_TABLE_alt)) TGT Table SRC Table (-1) 276 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Datenbank-Trigger • Werden nur im Quellsystem angelegt • Beeinflusst Performance des Quellsystems • Eher als Notlösung anzusehen – Wenn es kein Änderungsdatum in der Quelltabelle gibt – Zum Triggern Message-basierter CREATE OR REPLACE TRIGGER Bestellung BEFORE DELETE OR INSERT OR UPDATE ON Bestellung oder FOR EACH ROW Event-gesteuerter WHEN (new.Bestellnr > 0) Ladeläufe DECLARE sal_diff number; BEGIN INSERT INTO log_Bestellung (Alte_Bestell_Nr,Neue_Bstell_Nr) VALUES(old.Bestellnr,new.Bestellnr); END; Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 277 Einlesetechniken Vorsysteme EBCDIC ASCII Database Link Transportable TS Datapump Oracle Non Oracle API Applikation z. B. SAP R/3 SQL-Loader External Table Direct Save SQL SQL BS Copy BS Copy ODBC JDBC Gateway SQL SQL SQL API CALL SQL Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Oracle DWH DATA WAREHOUSE SQL*Loader • Loader Modes – Convential Path • INSERT von Daten / UPDATE von Indizes / Auslösen von Triggern • Auswertung von Constraints – Direct Path • Formatieren der Daten in Blöcken und direktes Einfügen in die Datafiles • Keine SGA-Operationen / kein INSERT auf SQL-Level – Parallel Direct Path • Parallele SQL*Loader-Aufrufe 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 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 279 Beispiel - Control File 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 ) 280 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Aufruf des SQL*Loaders sqlldr userid=DWH/DWH control=c:\orte.ctl log=C:\orte.log orte.ctl Control File 281 orte.csv Daten Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | TB_ORTE DATA WAREHOUSE Data Pump Architektur Quelle: http://www.dbazine.com/blogs/blog-cf/chrisfoot/blogentry.2006-05-26.3042156388 282 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Oracle Data Pump • Höhere Performance als bei IMP / EXP oder anderen Entlade-Verfahren • Daten und / oder Metainformationen von DB Objekten • Größere Steuerungsmöglichkeit, d.h. mehr Parameter und Kontrolle der Datenextraktion • Leichtere Einbindung der Datenflüsse über Rechnergrenzen hinweg • Parallelisierung in RAC-Umgebungen Instanz-übergreifend • Kompression u. Verschlüsselung nach Bedarf • Legacy Mode zur Weiterverwendung von Ex-/Import Controls • Wiederanlauffähig Release 2 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 283 Vereinfachte Verfahrensdarstellung DWH OLTP Export mit Data Pump (expdp) 284 FTP Import mit Data Pump (impdp) Schema OLTP Schema DWH Besondere GRANTs Delta-Load Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Export der Daten • Optional Flashback zum Absichern des Entlade-Zeitpunktes nutzen • Remote-Export möglich (per NETWORK_LINK) – Wegfall von separatem FTP-Aufruf • Einschränkung durch Query-Bedingung – Damit Zugriff z. B. auf „Last Update-Sätze“ DWH OLTP Export mit Data Pump (expdp) FTP Import mit Data Pump (impdp) • Default Export Location – D:\o11\admin\o11\dpdump\EXPDAT .DMP Schema OLTP Schema DWH Besondere GRANTs Delta-Load Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 285 Ablauf des Exports / Imports expdp dwh/dwh@o11 parfile=Para_EX.txt • Export über Parameter-Datei • Export auch mit Remote-Zugriff • Einschränkung der Datenmenge durch QUERY impdp dwh2/dwh2@o11 DIRECTORY=DP_OUT DUMPFILE=EXP1.DMP LOGFILE=DP_OUT:imp_log REMAP_SCHEMA=DWH:DWH2 286 • Bei dem Import: REMAP auf das Schema Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Interaktiver Modus von Data Pump • CTRL-C zum Starten des interaktiven Modus • ADD_FILE – Das Hinzufügen eines neuen Dump-Files ist möglich • KILL_JOB – Prozess kann abgebrochen werden • STOP_JOB – Aktueller Job wird beendet • PARALLEL – Einstellung des Parallelisierungsgrads • Eingabe von „continue_client“ führt zur normalen Monitor-Ausgabe zurück 287 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE External Tables TEXT DATA PUMP HDFS HIVE • Datei wird als normale Tabelle behandelt DROP TABLE Gemeinde_EX; CREATE TABLE Gemeinde_EX ( Gemeinde_Nr VARCHAR2(8), Gemeinde VARCHAR2(50) ) • Nur lesend zugreifbar ORGANIZATION EXTERNAL • RMAN sichert nicht die Daten (TYPE oracle_loader DEFAULT DIRECTORY Exttab ACCESS PARAMETERS (RECORDS DELIMITED BY newline BADFILE 'Gemeinde.bad‚ DISCARDFILE 'Gemeinde.dis‚ LOGFILE 'Gemeinde.log‚ SKIP 20 FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"‚ ) LOCATION ('Gemeinde_CSV.TXT‚)) • Tabelle, die eine Datei referenziert • Bulk-Loading Operationen, wie insert... select • Mehr Transformationsoptionen als im SQL* Loader • Parallelisierbares Schreiben • Alternative zum SQL*Loader 288 CREATE DIRECTORY Exttab AS 'D:\Szenario\Exttab'; Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Konzept für variable Directories oder Dateinamen Szenario: Z. B. sich täglich ändernde Dateinamen Datum im Dateinamen Lieferantenname im Dateinamen ABC120109 ABC130109 ABC140109 ABC150109 alter table ex_orte default directory LC_Texte_2; DWH create or replace directory LC_TEXTE AS 'D:\Szenario\Testdaten'; alter table ex_orte location ('ORTE_Y.CSV'); create or replace directory LC_TEXTE_2 AS 'D:\Szenario\Testdaten'; 289 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Preprocessing für External Tables 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; 290 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE External Tables mit Data Pump DWH OLTP EX_T EX_T FTP select * from EX_Bestellung_2 291 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Vorteile der Kombination • Leichte Handhabung – Syntax der beiden Typen sehr ähnlich • Hohe Performance – Data Pump-eigenes Format ist für schnellen Ex-/Import ausgelegt – Parameter von Data Pump zusätzlich nutzen, um die zu extrahierende Datenmenge auf das Wesentliche zu reduzieren • Verbleiben innerhalb der SQL-Sprache – Durch CREATE TABLE AS SELECT lassen sich sowohl WHERE-Filter als auch Joins während des Extrahierens verarbeiten 292 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Transportable Tablespaces • Höchste Performance beim Austausch von Vorgehensweise 1. Anlegen des Tablespaces im Quellsystem Oracle zu Oracle – Daten werden als komplettes File oder File Set bewegt • Austausch zwischen unterschiedlichen Betriebssystemen möglich – Konvertierung kann mit RMAN erfolgen, z.B. von BigEndian nach LittleEndian 2. Zuweisung der zu kopierenden Daten des Tablespace – Alle Daten sind dem Tablespace zugeordnet (Indizes etc.) 3. Ändern des Tablespaces auf Read-Only 4. Export der Metadaten mit Data Pump (EXPDP) 5. Eventuell Konvertierung des Tablespace Datafiles – Über die RMAN CONVERT Function • Nützlich beim Bewegen der Daten zwischen Quellsystem und Staging Area 6. Kopieren des Tablespace Datafiles und der Metadaten sowie zwischen den anderen Schichten im 7. Import der Metadaten in der Zielumgebung Warehouse 8. Ändern des Tablespaces auf Read-Write 293 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Transportable Tablespaces 1 CREATE TABLE temp_jan_umsatz NOLOGGING TABLESPACE ts_temp_umsatz AS SELECT * FROM ????????? WHERE time_id BETWEEN '31-DEC-1999' AND '01FEB-2000'; 5 IMP TRANSPORT_TABLESPACE=y DATAFILES='/db/tempjan.f' TABLESPACES=ts_temp_umsatz FILE=jan_umsatz.dmp Temp_jan_umsatz 6 2 ALTER TABLESPACE ts_temp_umsatz READ ONLY; 3 Kopieren des Tablespace zur Zielplattform 4 7 ALTER TABLESPACE ts_temp_umsatz READ WRITE; ALTER TABLE umsatz ADD PARTITION umsatz_00jan VALUES LESS THAN (TO_DATE('01-feb-2000', 'dd-mon-yyyy')); ALTER TABLE umsatz EXCHANGE PARTITION umsatz_00jan WITH TABLE temp_umsatz_jan INCLUDING INDEXES WITH VALIDATION; DATA WAREHOUSE BS-Copy EXP TRANSPORT_TABLESPACE=y TABLESPACES=ts_temp_umsatz FILE=jan_umsatz.dmp Daten Meta daten Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 294 ETL-Performance-Techniken in der Datenbank Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 295 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 – Ohne zuvor in Buffer zu schreiben • Baut SQL-Struktur auf, die dann zu analysieren ist. • Sucht nach nicht vollständig gefüllten Blöcken und füllt diese • Sinnvoll bei: – Parallel zu anderen Loadvorgängen stattfindenden Loads (kein exklusiver Zugriff möglich) – Bei dem Laden von kleinen Datenmengen in Tabellen mit großen Indizes 297 • Sinnvoll bei: – Nicht indizierten Tabellen (Index würde bei dem Zusammenführen mit neuen Einträgen kopiert werden. Das kostet Zeit) – Beschreiben von indizierten Tabellen – Bei Tabellen mit Constraints – Bildet neue Blöcke und schreibt diese direkt weg – 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) 298 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 (tf2(SELECT * FROM (tf1(SELECT * FROM Quelle)))) INSERT INTO Ziel SELECT * FROM tf( SELECT * FROM (Stage_tabelle)) 299 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Begriffe im Bereich Table Functions • Table Function • Funktionen, die eine Gruppe von Sätzen (SET) gleichzeitig bearbeitet. Table Functions wirken wie physische Tabellen. Entsprechend werden sie auch in der FROM Klausel verwendet. • Record Type • Ein komplexer, aus mehreren Feldern zusammengesetzter Datentyp. • Nested Table • Eine Art virtuelle Tabelle (temporäre Tabelle im Speicher). Eine Table Function kann eine solche Tabelle komplett an das aufrufende Kommando zurückgeben. • Ref Cursor • Eine Art Pointer auf ein Result – Set einer Abfrage. Man übergibt einen Ref Cursor einer Table Function, damit diese die Sätze des Result – Sets innerhalb der Function abarbeitet. • Parallel • Table Functions können eingehende Sätze parallel bearbeiten, wenn diese als Ref Cursor übergeben werden. • Pipelined • Eine Table Function reicht bereits fertige Sätze an das aufrufende Kommando zur weiteren Verarbeitung weiter, während sie noch weitere Sätze bearbeitet. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 300 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 301 Die Hilfstypen für Daten und Cursor drop type Bestellung_X_t; create type Bestellung_X_t as object ( BESTELLNR NUMBER(10), KUNDENCODE NUMBER(10), BESTELLDATUM DATE, LIEFERDATUM DATE, BESTELL_TOTAL NUMBER(12,2), Fehler_Datum DATE); Definition Record-Type Definition Nested-Table auf der Basis des Rekord-Types drop type Bestellung_X_t_table; create type Bestellung_X_t_table as TABLE of Bestellung_X_t; create or replace package cursor_pkg as type Bestellung_t_rec IS RECORD ( BESTELLNR NUMBER(10), KUNDENCODE NUMBER(10), BESTELLDATUM DATE, LIEFERDATUM DATE, BESTELL_TOTAL NUMBER(12,2)); END; 302 Definition Cursor als Typ des Übergabeparameters Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Definieren einer Nested-Table-Struktur für die spätere Rückgabe. Lesen aus Cursor Erweitern Nested-Table um einen Satz und Überführen eines Satzes in die Nested-Table Rückgabe der kompletten Tabelle an das aufrufende SELECT-Statement (Alternative zu PIPE). 303 create or replace function f_Bestellung_X(cur cursor_pkg.refcur_t) RETURN Bestellung_X_t_table IS BESTELLNR NUMBER(10); Übernahme von KUNDENCODE NUMBER(10); BESTELLDATUM DATE; Ausgangssätzen LIEFERDATUM DATE; als Cursor BESTELL_TOTAL NUMBER(12,2); Fehler_Datum DATE; ORDER_ID NUMBER(10); objset Bestellung_X_t_table := Bestellung_X_t_table(); i number := 0; begin LOOP -- 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'); else Fehler_Datum := LIEFERDATUM; End if; objset.extend; objset(i) := Bestellung_X_t(BESTELLNR,KUNDENCODE, BESTELLDATUM,LIEFERDATUM,BESTELL_TOTAL,Fehler_Datum); END LOOP; CLOSE cur; Return objset; END; Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Beispielaufrufe 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)) 304 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 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! 305 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; 306 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 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 309 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 ; 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 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 311 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 312 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Multiple Inserts 313 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 314 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 Set-Based ETL-Prüf- und TransformationsTechniken in der Datenbank Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 315 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. Not Null / Pflichtfelder Formatangaben numeric Alphanumerisch Date Masken a) b) c) d) A 3. 4. Div. Check Constraint Wertbereiche – Ober-/Untergrenzen / Wertelisten Satz-bezogene Regeln B 5. Abhängigkeiten von Werten in anderen Attributen desselben Satzes Satz-übergreifende Regeln C 6. 7. Primary Key / Eindeutigkeit Aggregat – Bedingungen a) b) 8. Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. Rekursive Zusammenhänge 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; Verweise auf andere Sätze derselben Tabelle (Relation) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 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 Prüfungen Kategorie A Attribut-/Column-bezogene Regeln 1. Not Null / Pflichtfelder 2. Formatangaben a) b) c) d) numeric Alphanumerisch Date Masken 3. Div. Check Constraint 4. Wertbereiche Ober-/Untergrenzen / Wertelisten Prüfen mit oder ohne Constraints? • Constraints verlangsamen den Massen-Insert des ETL-Prozesses • => Ohne Constraints arbeiten • => Prüfen mit SQL-Mitteln • => Prüfen mit DML-Errorlogging – Nur bei wenigen Daten sinnvoll Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Prüfkonzepte • Einfach implementierbar • Fachliche Prüfungen kaum möglich • Eventuell zusätzliche Prüfungen nötig • Bessere Performance • Nur bei aktivierten Constraints Stage-Tabelle + Geprüfte Daten Kopieren Statistik Routine Date Number Varchar2() Bad File 320 Statistiken DML Error Log Check Constraints Fehlerhafte Sätze 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_20040802 ') 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$ 321 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 322 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Wichtiges Hilfsmittel für Einzelfeldprüfungen: CASE SELECT CASE WHEN isnumeric('999') = 1 THEN 'numerisch' ‚ ELSE 'nicht numerisch'‚ END Ergebnis FROM dual; CREATE OR REPLACE FUNCTION isnumeric ( p_string in varchar2) return boolean AS l_number number; BEGIN l_number := p_string; RETURN 1; EXCEPTION WHEN others THEN RETURN 0; END; 323 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Hilfsfunktion: Date_Check create or replace function IsDate (str varchar2) return varchar2 is inDate varchar2(40); FUNCTION dateCheck (inputDate varchar2, inputMask varchar2) RETURN varchar2 IS dateVar date; BEGIN dateVar:= to_date(inputDate,inputMask); return 'true'; exception when others then return 'false'; END; • In Verbindung mit der CASE-Anweisung BEGIN inDate:= trim(str); if dateCheck(inDate, 'mm-dd-yyyy') = 'false' AND dateCheck(inDate, 'mm-dd-yy') = 'false' AND dateCheck(inDate, 'yyyy-mm-dd') = 'false' AND dateCheck(inDate, 'yy-mm-dd') = 'false' AND dateCheck(inDate, 'yyyy-mon-dd') = 'false‚ AND dateCheck(inDate, 'yy-mon-dd') = 'false‚ AND dateCheck(inDate, 'dd-mon-yyyy') = 'false‚ AND dateCheck(inDate, 'dd-mon-yy') = 'false‚ AND dateCheck(inDate, 'mmddyy') = 'false‚ AND dateCheck(inDate, 'mmddyyyy') = 'false‚ AND dateCheck(inDate, 'yyyymmdd') = 'false' AND dateCheck(inDate, 'yymmdd') = 'false‚ AND dateCheck(inDate, 'yymmdd') = 'false' AND dateCheck(inDate, 'yymondd') = 'false‚ AND dateCheck(inDate, 'yyyymondd') = 'false‚ AND dateCheck(inDate, 'mm/dd/yyyy') = 'false' AND dateCheck(inDate, 'yyyy/mm/dd') = 'false‚ AND dateCheck(inDate, 'mm/dd/yy') = 'false' AND dateCheck(inDate, 'yy/mm/dd') = 'false‚ AND dateCheck(inDate, 'mm.dd.yyyy') = 'false' AND dateCheck(inDate, 'mm.dd.yy') = 'false' AND dateCheck(inDate, 'yyyy.mm.dd') = 'false' AND dateCheck(inDate, 'yy.mm.dd') = 'false' then return 'false'; else return 'true'; end if; --exception --when others then return 'false'; END; Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 324 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() 325 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Abarbeitungslogik für Einzelfeldprüfung mit CASE OLTP_Kunden Bestellnr Menge Summe Name Ort BestDatum INSERT INTO OLTP_Kunden_tmp SELECT Bestellnr,Menge,Summe,Name,Ort,BestDatum, CASE WHEN (Bestellnr is NULL) then 1 ELSE 0 END Bestellnr_isNull, CASE WHEN (isNumeric(Menge) = 1) then 1 ELSE 0 END Menge_isNumeric, CASE WHEN (isNumeric(Summe) = 1) then 1 ELSE 0 END Summe_isNumeric, CASE WHEN (Summe is NULL) then 1 ELSE 0 END Summe_isNull, CASE WHEN (isDate(BestDatum) = 1) then 1 ELSE 0 END BestDatum_isDate FROM OLTP_Kunden; OLTP_Kunden_tmp Bestellnr Menge Summe Name Ort BestDatum Bestellnr_isNull Menge_isNumeric Summe_isNumeric DATA WAREHOUSE Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Summe_isNull BestDatum_isDate ... DATA WAREHOUSE Prüfungen Kategorie B Satz-bezogene Regeln Satz-bezogene Regeln 5. Abhängigkeiten von Werten in anderen Attributen desselben Satzes • Lösung: Analog zu Kategorie A über CASE F1 3 9 F2 7 5 F3 3 1 F4 4 4 1 0 select CASE WHEN (F1 = 3 and F2 = F3 + F4) then 1 ELSE 0 end from fx Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Prüfungen Kategorie C Satz-übergreifende Regeln 6. Primary Key / Eindeutigkeit 7. Aggregat – Bedingungen a) b) Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. 8. Rekursive Zusammenhänge Verweise auf andere Sätze derselben Tabelle (Relation) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 6. Eindeutigkeit / PK BESTELLUNG BESTELLPOSITION BESTELLNR PK ORTNR FK KUNDENNR BESTELLDATUM ANZAHLPOS BESTELLNR FK PK POSITIONSNR MENGE FK ARTIKELNR DEPOTSTELLE RABATT • Lösung: Mengenbasiertes Sammeln doppelter Sätze in Fehlertabelle insert /*+ APPEND */ into err_non_unique_bestellung select bestellnr from (select count(bestellnr) n, bestellnr from bestellung group by bestellnr) where n > 1; Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE D_ARTIKEL 7. Aggregatbildung •Anforderung: Wenn der Umsatz pro Artikel unter 20% des Artikelgruppen-Gesamtwertes fällt, dann ROT •Lösung: Mit analytischen Funktionen: Auf Satzebene über Informationen von Satzgruppen verfügen F_UMSATZ FK ARTIKEL_ID FK KUNDEN_IDFK FK ZEIT_ID REGION_ID FK KANAL_ID UMSATZ MENGE UMSATZ_GESAMT ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME PK SPARTE_NR ARTIKEL_ID select Artikelname, Artikelgruppe, Wert, sum(wert) over (partition by Artikelname) Artikelgesamtwert, sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert, case when (round(((sum(wert) over (partition by Artikelname))/(sum(wert) over (partition by Artikelgruppe))*100),0) ) < 20 then 'ROT' ELSE 'GRUEN' end Prozent from Artikel Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 8. Rekursive Zusammenhänge •Anforderung: Die Summe aller Member_Value-Werte pro Parent muss gleich dem Group_Value-Wert des Parent sein. •Lösung: Über Sub-Select in dem nach Parent gruppiert und summiert wird. F_Key Parent Member Group _Value _Value 3 9 12 15 4 17 23 28 0 3 3 3 0 4 4 4 0 4 6 2 0 3 8 1 12 0 0 0 15 0 0 0 select distinct A.F_key from rk A, (select sum(member_value) sum_member, parent from rk where parent != 0 group by group_value, parent) B where A.member_value = 0 and A.group_value = B.sum_member; Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Prüfungen Kategorie D Tabellen-übergreifende Regeln 9. Foreign Key a) b) Child-Parent (Orphan) Parent-Child 10. Aggregat – Bedingungen a) b) Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. 11. Referenz-Zusammenhänge Verweise auf Sätze einer anderen Tabelle (Relation) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 9. Foreign Keys •Anforderung: Zu jeder Bestellung muss es einen Kunden geben. BESTELLUNG KUNDE KUNDENNR PK KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP BESTELLNR PK ORTNR FK KUNDENNR BESTELLDATUM ANZAHLPOS •Lösung: Sub-Select in Where-Klausel. insert /*+ APPEND */ into err_orphan_Bestellung select bestellnr from bestellung where Kundennr not in (select Kundennr from kunde); Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 10. Aggregatbedingungen Anzahl Sätze pro Einheit •Anforderung: Anzahl Positionen muss einen bestimmten Wert haben. •Lösung: Sub-Select in FROM-Klausel. BESTELLUNG BESTELLPOSITION BESTELLNR PK ORTNR FK KUNDENNR BESTELLDATUM ANZAHLPOS FK BESTELLNR PK POSITIONSNR MENGE FK ARTIKELNR DEPOTSTELLE RABATT insert /*+APPEND */ into err_anz_pos_Bestellposition select BESTELLNR, anzahl_pos, bst_ANZAHLPOS from (select bestellnr, count(positionsnr) Anzahl_pos, ANZAHLPOS bst_anzahlpos from Best_Pos group by bestellnr,ANZAHLPOS) where Anzahl_pos <> bst_anzahlpos; Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Umgang mit Schlüsseln im Verlauf des Ladens Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 335 Bildung künstlicher Schlüssel Anwendung 1 Verkaufsregion Einkommensgruppe Wohnart Berufsgruppe Anzahl Kinder Alter Name Kunden_NR Anwendung 2 Tel PLZ Ort Strasse Partnernummer 336 Data Warehouse Verkaufsregion Einkommensgruppe Wohnart ... PLZ Ort Kunden_NR Partnernummer Dim_Kd_NR Neuer Schlüssel Sequence Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Key Lookup Dimension Künstl. Schlüssel (Primary Key) Log.Business Schlüssel (Alternate Unique) 6 5 4 3 KD_66 KD_55 KD_44 KD_33 Stamm Info Stamm Info Stamm Info Stamm Info Stamm Info Stamm Info Stamm Info Stamm Info Stamm Info Stamm Info Stamm Info Stamm Info 2 1 KD_22 KD_11 Stamm Info Stamm Info Stamm Info Stamm Info Stamm Info Stamm Info Join Lookup Log.Business Schlüssel Satz12 AA Satz13 DFG Satz14 erf Satz15 sdfg 34 dddf KD_11 1 DFG 64 dloidf DATA WAREHOUSE 64 dloidf KD_22 2 DFG 64 dloidf 78 ghzf KD_33 3 erf 78 ghzf 4456 llkof KD_44 4 sdfg 4456 llkof Fakten Bewegungsdaten Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 337 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 338 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 KD_66 Stamm Info Stamm Info Stamm Info 5 4 3 2 1 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 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 339 Lade- und Transaktionssteuerung innerhalb der Datenbank Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 340 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? 341 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 • Arbeiten mit Partitioning – Aufbau einer neuen Partition unabhängig von der Zieltabelle – Schnelles DROP PARTITION im Fehlerfall – Einfachste und schnellste Variante • Flashback Database / Table / Query – Transaktions-genaues Zurückrollen – Flashback DB benötigt zusätzlichen Plattenplatz 342 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Flashback Technologie in der Datenbank • Flashback Query • Flashback Table • Flashback Drop • Flashback Versions Query • Flashback Transaction Query • Flashback Database • Flashback Data Archive 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 344 Flashback Database • Flashback Database – Erstellen der Fast (Flash) Recovery Area – Restart Database ( mount exclusive, wenn DB <11.2) ALTER DATASE FLASHBACK ON; ALTER SYSTEM SET db_flashback_retention_target = <number_of_minutes>; 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 Flashback Database • Garantierter Rücksetzpunkt – Muss explizit gelöscht werden (Achtung FRA-Size!) – NOLOGGING Operationen sind erlaubt – Archivelog Modus dennoch zwingend – Restore nur zum Rücksetzpunkt möglich (keine beliebige SCN), wenn Flashback Logs nicht explizit aktiviert wurden 346 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Lade-Tools außerhalb der Datenbank Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 347 Oracle GoldenGate-Technologie Datenintegration für alle Anwendungsfälle Oracle GoldenGate bietet mit geringer Belastung Capture, Routing, Transformation und Delivery von Datenbank-Transaktionen in heterogenen Umgebungen in Echtzeit Alleinstellungsmerkmale Performanz Erweiterbarkeit & Flexibilität non-intrusiv, niedrige Belastung, Latenzzeit von Sekundenbruchteilen Offene, modulare Architektur - Heterogene Quellen & Ziele DATA WAREHOUSE Zuverlässig 348 Erhält transaktionale Integrität – Robust gegen Störungen und Fehler Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 348 Oracle GoldenGate Architektur Capture: Auslesen der committed Transaktionen (optional gefiltert) wie sie im Transaktionslog erscheinen. Trail files: Speichern der Daten für Weiterleitung. Pump: Datendistribution zu mehreren Zielen. Route: Daten können für Übertragung verschlüsselt werden. Delivery: Anwenden mit Transaktionsintegrität, Transformationen wie benötigt. DATA WAREHOUSE Pump Capture LAN / WAN / Internet Source Trail Pump QuellDatenbank Target Trail Delivery (TCP/IP) Target Trail Source Trail Delivery Capture ZielDatenbank Bidirektional Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 349 GoldenGate Heterogene Plattformen Datenbanken O/S und Plattform Capture: Oracle Windows 2000, 2003, XP, Windows7 DB2 Microsoft SQL Server Sybase ASE Teradata Enscribe SQL/MP SQL/MX Linux Sun Solaris HP NonStop HP-UX HP TRU64 HP OpenVMS IBM AIX Delivery: IBM z/OS Alle wie oben, und zusätzlich: HP Neoview, Netezza, Greenplum und beliebige kompatible Datenbanken ETL-Produkte JMS Message Queues MySQL TimesTen 350 ODBC Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Oracle ETL/ELT-Tool-Suite für unterschiedliche Anforderungen Oracle Data Integrator Oracle Warehouse Builder DWH OLTP A‘ A DWH OLTP A‘ A PL/SQL Insert into A‘ Select * from A Set Based Code Template Select Java based Agent Java based Agent Row+Set Based Code Template Insert Oracle Golden Gate OLTP Log Source Trail Capture DWH Target Trail Delivery Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Log DATA WAREHOUSE Security und Mandantensteuerung im Data Warehouse Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 352 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 354 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 355 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 356 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 357 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 359 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 360 Beispiel Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 361 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 Big Data Analysen im Data Warehouse mit Big Data SQL Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Hadoop Services und Projekte • Besteht aus 2 Key Services – Hadoop Distributed File System (HDFS) – MapReduce – Frame Work • Weitere Projekte basierend auf dem Kern-Hadoop-Konzept – – – – – – – Hive: SQL auf Hadoop Pig: Relationale komplexe Logik und Algorithmen auf Hadoop Sqoop: Datenaustausch zwischen zwischen Hadoop und relationalen Datenbanken Hbase: nicht-relationale verteilte Database Flume: sammeln und aggregieren von verteilten Daten und laden in zentralen Datenbestand Oozie: Workflow + Scheduling für Hadoop … und andere mehr ©2014 Oracle – All Rights Reserved Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Business Mehrwerte über Technologie Innovation Die passende Technologie für entsprechende Aufgaben UND Technologien im Verbund nutzen Hadoop Neue Geschäftsmodelle und Optionen Relational NoSQL Scale the Business Run the Business Schneller Daten bereitstellen Integration von Systemen Wettbewerbern zuvor kommen Herausforderung “Mobility” Kritische Geschäftsprozesse Vollständige Informationsketten Ökononisch sinnvolle Skalierung Investitionsschutz Neu Paradigmen nutzen Eingespielte Verfahren und Know how Neue Analysearten Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 365 Die Schwierigkeiten bei der Adaption neuer Technologien INTEGRATION Big Data in bestehende Architekturen einbinden und die Systeme beherrschen SKILLS Noch fehlen sinnvolle Tools und das Know how um Big Data – Daten direkt auszuwerten SECURITY Keine klare Sicherheitsstrategie erkennbar Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 366 Die Schwierigkeiten bei der Adaption neuer Technologien Oracle’s - Weg INTEGRATION SKILLS SECURITY SQL Engineered Systems SQL auf allen Daten Database Security auf allen Daten Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 367 Was wäre, wenn das alles mögliche wäre… • Alle Datenarten für alle Datenbank-Anwendungen verfügbar machen • Die volle Bandbreite der Oracle SQL Query Language nutzen • Mit allen Security-Features von Oracle 12c • Ohne Daten zwischen dem Hadoop-Cluster und der Datenbank hin und her zu kopieren • Eine sehr hohe Query Performance erreichen • Das bestehende Wissen (SQL-Skills) nutzen • Und dennoch immer die aktuellsten Hadoop-Neuerungen nutzen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 368 Oracle Big Data SQL – Eine neue Architektur • Mächtiges und hoch-performantes SQL auf Hadoop – Alle Oracle SQL Möglichkeiten auf Hadoop – SQL query Processing auf den lokalen Hadoop Knoten • Einfache Daten-Integration von Hadoop und Oracle Database – Single SQL – Zugriffspunkt auf alle Daten – Skalierbare Joins zwischen Hadoop und RDBMS-Data • Optimierte Hardware – High-speed Infiniband Netzwerk zwischen Hadoop und Exadata Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 369 Standardisierte Metadaten: Übernahme Hive Metadaten in den Oracle Datenbank-Katalog Oracle Catalog Hive Metastore Hive metadata CREATE TABLE movieapp_log_json (click VARCHAR2(4000)) ORGANIZATION EXTERNAL (TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR ) REJECT LIMIT UNLIMITED; External Table External Table Exadata Big Data Appliance + Oracle Database + Hadoop/NoSQL Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 370 Abfragen auf Hadoop ausführen Hive metadata I/O und Smart Scan ausführen • Auswahl der Zeilen und Spalten Select , , From , where and c_customer_id c_customer_last_name ca_county customers customer_address c_customer_id = ca_customer_id ca_state = ‘CA’ Oracle Catalog Hive metadata HDFS Name Node External Table HDFS Data Node External Table HDFS Data Node Nur relevante Daten bewegen • relevante Zeilen • relevante Spalten HDFS Data Node HDFS Data Node “Tables” Join mit Daten aus der relationalen Datenbank • 1 block = 256 MB • Example File = 40 blocks • InputSplits = 40 mögliche Parallelsisierung Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 371 Big Data SQL Minimizes Data Movement Big Data SQL Server 1. 2. 3. Hadoop Smart Scan Apply filter predicates Apply column projections Apply row-level functions • JSON Parsing 1. 2. External Table Services Read using Hadoop Classes Convert to Oracle Data Stream Data Node • Direktes Arbeiten auf den Daten – Scans and serializations from Hadoop classes – Transformation into Oracle data stream • Smart Scan: Nur relevante Daten werden werden weitergeleitet – Apply filter predicates • Include complex predicates, e.g. JSON_EXISTS • Bloom filters for faster joins • Score Data Mining models – Project columns • Include projections from nested structures Disk Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 372 Hadoop / HDFS - Knoten 1 Datenbank Maschine / Linux SELECT * FROM movielog WHERE rownum < 20; 5 1 SELECT f.click.custId, m.title, m.year, m.gross, f.click.rating 5 FROM movielog f, movie m WHERE f.click.movieId = m.movie_id AND f.click.rating > 4; create or replace directory ORACLE_BIGDATA_CONFIG as '/u01/bigdatasql_config'; create or replace directory "ORA_BIGDATA_CL_bigdatalite" as ''; Beispiel: Log-File JSON -Format hadoop fs -tail /user/oracle/moviework/applog_json/movieapp_3months.log 4 CREATE TABLE movielog 2 (click VARCHAR2(4000)) ORGANIZATION EXTERNAL (TYPE ORACLE_HDFS DEFAULT DIRECTORY DEFAULT_DIR LOCATION ('/user/oracle/moviework/applog_json/') ) REJECT LIMIT UNLIMITED; [oracle@bigdatalite ~]$ hadoop fs -tail /user/oracle/moviework/applog_json/movieapp_3months.log ,"recommended":"Y","activity":2} {"custId":1135508,"movieId":240,"genreId":8,"time":"2012-10-01:02:04:15","recommended":"Y","activity":5} {"custId":1135508,"movieId":1092,"genreId":20,"time":"2012-10-01:02:10:23","recommended":"N","activity":5} {"custId":1135508,"movieId":4638,"genreId":8,"time":"2012-10-01:02:10:54","recommended":"N","activity":7} {"custId":1135508,"movieId":4638,"genreId":8,"time":"2012-10-01:02:16:49","recommended":"N","activity":7} {"custId":1135508,"movieId":null,"genreId":null,"time":"2012-10-01:02:24:00","recommended":null,"activity":9} {"custId":1135508,"movieId":240,"genreId":8,"time":"2012-10-01:02:31:12","recommended":"Y","activity":11, "price":2.99} {"custId":1191532,"movieId":59440,"genreId":7,"time":"2012-10-01:03:11:35","recommended":"Y","activity":2} {"custId":1191532,"movieId":null,"genreId":null,"time":"2012-10-01:03:15:29","recommended":null,"activity":9} {"custId":1191532,"movieId":59440,"genreId":7,"time":"2012-10-01:03:19:24","recommended":"Y","activity":11, "price":3.99} create public database link BDSQL$_bigdatalite using 'extproc_connection_data'; create public database link BDSQL$_DEFAULT_CLUSTER using 'extproc_connection_data'; /BigDataConfig /BigDatalite 3 Files mit Pfadangaben zu HDFS, Hive, JavaClass etc Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Zugriff über Hive Metastore Datenbank Maschine / Linux Hadoop / HDFS – Knoten / Hive Metabeschreibung CREATE EXTERNAL TABLE `movieapp_log_json`( `custid` int COMMENT 'from deserializer', `movieid` int COMMENT 'from deserializer', `genreid` int COMMENT 'from deserializer', `time` string COMMENT 'from deserializer', `recommended` string COMMENT 'from deserializer', `activity` int COMMENT 'from deserializer', `rating` int COMMENT 'from deserializer', `price` float COMMENT 'from deserializer') ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 'hdfs://bigdatalite.localdomain:8020/user/oracle/moviework/applog_json' TBLPROPERTIES ( 'last_modified_by'='oracle', 'last_modified_time'='1408613969', 'transient_lastDdlTime'='1408613969') CREATE TABLE movieapp_log_json ( custId INTEGER , movieId INTEGER , genreId INTEGER , time VARCHAR2 (20) , recommended VARCHAR2 (4) , activity NUMBER, rating INTEGER, price NUMBER ) ORGANIZATION EXTERNAL ( TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR ) REJECT LIMIT UNLIMITED; Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 374 Automatisierung: Oracle Data Modeler Übernahme der Hive Definitionen in das Modell Generieren Oracle DDL für die importierten Tabellen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 375 Neue Daten-Quellen für Oracle External Tables CREATE TABLE movielog (click VARCHAR2(4000)) ORGANIZATION EXTERNAL ( TYPE ORACLE_HIVE DEFAULT DIRECTORY Dir1 ACCESS PARAMETERS ( com.oracle.bigdata.tablename logs com.oracle.bigdata.cluster mycluster) ) REJECT LIMIT UNLIMITED • Neue Eigenschaften – ORACLE_HIVE und ORACLE_HDFS Access Driver – Identifizuierung Hadoop Cluster, Data Source Objects, Column Mapping, Error Handling, Overflow Handling, Logging • Neue Tabellen Metadaten werden von Oracle DDL zu den Hadoop Lese-Routinen zur Query-Zeit geschickt • Auf Erweiterung hin entwickelt – StorageHandler wird künftig auch weitere Quellen-Arten lesen können – Z. B.: MongoDB, HBase, Oracle NoSQL DB Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 376 Big Data Appliance X4-2 Hardware: • • • • 18 Knoten (mit je 2 * 8 Kerne) 1152 GB RAM (erweiterbar) 864 TB Plattenkapazität 40 Gb/s InfiniBand Integrierte Software: • • • • • • Oracle Linux Oracle Java VM Cloudera Distribution of Apache Hadoop (CDH) Cloudera Manager Oracle R Distribution NoSQL Database Community Edition (falls gewünscht) Die integrierte Software (außer NoSQL DB CE) wird als Teil von Premier Support für Systeme bzw. Premier Support für Betriebssysteme unterstützt Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Komplettes Set des Oracle SQL über alle Daten hinweg nutzen Ausschnitt Oracle SQL Analytische Funktionen • Ranking functions • – rank, dense_rank, cume_dist, percent_rank, ntile • • • • Statistical Aggregates • Linear regression – Fitting of an ordinary-least-squares regression line to a set of number pairs. Hypothesis Testing – Student t-test , F-test, Binomial test, Wilcoxon Signed Ranks test, Chi-square, Mann Whitney test, Kolmogorov-Smirnov test, One-way ANOVA – Correlation, linear regression family, covariance • Cross Tabs – Enhanced with % statistics: chi squared, phi coefficient, Cramer's V, contingency coefficient, Cohen's kappa Reporting Aggregate functions – Sum, avg, min, max, variance, stddev, count, ratio_to_report • Correlations – Pearson’s correlation coefficients, Spearman's and Kendall's (both nonparametric). LAG/LEAD functions – Direct inter-row reference using offsets • – DBMS_STAT_FUNCS: summarizes numerical columns of a table and returns count, min, max, range, mean, stats_mode, variance, standard deviation, median, quantile values, +/- n sigma values, top/bottom 5 values Window Aggregate functions (moving and cumulative) – Avg, sum, min, max, count, variance, stddev, first_value, last_value Descriptive Statistics • Distribution Fitting – Kolmogorov-Smirnov Test, Anderson-Darling Test, Chi-Squared Test, Normal, Uniform, Weibull, Exponential – Frequently combined with the COVAR_POP, COVAR_SAMP, and CORR functions Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE next = lineNext.getQuantity(); } Pattern Matching mit Oracle SQL if (!q.isEmpty() && (prev.isEmpty() || (eq(q, prev) && gt(q, next)))) { state = "S"; return state; } Ticker Ausschnitt Oracle SQL Analytische Funktionen if (gt(q, prev) && gt(q, next)) { state = "T"; return state; } if (lt(q, prev) && lt(q, next)) { state = "B"; return state; } 10:00 10:05 10:10 10:15 10:20 10:25 if (!q.isEmpty() && (next.isEmpty() || (gt(q, prev) && eq(q, next)))) { state = "E"; return state; } Simplified, sophisticated, standards based syntax (W-Form) Beispiel finden von Mustern in Aktien-Markt-Bewegung if (q.isEmpty() || eq(q, prev)) { state = "F"; return state; } return state; } private boolean eq(String a, String b) { if (a.isEmpty() || b.isEmpty()) { return false; } return a.equals(b); } private boolean gt(String a, String b) { if (a.isEmpty() || b.isEmpty()) { return false; } return Double.parseDouble(a) > Double.parseDouble(b); } private boolean lt(String a, String b) { if (a.isEmpty() || b.isEmpty()) { return false; } return Double.parseDouble(a) < Double.parseDouble(b); } public String getState() { return this.state; } } BagFactory bagFactory = BagFactory.getInstance(); @Override public Tuple exec(Tuple input) throws IOException { long c = 0; String line = ""; String pbkey = ""; V0Line nextLine; V0Line thisLine; V0Line processLine; V0Line evalLine = null; V0Line prevLine; boolean noMoreValues = false; String matchList = ""; ArrayList<V0Line> lineFifo = new ArrayList<V0Line>(); boolean finished = false; 250+ Lines of Java UDF SELECT first_x, last_z FROM ticker MATCH_RECOGNIZE ( PARTITION BY name ORDER BY time MEASURES FIRST(x.time) AS first_x, LAST(z.time) AS last_z ONE ROW PER MATCH PATTERN (X+ Y+ W+ Z+) DEFINE X AS (price < PREV(price)), Y AS (price > PREV(price)), W AS (price < PREV(price)), Z AS (price > PREV(price) AND z.time - FIRST(x.time) <= 7 )) 12 Lines of SQL DataBag output = bagFactory.newDefaultBag(); if (input == null) { return null; } if (input.size() == 0) { return null; } Object o = input.get(0); if (o == null) { return null; } 379 Copyright 2014, Oracle //Object o = © input.get(0); if (!(o instanceof DataBag)) { int errCode = 2114; 20x mal weniger Code and/or its affiliates. All rights reserved. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE R als universelles Analyse-Mittel Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE R: Brücke zwischen den Welten Statistik Data / Text Mining Modellierung SocialMedia Connect Komplexe Graphik Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE ORAAH Einsatzbereiche • Direktes Arbeiten mit HDFS Objekte – Vollen Zugriff auf HDFS-Objekte (Command line interfaces) HDFS.LS() – Analyse von HDFS Objekten • Verschieben von Daten – HDFS Dateien In-Memory R Objekte, lokale Dateien, HIVE-Objekte and Oracle Datenbank • Arbeiten mit R auf HIVE Tabellen – HIVE SQL Funktionalität mittels ORE-like transparent Layer – Overloading R Funktionen auf ore.frame Objekte die im Hintergrund auf HIVE Tabellen/views “gemappt” werden • Native advanced analytics Funktionen – Allgemeine statistische Funktionen (z. B. table()) und Predictive Analytics Techniken (z. B. Lineare Regression) • Starten von MapReduce Jobs ohne Java programmieren zu müssen – Aus einer R-Session heraus – Map und reduce Funktionen sind in in R geschrieben – Testen von MapReduce Jobs im “Single Threaded Mode” mit orch.dryrun / Hadoop Verarbeitung wird simuliert Arbeiten in einer R Client – Umgebung Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Oracle R Enterprise Database Server Maschine User R Engine Oracle R Packages (ORE) Oracle Database SQL Lineare Modelle R-Skripte Clusterung Segmentierung Neuronale Netze R MapReduce R Hive CSV R sqoop/OLH HCache R HDFS Hadoop Abstraction Layer Excel R Results Results JSON R Engine(s) managed by Oracle DB MapReduce Nodes HDFS Nodes R Engine Other R packages Oracle R Enterprise packages JSON {CRAN packages} Hadoop Cluster (z. B. BDA) ORD Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE HDFS API – Funktionen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE ORAAH Analytics Functions Function Description orch.cor Correlation matrix computation orch.cov Covariance matrix computation orch.kmeans Perform k-means clustering on a data matrix stored as an HDFS file. Score data using orch.predict. orch.lm Fits a linear model using tall-and-skinny QR (TSQR) factorization and parallel distribution. The function computes the same statistical parameters as the Oracle R Enterprise ore.lm function. Score data using orch.predict. orch.lmf Fits a low rank matrix factorization model using either the jellyfish algorithm or the Mahout alternating least squares with weighted regularization (ALS-WR) algorithm. orch.neural Provides a neural network to model complex, nonlinear relationships between inputs and outputs, or to find patterns in the data. Score data using orch.predict. orch.nmf Provides the main entry point to create a nonnegative matrix factorization model using the jellyfish algorithm. This function can work on much larger data sets than the R NMF package, because the input does not need to fit into memory. orch.princomp Principal components analysis of HDFS data. Score data using orch.predict. orch.sample Sample HDFS data by percentage or explicit number of rows specification Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Beispiel zur Nutzung von Hive mit OREhive ore.connect(type="HIVE") ore.attach() # create a Hive table by pushing the numeric # columns of the iris data set IRIS_TABLE <- ore.push(iris[1:4]) # Create bins based on Petal Length IRIS_TABLE$PetalBins = ifelse(IRIS_TABLE$Petal.Length < 2.0, "SMALL PETALS", + ifelse(IRIS_TABLE$Petal.Length < 4.0, "MEDIUM PETALS", + ifelse(IRIS_TABLE$Petal.Length < 6.0, + "MEDIUM LARGE PETALS", "LARGE PETALS"))) #PetalBins is now a derived column of the HIVE object > names(IRIS_TABLE) [1] "Sepal.Length" "Sepal.Width" "Petal.Length" [4] "Petal.Width" "PetalBins" # Based on the bins, generate summary statistics for each group aggregate(IRIS_TABLE$Petal.Length, by = list(PetalBins = IRIS_TABLE$PetalBins), + FUN = summary) 1 LARGE PETALS 6 6.025000 6.200000 6.354545 6.612500 2 MEDIUM LARGE PETALS 4 4.418750 4.820000 4.888462 5.275000 3 MEDIUM PETALS 3 3.262500 3.550000 3.581818 3.808333 4 SMALL PETALS 1 1.311538 1.407692 1.462000 1.507143 Warning message: ORE object has no unique key - using random order ©2014 Oracle – All Rights Copyright ©Reserved 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 6.9 5.9 3.9 1.9 0 0 0 0 Notwendige Dinge, die niemand macht: Metadatenverwaltung im Data Warehouse Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 388 Informations-Repository Beispiele für Informations-Bedarfe • Aufstellung zu allen ermittelten und formulierten Informationsanforderungen der Endbenutzer • Abgestimmte, sachgebietsübergreifende Informationskataloge zu allen Tabellen und Spalten (bereinigt um Synonyme und Homonyme) • Ein zusätzliches Klassifizierungsverfahren zum Verhindern von Synonymen und Homonymen • Nachweis darüber, welcher Benutzer welche Daten nutzt • Dokumentation der über Materialized Views aufgebauten Kennzahlen-Hierarchien -> Kennzahlenbäume • Dokumentation aller Dimensionen sowie ihrer Hierarchien und die hierüber selektierbaren Felder • Dokumentation der Kennzahlen in den Fakten-Tabellen • Datenqualitätsregeln in dem Integration Layer mit Bezug zu den fachlichen Anforderungen • Ein standardisierendes Schlagwortverzeichnis zu allen Fachbegriffen könnte noch hinzugefügt werden Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Ein zentrales Metadaten-Repository für eine integrierte Informations-Verwaltung Business Process Modeling Reporting Model (BI) Logical Data Model Operative Prozesse Metadaten Repository Data Mapping Model (ETL) Mesures Model (Kennzahlenäume) Informaton Delivery Process Organization Model Data Catalogue (Database) Data Quality Standards Information-Standards (Glossars, Terms,Definitions) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Ein Meta-Information-Modell für das Data Warehouse Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Metadaten Repository for Free Information Catalogue – APEX - Anwendung Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Die optimale Hardware für das Data Warehouse Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 393 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 394 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 395 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 396 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 397 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 398 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Orion (ORion IO Numbers) Physical Disks trace Luns Random small reads (8k) Random large reads (1M) Writes Orion MBPS IOPS lat orion -run simple -testname laufwerk -num_disks 6 orion -run advanced -testname ' laufwerk' -size_large 1024 -num_large 1 -num_small 8 -type seq -num_disks 6 -num_streamIO 2 (LUN: Logical Unit Number, logische Storage-Einheit, virtuelle Platte) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Summary DATA WAREHOUSE 399 Cluster-Einsatz Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 400 Oracle‘s Entwicklung für intelligenten Umgang mit Massendaten -> R8 R9 R10/11 RAC R11 -> Rxx RAC ASM SAN 401 RAC ASM SAN Oracle Storage / Exadata Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | InMemory Parallel Execution Oracle Storage / Exadata DATA WAREHOUSE Mit Leichtigkeit skalieren • Lineare Skalierung jeweils bei Server und Storage • Keine Änderung der Datenstrukturen • Ohne Downtime • Minimale Administration Faktor n Real Application Clusters Automatic Storage Management Oracle Clusterware Faktor n 402 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Automatic Storage Management (ASM) Hotspot Dynamisches Zuschalten im Online-Betrieb 403 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 404 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 405 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 406 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 407 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 408 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 410 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 411 Monitoring Data Warehouse Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 412 Performance und Systemzustand überwachen / Hilfsmittel • 2) Perfstat • 1) Alerts • 3) AWR (EE, Diagnostic Pack) • ADDM (EE, Diagnostic Pack) analog Polling Tracing • SQL Tuning • ASH 413 Beginn-Zeitpunkt Ende-Zeitpunkt Permanente Betrachtung Protokolldatei Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 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 414 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Mit OEM 415 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 416 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 417 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 • 418 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 419 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE AWR über OEM modifizieren / einstellen 420 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE OEM Beispiel - Bericht Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 421 Automatic Database Diagnostic Monitor (ADDM) • Läuft automatisch nach jedem AWR Snapshot – Kann zusätzlich nach Alerts gestartet werden – Bericht kann auf einen Zeitraum eingeschränkt werden – Festlegen von Interval + Retention-Periode • Aktivierung über Init-Parameter – control_management_pack_access – statistics_level SQL> Show parameter control_managem NAME TYPE VALUE ------------------------------------ ----------- -------control_management_pack_access string DIAGNOSTIC+TUNING SQL> show parameter statistics_ NAME TYPE VALUE ------------------------------------ ----------- -------statistics_level string TYPICAL Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 422 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 425 Trace einer Session Identifizierung einer zu prüfenden Session select sid,serial#,terminal,program,module from v$session; *** 2011-09-05 08:08:53.468 ===================== PARSING IN CURSOR #1 len=62 dep=0 uid=0 oct=47 lid=0 tim=33718840968 hv=3081195784 ad='34ab52dc' sqlid='2bqy8r6vufn88' BEGIN dbms_monitor.session_trace_enable(135,181,false); END; END OF STMT EXEC #1:c=0,e=1082,p=0,cr=0,cu=0,mis=1,r=1,dep=0,og=1,plh=0,tim=33718840965 135 177 ASCHLAUC sqlplus.exe sqlplus.exe Aktivieren des SQL-Trace execute dbms_monitor.session_trace_enable(135,177,true); -- TRUE / FALS mit bzw. Ohne waits und zusätzliche Analysen *** 2011-09-05 08:09:02.890 CLOSE #1:c=0,e=45,dep=0,type=0,tim=33728275300 ===================== PARSING IN CURSOR #3 len=41 dep=0 uid=0 oct=3 lid=0 tim=33728275601 hv=1078826809 ad='34ab4260' sqlid='2b69gpx04v5tt' select count(*) from dwh.wh_transaktionen END OF STMT PARSE #3:c=0,e=63,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=3695442063,tim=33728275598 EXEC #3:c=0,e=43,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=3695442063,tim=33728275918 FETCH #3:c=0,e=792,p=0,cr=49,cu=0,mis=0,r=1,dep=0,og=1,plh=3695442063,tim=33728276801 STAT #3 id=1 cnt=1 pid=0 pos=1 obj=0 op='SORT AGGREGATE (cr=49 pr=0 pw=0 time=0 us)' STAT #3 id=2 cnt=4216 pid=1 pos=1 obj=86150 op='TABLE ACCESS FULL WH_TRANSAKTIONEN (cr=49 pr=0 pw=0 time=8940 us cost=16 size=0 card=4216)' FETCH #3:c=0,e=3,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,plh=3695442063,tim=33728277502 Deaktivieren execute dbms_monitor.session_trace_disable(135,181); *** 2011-09-05 08:09:15.453 CLOSE #3:c=0,e=28,dep=0,type=0,tim=33740829401 ===================== PARSING IN CURSOR #2 len=57 dep=0 uid=0 oct=47 lid=0 tim=33740830066 hv=208267310 ad='34bc4a1c' sqlid='faaagm066mu1f' BEGIN dbms_monitor.session_trace_disable(135,181); END; END OF STMT Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 426 Auswertung Trace-Dateien • TKPROF – tkprof orcl_ora_4488.trc c:\abc.txt explain=sys/sys sort=fchqry • Trace Analyzer (TRCA) – Download über Doc 224270.1 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 427 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 428 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 432 Messung tatsächlich belegter Plattenplatz • Häufig gibt es nur Zahlen über den allokierten Speicher – Oft genannt von der Storage-Abteilung, die nicht in die Dateien hineinschauen kann • Manchmal werden Zahlen genannt, die auch die gespiegelten Daten beinhalten oder den Backup-Storage umfassen • Plattenplatz im DWH wird oft ähnlich organisiert wie Plattenplatz im OLTP-Umfeld – Zu große Free-Space-Bereiche, obwohl die Zugänge zeitlich und mengenmäßig gut kalkulierbar sind Gibt kein realisitisches Bild über den tatsächlichen Bedarf und Kosten Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 433 Messung belegter Plattenplatz pro Tablespace Tablespace Name -----------------DWH1 DWH1 DWH1 EXAMPLE PERFSTAT PERFSTAT SYSAUX SYSTEM TEMP TEST TEST_ALERT TEST_ALERT UNDOTBS1 USERS avg sum Filename FILE_ID FILESIZE USED Pct. Used --------------------------------------------- ---------- ---------- --------D:\ORA\ORADATA\ORCL\DWH1.DBF 7 52428800 25100288 47 D:\ORA\ORADATA\ORCL\DWH1_1 8 209715200 32178176 15 D:\ORA\ORADATA\ORCL\DWH1_2 9 2726297600 23068672 0 D:\ORA\ORADATA\ORCL\EXAMPLE01.DBF 5 104857600 82247680 78 D:\ORA\ORADATA\ORCL\PERFSTAT01.DBF 6 104857600 102498304 97 D:\ORA\ORADATA\ORCL\PERFSTAT2 12 209715200 1048576 0 D:\ORA\ORADATA\ORCL\SYSAUX01.DBF 2 723517440 679608320 93 SELECT /*+ ordered */ 99 D:\ORA\ORADATA\ORCL\SYSTEM01.DBF 1 734003200 729874432 d.tablespace_name tablespace D:\ORA\ORADATA\ORCL\TEMP01.DBF 1 20971520 18874368 90 , d.file_name filename D:\ORA\ORADATA\ORCL\TEST.DBF 10 3145728 1048576 33 , d.file_id file_id , d.bytes filesize D:\ORA\ORADATA\ORCL\TEST_ALERT.DBF 11 3145728 2097152 66 , NVL((d.bytes - s.bytes), d.bytes) used D:\ORA\ORADATA\ORCL\TEST_ALERT2 13 3145728 3145728 100 - s.bytes) , d.bytes)) / d.bytes) , TRUNC(((NVL((d.bytes FROM sys.dba_data_files d D:\ORA\ORADATA\ORCL\UNDOTBS01.DBF 3 52428800 33816576 64 , v$datafile v D:\ORA\ORADATA\ORCL\USERS01.DBF 4 5242880 4325376 82 , ( select file_id, SUM(bytes) bytes ---------- -----------------from sys.dba_free_space GROUP BY file_id) s 62 WHERE 4953473024 1738932224 (s.file_id (+)= d.file_id) SET LINESIZE 145 SET PAGESIZE 9999 SET VERIFY OFF COLUMN tablespace FORMAT a18 COLUMN filename FORMAT a50 COLUMN filesize FORMAT 999.999,999,999,999 COLUMN used FORMAT 999.999,999,999,999 COLUMN pct_used FORMAT 999 BREAK ON report COMPUTE SUM OF filesize ON report COMPUTE SUM OF used ON report COMPUTE AVG OF pct_used ON report 434 HEADING HEADING HEADING HEADING HEADING 'Tablespace Name' 'Filename' 'File Size' 'Used (in bytes)' 'Pct. Used‚ AND (d.file_name = v.name) UNION SELECT d.tablespace_name , d.file_name , d.file_id , d.bytes , NVL(t.bytes_cached, 0) , TRUNC((t.bytes_cached / d.bytes) * 100) FROM sys.dba_temp_files d , v$temp_extent_pool t , v$tempfile v WHERE (t.file_id (+)= d.file_id) AND (d.file_id = v.file#) / Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | * 100) tablespace filename file_id filesize used pct_used DATA WAREHOUSE pct_used Einzelne Messungen -- total amount of allocated datafile size select sum(bytes)/1024/1024 "Meg" from dba_data_files; -- Size of all temp files select nvl(sum(bytes),0)/1024/1024 "Meg" from dba_temp_files; -- Size of on-line redo-logs select sum(bytes)/1024/1024 "Meg" from sys.v_$log; -- all together Datafile size, temp files, on-line redo-logs; select a.data_size+b.temp_size+c.redo_size "total_size" from ( select sum(bytes) data_size from dba_data_files ) a, ( select nvl(sum(bytes),0) temp_size from dba_temp_files ) b, ( select sum(bytes) redo_size from sys.v_$log ) c; 435 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Einzelne Messungen -- freespace report col "Database Size" format a20 col "Free space" format a20 select round(sum(used.bytes) / 1024 / 1024 ) || ' MB' "Database Size" , round(free.p / 1024 / 1024) || ' MB' "Free space" from (select bytes from v$datafile union all select bytes from v$tempfile union all select bytes from v$log) used , (select sum(bytes) as p from dba_free_space) free group by free.p / -- used space over all SELECT SUM(bytes)/1024/1024 "Meg" FROM dba_segments; -- used / free space in temp SELECT tablespace_name, SUM(bytes_used), SUM(bytes_free) FROM V$temp_space_header GROUP BY tablespace_name; 436 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Einzelne Messungen -- true used / free space in temp SELECT mb_free FROM A.tablespace_name tablespace, D.mb_total, SUM (A.used_blocks * D.block_size) / 1024 / 1024 mb_used, D.mb_total - SUM (A.used_blocks * D.block_size) / 1024 / 1024 v$sort_segment A, ( SELECT B.name, C.block_size, SUM (C.bytes) / 1024 / 1024 mb_total FROM v$tablespace B, v$tempfile C WHERE B.ts#= C.ts# GROUP BY B.name, C.block_size ) D WHERE A.tablespace_name = D.name GROUP by A.tablespace_name, D.mb_total; 437 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Welche Daten werden wirklich genutzt? 10 – 50 Tabellen 500 – 1000 Tabellen Große Tabellen Partitioniert Namentlich bekannt > 70 % des Datenvolumens 438 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 439 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; 440 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© 2014 Oracle and/or its affiliates. All688 1 DATA WAREHOUSE 1 Copyright rights reserved. | 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 441 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 442 Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Verwendungsinformationen speichern User Tabelle DWH-Zugriffshistorie Tabname 443 Gelesen_Von_User Anzahl_Read_IO Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Lese_Datum DATA WAREHOUSE 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 444 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 445 Zusammenfassung Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Szenario DWH - Gesamtsicht OLTP Systeme In Memory Temporäre Daten T T Enterprise Layer Core - DWH / Info Pool Referenzdaten Stammdaten R R R S S S User View Layer (teils virtuell) • Dimensionen als Views • Fakten als In-Memory-Variante von Core-Transaktionen • Kennzahlen-MAVs physikalisch • R-Objekte physikalisch • JSON-Objekte physikalisch Partitionierte Transaktionsdaten nur wenn sie abgefragt werden Vorberechnete Kennzahlen I n t e r n e D a t e n Disk-Daten Integration Layer Embedded Meta-Layer C Q A A L MJ Operational Data JSON Unstructured E x t e r n e (virtuell) JSON Data JSON HDFS / NoSQL Unstructured Data JSON Data Mining Statistikdaten Oracle R Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE Szenario DWH - Gesamtsicht OLTP Systeme In Memory Temporäre Daten T T User View Layer Enterprise Layer Core - DWH / Info Pool Referenzdaten Stammdaten R R R S S S (teils virtuell) • Dimensionen als Views • Fakten als In-Memory-Variante von Core-Transaktionen • Kennzahlen-MAVs physikalisch • R-Objekte physikalisch • JSON-Objekte physikalisch SQL Partitionierte Transaktionsdaten nur wenn sie abgefragt werden Vorberechnete Kennzahlen I n t e r n e D a t e n Disk-Daten Integration Layer Embedded Meta-Layer SQL C SQL Q A MJ Operational Data JSON Unstructured E x t e r n e (virtuell) JSON Data JSON HDFS / NoSQL A L Unstructured Data JSON Data Mining Statistikdaten Oracle R Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATA WAREHOUSE 449