<Insert Picture Here> Oracle Developer Day Data Warehouse – Von Konzept bis Betrieb Christoph Blessing / Detlef Schroeder / Alfred Schlaucher • ODD Data Warehouse Themen • • • • • • • • • • • 2 Konzept und Referenzarchitektur des Oracle Data Warehouse Das Data Warehouse modellieren Den ETL-Prozess entwerfen und generieren Datenqualität optimieren / Metadaten Wichtige Technologien in der Datenbank ROLAP / MOLAP Die richtige Hardware für das Data Warehouse Exadata – Die Appliance für das Data Warehouse Unstrukturierte Daten und Big Data Advanced Analytics Maintenance Was macht das DWH-Konzept so erfolgreich (auch nach 15 Jahren) ? 1 Daten sollten zentral und leicht für alle Benutzergruppen gleichermaßen zugänglich sein 3 Trendfähige Informationen durch Aufbewahrung und Aufbereitung historischer Daten 3 2 Zentrale Bereitstellung BusinessDaten Semantik Historisch (-> Trends) Entkopplung von op. System Daten sollten leicht leicht verstehbar sein - Informationen statt Daten - Semantische Zusammenhänge 4 Flexibel und unabhängig von operativen Anwendungen analysieren können A Evolution des Data Warehouse ¾ unserer Kunden nutzen ihr DWH auch zu operativen Zwecken Hochvolumig / granular Überschaubar / aggregiert Operativ überschaubar Taktisch DWH Strategisch Jahr/Quartal/Monat Komplexe InformationsAusarbeitung und Analysen 4 Woche/Tag Periodische Berichte Stunde/Minute/Sekunde/Realtime oft und schnell wiederholbare Einzelinformationen Prinzip Normalisieren / Denormalisieren Granularisierung als Lösung Operative Daten Normalisierte Daten (DWH) Produktsparten PRODUKTDATEN PD4711 AMKLB 9987865234 7769 0000000 KLABAUTER IIO ??? EERWEERW 883466 888750000 888000 EU-Wert 735328567353654 i8886345 7746 5 Müll, Altlast, unverständliche Daten Neu sortierte Daten Spartenname Spartennr Produktdaten Produktname Produktgruppen Produktenr Gruppenname Einzelpreis Gruppennr Gruppenname Gruppennr Produkte Produktname Spartenname Spartennr Produktenr Einzelpreis Granulare Daten Im DWH Verständliche Information (denormalisiert) Das Neutralitätsprinzip des DWH Enterprise Information Layer (Kern DWH) Process neutral / 3 NF Prüfen Integrieren Harmonisieren Standardisieren Erweitern Verbinden In Beziehung setzen Rohdaten Neutral gegenüber Vorsystemen, Sprachen, OS 6 User View Layer (Data Marts) Anwenden Aufbereiten Aggregieren Angebot Anwendungsneutral, granular, Zeit-neutral Any User Group Data Integration Layer (Stage) Data Integration Any Source/Target System Redundanzen Neutral gegenüber Endbenutzern: Alle User! Alle Tools! Bedarf Oracle Data Warehouse Architektur für unternehmensweites Datenmanagement Any Source BI Server Interactive Dashboards Data Integration Real Time & Batch Information Layer Architecture Concept Data Integration Layer User View Layer Enterprise Information Layer InDatabase ROLAP InDatabase MOLAP Reporting & Publishing BI Apps Data Management Concept Reference Data Models InDatabase Operational Data Layer Oracle Database Management System Cluster Big Data Solution DWH Security Utilities DWH Backup / Recovery Concept Big Data Exadata Appliance Scorecards Financial DWH System Monitoring Utilities Optimized Network Optimiertes Netzwerk Exadata / Database Machine / Exalytics Technical Auditing Lifecycle Management Concept Storage Hierarchy Ad-hoc Analysis Sales Metadata Business Utilities Catalogue Hadoop Operating System HR Marketing DWH Logistic Utilities Server Server Cluster Controlling Dynamic Data Marts Data Quality Rules Checks&Monitoring noSQL R InDatabase Data Mining Exalytics Concept Framework Office Integration Mobile Regeln einer effizienten DWH-Architektur • Orientierung an den Informationsbedürfnissen der Benutzer • Granularisierte 3NF-DWH Schicht schafft • Neutralität gegenüber Vorsystemen • Flexibilität bei der Bereitstellung neuer Abfragemodelle • Über Data Mart-Grenzen hinweg gemeinsam genutztze Berechnungen Aggregationen usw. so früh wie möglich umsetzen • Zusammenhängende Data Mart-Schicht • Mehrfachnutzung von Dimensionen • Geschikter Umgang mit sehr großen Faktentabellen • Eher granulare Informationen auch in den Fakten-Tabellen • Alle Schichten in einem DB-Raum • Ein zusammenhängender DB-Server-Cluster zum Verhindern unnötiger Wege Analysemodell – Prozess-Sicht Bewegungsdaten Stamm-Objekte Was wissen wir über den Prozess? Eigenschaften Stammobjekte Zeit kauft Artikel Kunde + wird geliefert 9 StammdatenInformationen AktivitätenInformationen: “Was geschieht”, Bewegungsdaten StammdatenInformationen Ort Bewegungsdaten Stamm-Objekte Objektmodell (Datensicht) Strukturierung und Beziehungen der Objekte Bestellung Kunde Kontaktperson KD#... tätigt Status ... Gruppe Firmenkd ... ... Name Gruppe Sparte ... • Kandidaten für Dimensions-Hierarchien finden • Schlüsselpaare PK / FK für spätere Fakten-Joins 10 Jahr Region Monat Land Tag Ort ... Generalisierung Artikel Privatkd Sparte Externe Personen Status Spezialisierung Bestelldatum Lieferdatum Eigenschaften Stammobjekte Gesammelten Input zusammenfassen Entwürfe für multidimensionale Sichten • • • • 11 Stammdaten Bewegungsdaten Generalisierung Spezialisierung Kandidaten für Dimensionen Kandidaten für Fakten Kandidaten für Hierarchie-Level potentielle Ausprägung Multidimensionales Modell (Star Schema) Status V1 V2 V3 V4 Einstiegspunkte für Anwender-Abfragen Artikel A1 A2 A3 A4 Farbe Art1 Art2 Blau Gelb Art3 Art4 Rot Lila Star Schema • Flexibel • Graphisch auch für Business-User verständlich Maier Müller Schmid Engel A1 A2 A3 A4 R1 R2 R3 R4 Kunde 1 : n Verkäufe 1:n P F P F Z1 Z2 Z3 Z4 V1 V2 V3 V4 Zeit 4 4 9 8 Z1 Z2 Z3 Z4 n : 1 R1 R2 R3 R4 Nord Sued West Ost Schwach Mittel Hoch Schwach Wohndichte 12 n:1 Regionen 6.7.09 7.7.09 8.7.09 9.7.09 Q3 Q3 Q3 Q3 Dimensionen Dim_Artikel Artikelsparte_Langname Levelschlüssel Artikelsparte Sparte Parent Aggregation Parent Aggregation Artikelgruppe_Langtext Levelschlüssel Artikelgruppe Artikel_Langtext Levelschlüssel/ Objektname Artikel Business Key Artikel_Schlüssel Künstlicher Dimension Key Dim_Schlüssel Fakten 13 Spielarten des Star Schemas Lieferant Produkte Connect by Parent Intersection- Table (Degenerated Fact) Teil von Verkäufer Verkaufsanteil Fakt Gelieferte Teile Bestellkosten Zentrale FaktTabelle Ort 14 Heterogenious Fact Kreis Land Degenerate Facts Degenerate Dimensions Conforming Dimensions Factless Facts Slowly changing dimensions Verkäufer Zeit Fakt Umsatz Pro Verk. Hierarchie Drill Down Roll up Drill Across Slice / Dice Pivot Spielarten des Star Schemas Teile Parent Teil von Benutzte Teile Produkte Sparte Gruppe Verkäufer Verkaufsanteil Produkt Fakt Gelieferte Teile Bestellkosten Intersection- Table (Degenerated Fact) Verkauf Fakten Verkäufer Fakt Umsatz Pro Verkäufer. Region Ort Kreis Land Heterogenious Fact Region Lieferant Zeit Connect by 15 Degenerate Facts Degenerate Dimensions Conforming Dimensions Factless Facts Slowly changing dimensions Drill Down Roll up Drill Across Slice / Dice Pivot Degenerated Dimension Produkte ProdNr Prodname Summe ProduktNr BestellNr. Vorgangsnr. KD.Nr KD.Name In der Regeln sind Attribute aus Dimensionen in die Faktentabelle aufgenommen worden, die eine 1:1Beziehung zu den Faktensätzen haben oder die sehr häufig genutzt werden und man dabei den Join umgehen will. 16 Attribute von degenerated Dimensions Zeit Bestellungen BestellNr Vorgangnr Kunden KD_Nr KD_Name Factless Fact Table ZeitNr ProduktNr VerkauferNr 17 Zeit Produkt Verkäufer ZeitNr ProduktNr VerkauferNr Dimensionen Dim_Artikel Artikelsparte_Langname Levelschlüssel Artikelsparte Sparte Parent Artikelgruppe_Langtext Levelschlüssel Artikelgruppe Artikel_Langtext Levelschlüssel Artikel Artikel_Schlüssel Fakten 18 Parent Star vs. Snowflake Schema 19 Auslagern von Attributen Häufig oder weniger häufig genutzt Separate Dimension 20 Enterprise Information Layer User View Layer Any User Group Data Integration Any Source/Target System Data Integration Layer Process neutral / 3 NF Operational Data Layer Die Schichten im Detail Die (Kern-) Data Warehouse - Schicht Oracle Data Warehouse 21 DWH-Kerndatenschicht Aufgaben und Ziele • Eindeutigkeit aller Objekte und Namen • Redundanzfreiheit aller Informationen • Langlebigkeit der Daten (Historisierung) Granulare Informationen als Bausteine für neue Informationszusammenhänge 22 DWH-Kerndatenschicht • • • • 3 Normalform (3 NF) Subjekt-bezogen In Teilbereiche (Subject Areas) gegliedert Anwendungs- und Geschäftsprozess-neutral • Objekte werden in mehreren Geschäftsprozesse benötigt • Daten müssen tauglich genug sein, um sie in allen Anwendungen zu verwenden • Datenarten • Stammdaten (historisiert) • Referenzdaten – externe / interne, allgemeine Sammlungen • Bewegungsdaten (angesammelt) 23 ETL Oracle Data Warehouse 24 Daten-nahe Transformation im DWH Den richtigen Platz finden Quellsystem DWH-System n-tier n-tier Application Server ETL? ETL? 25 Application Server Der Sinn des 3-Schichten-Modells Aus Sicht des Ladeprozesses Data Mart ETL: Kosten pro Kunde CRM Staging Area ERP Stage Warehouse ETL: Kosten pro Kunde Data Mart ETL: Kosten pro Kunde Data Mart ! ETL: Kosten pro Kunde 26 Aktivitäten in einem ETL-Prozess • • • • • • • • • • • • • • 27 Standardfunktionen Insert, Update, Delete, Merge (Insert / Update) 1:1-Transformationen (reines Kopieren, auch mit minimalen Änderungen) Selektionen (z.B. Where-Klauseln, Bedingungen) Gruppierende Transformationen (Aggregationen, Sortieren, Segmentieren) Pivotierende Transformationen (Verändern der Kardinalität von Zeilen und Spalten) Berechnungen (einfache oder komplexe, Funktionen oder Programme) Formatieren von Daten Zusammenführende und spaltende Transformationen (Join / Split) Anreichernde Transformationen (Referenzen auslesen, Lookups, Konstanten, Fallunterscheidungen) Aussortieren / Trennen von Datenbereichen Prüflogik (logisch / fachliche und physisch / technische) Protokollierende Maßnahmen (Log Files, Statistiken) Steuerungen (Rules-Systeme) Kommunizieren mit anderen Systemen (Messages senden / empfangen / quittieren) Generieren statt Programmieren Vorteile • Vermindern von Fehlern durch Handprogrammierung • Tabellen- und Spaltennamen müssen nicht mehr mühsam geschrieben werden • Steuerung vieler Entwicklungsschritte durch Wizards • Automatische Steuerung von Ziel- und Quellschemata • Automatische Validierung (z.B. Typverträglichkeiten) • Debugging der Laderoutinen • Laufzeitumgebung steht bereit • Dokumentation 28 Quellen und Ziele Oracle (Remote) DB2 OS390, UDB Sybase, Informix, SQL-Server... Log Golden Gate Streams DataPump CDC tcp Access/Excel Oracle Database Gateway SAP MessageBroker Peoplesoft Siebel ODBC UTL_FILE Adapter DB-Link SQL Loader Queue PL/SQL Ext. Table Webservices Tabellen View Sequenz Index Cube MView XML Procedure Function eMail Flat File XML JDBC Agent XML DB-Link Queue Queue OWB Architektur Oracle 10g /11.1/11.2 OWBSYS-Schema OWB11.2 Metadaten WindowsXP, Vista, 7 oder Linux Workspace OWB112 Control Center Service generiert Oracle 10g /11.1/11.2 (Warehouse-Datenbank) Remote DB (Source DB) OLTP-Quellschema DWH-Zielschema PL/SQL Datentransfer DB Link Warehouse Warehouse Warehouse tabellen tabellen Tabellen Control Center Agent Der Mapping-Editor Graphik und SQL Graphik und SQL Call Filter External Table Distinct PL/SQL Table Function Lookup Multiple Insert Multiple Targets Text Files XML MINUS Merge UNION Metadaten-Dependency-Manager E-LT Architecture with ODI-EE High Performance, Flexible, Lightweight Architecture • Key Architecture Benefits: 100% Java, Open APIs, fast E-LT Packaged Application Business Intelligence & Data Warehouse ODI Agent ODI Agent may be deployed in any part of the architecture LKM JKM A IKM D B C$_0 LKM C$_1 I$ File C E$ (Errors) IKM CKM RKM Extract-Load Transform Check-Load Wer glaubt schon bunten Charts? Ohne Daten kein Business Schlechte Daten sind wie Sand im Getriebe der Geschäftsprozesse Information Chain Marketing Werbung Adresse KD-Daten Bedarf Adresse Kreditdaten Kunde Angebot Kredit OK Kundenbetreuer Bestelldaten Bestand Stammdaten Order Logistiksystem Lager Buchhaltung Verkaufsdaten Lieferschein Spedition Rechnung Mahnung Bezahlung Reklamation Kunde Operative Prozesse Wo sollten Korrekturen stattfinden Correction Data Load Data Warehouse Operative Anwendung Vorsysteme bzw. Fachabteilungen sind in der Pflicht! Wo sollten Korrekturen stattfinden ? Operative Anwendung Correction Data Warehouse Operative Anwendung Operative Anwendung Data Load Warum wächst die Herausforderung der Qualität der Daten Gewachsene Bedeutung des Faktors Information für den Erfolg von Unternehmen. Fehlende Praxis in Datenmanagement Datenqualität Immer häufigere Prozessänderungen Ausufernde Datenmengen Vermehrtes Inseltum durch FertigAnwendungen Was ist Datenqualität? Aspekte (Dimensionen) der Datenqualität Brauchbarkeit der Daten! 1. Korrekt 2. Stimmig 3. Vollständig 4. Dokumentiert 5. Redundanzfrei 6. Aktuell 7. Verfügbar (Access) 8. Nützlich (TCO) 9. Handhabbar 10. Vertrauenswürdig 11. Harmonisch Methoden und Hilfsmittel • • • • • • • • • Vorgehensmodell Datenmodellierung Datenqualitätsprüfmethoden Data Profiling Data Profiling Tool Attribut-Klassifizierung (Namen) Kategorisierung von Qualitätsregeln ETL-Tool Datenbank Vorgehensmodell Datenqualitätsanalyse Zieldefinition Geschäftsregeln Erwartungen Bestandsaufnahme Owner User Ressourcen Kosten Modelle Problemkomplexe Priorisieren Strukturanalysen Felder Objekte Beziehungen Hierarchien Regelanalysen Daten Werte Fach Umsetzung Ergebnisse Abgleich-Alt Neudefinition Monitoring 6 Phasen, 95 Aktivitäten, 16 Ergebnis-Templates, 1 Metamodell, Klassifizierungen Bottom Up Top Down Planen Starten eines Profiling-Laufs GenerierungRule Starten einer CorrectionMapping-Generierung Auswahl und Ergebnisansicht Methoden Die Tabellen, die zu dem Analysefukus gehören Tabellen-Darstellung Chart-Darstellung Feintuning zu den Analysemethoden Drill-Werte Operative Datensätze AnalyseJobProtokolle Aktivierbare Business Rules Informations-Repository • Aufstellung zu allen ermittelten und formulierten Informationsanforderungen der Endbenutzer • Informationskataloge zu den Tabellen und Spalten der zentralen Warehouse-Schicht • Ein zusätzliches Klassifizierungsverfahren zum Verhindern von Synonymen und Homonymen • Nachweis darüber, welcher Benutzer welche Daten nutzt • Dokumentation der über Materialized Views aufgebauten KennzahlenHierarchien • 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 • Ein Schlagwortverzeichnis könnte noch hinzugefügt werden Agenda • • • • • • • • • Oracle Partitioning Compression Indizes Star Query Transformation Parallelisierung Result Cache Materialized Views Analytische Funktionen Oracle OLAP/ Cube-organized Materialized Views Oracle Partitioning Oracle Data Warehouse 49 Partitioning unterstützt viele Aufgaben Query Performance Partition Pruning Ladeprozess Partitioning Unterstützung ILM (Information Lifecycle Management) Leichterer Umgang mit Indizierung Unterstützung im Backup-Prozess Unterstützung bei der Komprimierung Unterstützung bei der Aktualisierung von Materialized Views (Partition Change Tracking) 50 PartitionierungsKriterium fachlich anwendbar oder nicht? Partitioning Typ: - Range - List - Hash Hochverfügbarkeit auch während des Ladens und Maintenance Wie wird partitioniert • Partition Key • Eine oder mehrere Spalten in der Tabelle bestimmen den tatsächlichen Speicherort eines Datensatzes • Separate Tablespaces • Pro Partition einen eigenen Tablespace Vereinfachte Wartung Tablespace Segment Extent Blocks 51 Partitioning ist transparent • Gesamte Tabelle selektieren SELECT * FROM orders; Alle Partitionen werden selektiert • Abfrage nur auf eine Partition Jan 2007 Feb 2007 SELECT * FROM orders WHERE order_dat between Partition Pruning: AND to_date ('2007-01-01') Automatische Beschränkung to_date ('2007-01-31'); auf betroffene Partition SQL-Abfrage ist von Partitionierung unabhängig Mär 2007 Apr 2007 Mai 2007 Jun 2007 52 Verschiedene Varianten • Partitioning-Typen • • • • • • • 53 Range List Hash Reference Interval System Virtual Column • Subpartitioning-Typen • Range - Hash • Range - List • Range - Range • List - Range • List - Hash • List - List Range Partitioning Partitionierung nach Wertebereichen • Partitionierung nach Wertebereichen • Für sortierte Wertebereiche • LESS THAN: Angabe eines maximalen Wertes pro Partition CREATE TABLE orders ( order_no number, part_no varchar2(40), ord_date date ) PARTITION BY RANGE (ord_date) ( 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')), : 54 Jan 2007 Feb 2007 Mär 2007 Apr 2007 Mai 2007 Jun 2007 Range Partitioning Neue Tabellenzeilen • Partition für neue Tabellenzeile muss vorhanden sein FEHLER in Zeile 1: ORA-14400: Eingefügter Partitionsschlüssel kann keiner Partition zugeordnet werden • Lösung I: MAXVALUE-Partition • Lösung II: Eigene Jobs • Lösung III: Oracle11g 55 Range Partitioning Alphabetische Sortierung in den Partitionen CREATE TABLE kunde_part_alpha ( kundennummer NUMBER, vorname VARCHAR2(20), kundenname VARCHAR2(40) ) PARTITION BY RANGE (kundenname) ( PARTITION kunde_ae VALUES LESS THAN ('F%') TABLESPACE part_range1, PARTITION kunde_fl VALUES LESS THAN ('M%') TABLESPACE part_range2, PARTITION kunde_mr VALUES LESS THAN ('S%') TABLESPACE part_range3, PARTITION kunde_sz VALUES LESS THAN (MAXVALUE) TABLESPACE part_range4 ); 56 Hash Partitioning Gleichverteilung der Daten • Partitionierung nach Hash-Funktion • Schlüsseltypen: Alle built-in Datentypen außer ROWID, LONG, LOB • Ziel: Gleichverteilung der Daten • Anzahl Partitionen: als Potenz von 2 empfohlen CREATE TABLE orders ( order_no number, part_no varchar2(40), ord_date date ) PARTITION BY HASH (ord_date) PARTITIONS 4 57 Hash Partitioning CREATE TABLE bestellung_part_hash ( bestellnr NUMBER(10) NOT NULL, kundencode NUMBER(10), bestelldatum DATE, lieferdatum DATE, bestell_total NUMBER(12,2), auftragsart VARCHAR2(30), vertriebskanal NUMBER ) PARTITION BY HASH (bestellnr) PARTITIONS 8; 58 List Partitioning AMER • Für diskrete, unsortierte Werte • Angabe einer Werteliste pro Partition • VALUES (DEFAULT) für “alles andere” • 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) ) 59 EMEA APAC Partition Pruning Wie hoch waren die Verkäufe für das Wochenende vom 20-22 Mai 2008? Sales Table May 18th 2008 May 19th 2008 May 20th 2008 SELECT sum(sales_amount) FROM sales May 21st 2008 WHERE sales_date BETWEEN to_date(‘05/20/2008’,’MM/DD/YYYY’) May 22nd 2008 AND to_date(‘05/23/2008’,’MM/DD/YYYY’); 60 Nur die 3 relevanten Partitionen werden betrachtet May 23rd 2008 May 24th 2008 Partitionwise Join • Sind beide am Join beteiligten Tabellen partitioniert, erfolgt • Eine “Portionierung” der Abfragemenge • Parallelisierung • Full partitionwise Join • Gleiche Partitionierungsmethode • Gleicher Partitionierungsschlüssel • Partial partitionwise Join • Nur eine der beteiligten Tabellen ist partioniert • Die andere Tabelle wird durch das System dynamisch partitioniert • Der Cost Based Optimizer entscheidet über die Vorgehensweise 61 Interval Partitioning • Erweiterung der Range-Partitionierung • Volle Automatisierung für gleichgroße Range-Partitionen • Partitionierung wird als Metadaten-Information abgelegt • Start-Partition ist dabei persistent • Sobald neue Daten hinzukommen werden Segmente allokiert • Lokale Indizes werden automatisch mitgepflegt 62 Interval Partition automatisch angelegt Mai Maidaten ? April März Märzdaten März Februar Februardaten Januar Januardaten Februar Januar Kunden 63 Produkte Aprildaten April Interval Partitioning Syntax CREATE TABLE "BESTELLUNG" ( "BESTELLNR" NUMBER(10) NOT NULL, "KUNDENCODE" NUMBER(10), "BESTELLDATUM" DATE, "LIEFERDATUM" DATE, "BESTELL_TOTAL" NUMBER(12, 2), "AUFTRAGSART" VARCHAR2(30), "ORDER_ID" NUMBER ) 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", PARTITION "Feb07" VALUES LESS THAN (TO_DATE(' 2007-02-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLESPACE "TS_PAR" ) ; 64 Reference Partitioning FK FK • Child Tables mussten bisher die Spalte mit dem Partitioning Key mitführen, um so wie die Parent Table partitioniert zu werden • Jetzt erfolgt das Equi-Partitioning von Child Tables über den Foreign Key • Erspart Redundanz beim Speichern • Vereinfacht die Administration • Nicht für Interval Partitioning anwendbar 65 Reference Partitioning PK BestellNr KundenNr BestellDatum PK FK April BestellNr ArtikelNr Menge PosNr FK März April BestellNr LieferNr PosNr Februar März April Januar Februar März Bestellungen Januar Februar Bestell_Positionen Januar Auslieferungen 66 Sub- und Composite Partitioning Oracle Data Warehouse 67 Composite Partitioning • Range ... • Range - Range [Oracle11g] • Range - Hash [Oracle8i] • Range - List [Oracle9iR2] 1st Level: Interval Partitioning möglich • List ... • List - Range [Oracle11g] • List - Hash [Oracle11g] • List - List [Oracle11g] 68 2nd Level: Interval Partitioning nicht möglich Composite Partitioning • Kombinationen: Ein Beispiel für Range - List JAN 07 Produkt Service Storno 69 FEB 07 MAR 07 ...Und zu guter Letzt: Partition Advisor • Erweiterung des SQL Access Advisors • Partitionierung von nicht-partitionierten Materialized Views, Tabellen und Indizes • Generierung von ausführbaren Skripts • Nutzung via EM • Package DBMS_ADVISOR 70 Tuning Pack Maintenance und Reorganisation • ADD PARTITION • DROP PARTITION • TRUNCATE PARTITION • MOVE PARTITION • SPLIT PARTITION • MERGE PARTITION • COALESCE PARTITION (Hash Partition / Index) • EXCHANGE PARTITION • Verändern der Default-/ realen Attribute • Partition Exchange Loading 71 Partition Exchange Loading (PEL) Financial Temporäre Tabelle Production Human Res. Store Supplier Marketing Service Neuer Monat P1 P2 P3 P4 Z1 Z2 Z3 Z4 4 4 9 8 Parallel Direct Path INSERT (Set Based) CREATE TABLE AS SELECT (CTAS) CREATE Indizes / Statistiken anlegen EXCHANGE Tabelle • Unvergleichbar schnell! 72 Zeit Monat 13 Monat 12 Monat 11 Monat 10 DROP PARTITION Faktentabelle Region Information Lifecycle Management Rolling Window Operationen • Ganze Partitionen löschen • ALTER TABLE DROP PARTITION Jan 2008 • Partitionen verschieben • ALTER TABLE MOVE PARTITION Feb 2008 • Oder: DBMS_REDEFINITION Mar 2008 • Tablespaces mit einzelnen Partitionen • READ ONLY setzen • Komprimieren • Verschlüsseln (TDE) Apr 2008 May 2008 Jun 2008 : Jan 2010 73 Information Lifecycle Management (ILM) Mit Partitionierung und Storage Layern • Für die Anwendung sind die Daten eine Tabelle • Unterschiedliche Bereiche auf unterschiedlichen Storages • Bedarfsgerechte Performance und Kosten Disk Group (DG) "High Perf " 2009 High End Storage €€€ 74 DG "Standard" 2006 2008 Midrange Storage €€ DG "Historic" 19902005 Entry Level Storage € Einsatz von Compression Oracle Data Warehouse 75 Das Datenwachstum beherrschen Komprimieren: Verwaltung und Kosten reduzieren Kompressions Typ: Einsatz für: Basic Compression Read only Tabellen und Partitionen in Data 2-4 Warehouse Umgebungen oder “inaktive” DatenPartitionen in OLTP Umgebungen. Aktive Tabellen und Partitionen in OLTP und Data 2-4 Warehouse Umgebungen. Non-relational Daten in OLTP und Data Warehouse 2-4 Umgebungen. OLTP Compression SecureFiles Compression Indizes auf Tabellen in OLTP und Data Warehouse Umgebungen. Alle Umgebungen. 2 Hybrid Columnar Compression – Data Warehousing Read only Tabellen und Partitionen in Data Warehouse Umgebungen. 8-12 Hybrid Columnar Compression – Archival “Inaktive” Daten Partitionen in OLTP und Data Warehousing Umgebungen. 10-40 Index Compression Backup Compression 76 Faktor 2 Anwendung für Komprimierung • Nicht nur für • Indizes • Strukturierte Daten in Tabellen (bzw. Partitionen) mit DIRECT Load • Mit Advanced Compression auch für • • • • Unstrukturierte Datentypen (SecureFiles) Konventionelles DML (OLTP Compression) DataPump Daten und RMAN Redo Traffic mit Data Guard Redo Logs 77 Standby Backups Advanced Compression in Oracle 11g Overhead Free Space Uncompressed Compressed Inserts are again uncompressed Block usage reaches PCTFREE – triggers Compression Inserts are uncompressed 78 Block usage reaches PCTFREE – triggers Compression 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: 79 Schlüssel im DWH und Indizierung Oracle Data Warehouse 80 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 81 Umschlüsselung Anwendung 1 Verkaufsregion Einkommensgruppe Data Warehouse Wohnart Berufsgruppe Verkaufsregion Anzahl Kinder Einkommensgruppe Alter Wohnart Name ... Kunden_NR PLZ Ort Anwendung 2 Kunden_NR Tel Partnernummer PLZ Dim_Kd_NR Ort Strasse Partnernummer Sequence 82 Neuer Schlüssel Indizes in Oracle • Indexarten • B*Tree Index • • • • • • • • • Index organisierte Tabellen Cluster Index Reverse Key Index Descending Index Bitmap Index Bitmap Join Index Function based Index Textindex Hash Index • Ausprägungen • Invisible Indizes • Lokale / Globale Indizes B*Tree Index – 4 Zugriffe bis zum Wert 1 2 Clustering Factor Zugriff über die RowID 4 84 3 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 SELECT Name FROM KD_Table WHERE Abschluss=‘Diplom‘; 85 Abschluss= Klasse_10 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 Bitmap Index • Zusammengesetzte Schlüssel sind ungünstiger als einzelne Bitmap-Schlüssel • Langsamer zu verarbeiten • Können nicht komprimiert werden • Bei Änderungsoperationen an der Tabelle kann es zu Overflow-Operationen im Bitmap Index kommen • Änderungen werden z.T. an anderer Stelle der Platte gespeichert 86 Platzverbrauch im Vergleich Tests mit unterschiedlicher Kardinalität CREATE TABLE I_Kunde (KD_NR Name Geb_Dat Bildungsgruppe KR_Rating_1_bis_Variabel number, varchar2(30), date, varchar2(30), number); SELECT index_name,index_type blevel, leaf_blocks, distinct_keys FROM user_indexes; Leaf_ Anzahl Distinct Blocks Sätze Werte Prozent BTree Bildungsgruppe Bildungsgruppe Geb_Dat KR_Rating_1_bis_Variabe KD_NR 87 100000 100000 100000 100000 100000 5 100 14575 43211 100000 0.005 0.1 14.575 43.211 100 271 192 265 220 222 Leaf_ Blocks bitmap 11 34 97 179 348 Rebuild Index Operation ALTER INDEX index_name REBUILD [ NOLOGGING ]; • Schneller als DROP / CREATE • NOLOGGING-Klausel • Fragmentierung wird beseitigt • Nach Änderungsaktivitäten • Freien Platz “richtig” freigegeben • Im DWH werden Änderungen aber oft als Batch-Lauf durchgeführt Zunächst DROP INDEX (beschleunigt den Batch-Lauf) Dann Neuerstellen des Index • Usage-Monitor zeigt, ob ein Index wirklich genutzt wurde alter index PK_BESTELLNR_PART_RANGE_HASH monitoring usage SELECT INDEX_NAME, TABLE_NAME, MONITORING, USED FROM SYS.V$OBJECT_USAGE 88 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 Bitmap Join Bitmaps B*tree für Primary Keys In den Dimensionen Tabellen Physische Strukturen im Star Schema Data Mart-Schicht Dimensionsobjekt Dimensionsobjekt Reg Zeit Primary Key Constraint PK Constraint Komprimiert Partitioniert Foreign Key (NOT NULL) Lokale Indizes Security Verschlüsselung Bitmap-Index Dimensionsobjekt Dimensionsobjekt Org. Linie Prod PK Constraint 90 PK Constraint Schlüsselverteilung im Star D_ZEIT DATUM_DESC TAG_DES_MONATS WOCHE_DES_JAHRES JAHR_NUMMER QUARTALS_NUMMER MONATS_NUMMER MONAT_DESC DATUM_ID PK FKs PK D_REGION PK REGION_ID ORT_ID ORT_NAME KREIS_ID KREIS_NUMMER KREIS_NAME LAND_NAME LAND_ID LAND_NUMMER REGION_NAME REGION_NUMMER 91 F_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 Potentiell B*Tree Potentiell Bitmap B*Tree Bitmap 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 PK Star Query Transformation Oracle Data Warehouse 92 Star Query Transformation Optimierung für Joins mit großen Faktentabellen SELECT sum(summe) FROM 1.000.000 65 12.834 F_Bestellungen B, D_Artikel A, D_Region R, D_Zeit Z, 3.074 1.029 D_Kunde K WHERE B.FK_Kunden_ID = K.Kunden_ID AND B.FK_Datum_ID = Z.Datum_ID AND B.FK_Ort_ID = R.Ort_ID AND B.FK_Artikel_Nummer = A.Nummer AND Z.JAHR_NUMMER = 2008 AND A.GRUPPE_NR = 3 AND K.KUNDENART = 8 AND R.REGION_Name IN ('MITTE','SUED','NORD'); 93 STAR_TRANSFORMATION_ENABLED=FALSE; Abgelaufen: 00:00:03.48 Ausführungsplan ---------------------------------------------------------Plan hash value: 876979892 -------------------------------------------------------------------------------------| Id | Operation | Name Rows |Bytes |Cost (%CPU)| Time | ---------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | 1 | 50 |1057 (2)| 00:00:13 | 1 | SORT AGGREGATE | 1 | 50 | | | 2 | NESTED LOOPS | | | | | 3 | |* 4 | |* 5 | |* 6 | |* 7 | |* 8 | TABLE ACCESS FULL | D_KUNDE | 9 | TABLE ACCESS FULL |* 10 | |* 11 | |* 12 | NESTED LOOPS | 12 | 600 |1057 (2)| 00:00:13 | 31 | 1209 |1026 (2)| 00:00:13 | 121 | 3993 |1022 (2)| 00:00:13 TABLE ACCESS FULL | D_ZEIT 152 | 1216 | 7 (0)| 00:00:01 HASH JOIN | 2459 |61475 |1015 (2)| 00:00:13 HASH JOIN HASH JOIN TABLE ACCESS FULL INDEX UNIQUE SCAN 9 (0)| 00:00:01 | F_BESTELLUNGEN 1010K| 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 3 | 18 | ---------------------------------------------------------------------------------------- 94 STAR_TRANSFORMATION_ENABLED=TRUE; Abgelaufen: 00:00:00.76 Ausführungsplan ---------------------------------------------------------Plan hash value: 4213778833 -----------------------------------------------------------------------------------------------| Id | Operation | Name |Rows | Bytes| Cost (%CPU)| Time| ------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 2 | | 3 | | 4 | | 5 | | 6 | |* 7 | |* 8 | | 9 | | 10 | |* 11 | |* 12 | | 13 | | 14 | |* 15 | |* 16 | | 17 | | 18 | |* 19 | 95 |* 20 | SORT AGGREGATE | | | TABLE ACCESS BY INDEX ROWID | F_BESTELLUNGEN | | BITMAP CONVERSION TO ROWIDS| BITMAP AND BITMAP MERGE BITMAP KEY ITERATION TABLE ACCESS FULL BITMAP KEY ITERATION TABLE ACCESS FULL BITMAP KEY ITERATION TABLE ACCESS FULL BITMAP KEY ITERATION TABLE ACCESS FULL 19 | | | 268 |199(2)| 00:00:03 | | | | | | | | | | | | | | | | | | | | | | | | D_KUNDE | 3 | 18 | 9(0)| 00:00:01 | | | | | | | | | | | | | | | | | | | D_ARTIKEL | 16 | 96 | 3(0)| 00:00:01 | | | | | | | | | | | | | | | | | | D_ZEIT BITMAP INDEX RANGE SCAN| IDX_FK_DATUM_ID_BM BITMAP MERGE 1 | 14 | BITMAP INDEX RANGE SCAN| IDX_FK_ARTIKEL_NUMMER_BM | BITMAP MERGE 19 |199(2)| 00:00:03 | | BITMAP INDEX RANGE SCAN| IDX_FK_KUNDEN_ID_BM BITMAP MERGE 1 | | 152 | 1216 | 7(0)| 00:00:01 | | | | | | | | | | | | | | | | | | | D_REGION BITMAP INDEX RANGE SCAN| IDX_FK_ORT_ID_BM |5069 |55759 | 69(0)| 00:00:01 | | | | | | 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 Faktentabellen-Row 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 101 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 102 Parallelisierung Oracle Data Warehouse 103 Parallelisierung und Skalierung • Abfragen • • • • seriell SELECT JOIN-Operationen SORT-Operationen GROUP BY • DDL • CREATE TABLE / MV • CREATE INDEX SQL 100% CPU I/O CPU I/O 50% parallel • Online Index Rebuild 100% SQL 50% • DML • INSERT • UPDATE / DELETE • MOVE / SPLIT PARTITION 104 Ein SQL Statement wird vom Optimizer in kleinere Arbeitsschritte aufgeteilt und läuft skalierbar ab. 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 105 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; • Parallelisieren von Abfragen • SELECT /*+ PARALLEL(b)n PARALLEL(a)n */ bestellung b, artikel a; SI : DOP = RAC: DOP = 106 a,b,c FROM PARALLEL_THREADS_PER_CPU x CPU_COUNT PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT Kontrolle über Parallelisierung behalten • Parameter PARALLEL_DEGREE_POLICY • Manual • • • • Verhalten wie vor 11gR2, der DBA konfiguriert alles manuell Kein Automated DOP Kein Statement Queuing Keine In-Memory Parallel Execution • Limited • Eingeschränkter Automated DOP für Abfragen auf Tabellen mit Default Parallelisierung • Kein Statement Queuing • Keine In-Memory Parallel Execution • Auto • Alle in Frage kommenden Statements werden parallel ausgeführt • Statement Queuing • In-Memory Parallel Execution 107 Funktionsweise von Automated DOP SQL Statement Statement wird geparsed Optimizer ermittelt Geschätzte Ausführung ist Execution Plan größer als Schwellwert Geschätzte Ausführung ist kleiner als Schwellwert Optimizer bestimmt idealen DOP Tatsächlicher DOP = MIN(Default DOP, idealer DOP) PARALLEL_MIN_TIME_THRESHOLD Statement wird seriell ausgeführt 108 Statement wird parallel ausgeführt Parallel Statement Queuing SQL Monitoring im Enterprise Manager Klicken auf SQL ID für weitere Informationen Uhrsymbol zeigt ein wartendes Statement an 109 Awaiting screen shot from EM Query Result Cache Oracle Data Warehouse 110 Situation im Datawarehouse • Lang andauernde, teure Abfragen • Sich wiederholende Abfragen • Rechenintensive PL/SQL Funktionen • Randbedingungen • Abfragen mit kleinen Ergebnismengen • Zusätzliches Memory steht zur Verfügung • Tabellen sind relativ statisch • Ziel: SQL Performance mit möglichst einfachen Mitteln erhöhen 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 112 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 113 ... 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 114 Tipps zum Einsatz von Result Cache • Sinnvoll bei • Zumeist statischem SQL • Häufiger „Read Only“-Nutzung (nur wenige Invalidierungen) • Rechenintensiven (teuren) Operationen • FORCE-Einstellung • Wirkt auf alle SQL-Statements: wird genutzt, wenn keine Änderung am SQL möglich ist • Ausnahmen mit Hint /*+ NO_RESULT_CACHE */ • Detailliertes Monitoring: V$RESULT_CACHE_OBJECTS • Speicher anpassen mit RESULT_CACHE_MAX_SIZE • Siehe auch DBA Community Tipp: http://www.oracle.com/global/de/community/dbadmin/tipps/result_cache/index.html Materialized Views Oracle Data Warehouse 116 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 117 Ähnlichkeit von Result Cache und MAVs • Result Cache • Nutzung des Result Cache für Ergebnisse aus SQL-Abfragen und PL/SQL-Funktionen • Automatisches Refresh nach Datenänderungen • Eigener Speicherbereich im Shared Pool Wirkt wie eine “just-in-time” Materialized View • Materialized Views • Nutzung für häufig erfragte Ergebnisse (Summen, Joins etc.) • Mehrere Refresh-Methoden bei Datenänderungen • Speicherung auf Disk “Caching” von speziellen Ergebnissen (transparentes Rewrite) 118 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; 119 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.) 120 Skalierung bei der Auswertung Architekturbasierte Anwendergruppen-Unterstützung .. Reg Detaillevel 0 Zeit Aggregationslevel 1 Aggregationslevel 2 .. .. MAV MAV MAV MAV MAV Org. Linie 121 Prod Top Management (wenige hochverdichtete Kennzahlen) Aggregat Summentabelle Summentabelle (Meier) Summentabelle (Müller) Sachmitarbeiter Planung / Marketing (verdichtete Daten) .. .. .. .. Mitarbeiter operative Ebene (Detaildaten auf dem Level von operativen Transaktionen) 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; 122 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; Materialized Views Query Rewrite Oracle Data Warehouse 123 Text Match – 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 124 Exaktes Text-Matching 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; 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; • Umstellen der Spalten und avg() anstelle von sum() 125 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 F_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID Ableitung von Aggregaten Wenn gebraucht COUNT(expr) Voraussetzung Optional - - COUNT(expr) - MIN(expr) MAX(expr) SUM(expr) SUM(col), col has NOT NULL constraint 126 - AVG(expr) COUNT(expr) SUM(expr) STDDEV(expr) COUNT(expr) SUM(expr) SUM(expr * expr) VARIANCE(expr) COUNT(expr) SUM(expr) SUM(expr * expr) 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 127 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 F_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID Join Back-Methode SELECT z.jahr_nummer Jahr, z.monat_desc Monat, a.artikel_name Artikel, sum(u.umsatz) Summe FROM Ist nicht in der MAV-Definition enthalten 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 128 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 F_ARTIKEL SPARTE_NAME SPARTE_NR GRUPPE_NAME GRUPPE_NR ARTIKEL_NAME ARTIKEL_ID Materialized Views im Detail Verwaltung Oracle Data Warehouse 129 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 130 Typ --------------------VARCHAR2(30) VARCHAR2(30) VARCHAR2(30) VARCHAR2(30) CHAR(1) VARCHAR2(2000) NUMBER NUMBER(38) VARCHAR2(2000) NUMBER EXPLAIN_MVIEW-Routine • Zeigt auf, welche Funktionen für eine 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'); 131 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 132 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 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 133 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) EXPLAIN_REWRITE-Routine MAV-Definition CREATE MATERIALIZED VIEW MV_UMS_ART_Zeit_Join REFRESH COMPLETE ENABLE QUERY REWRITE AS SELECT z.jahr_nummer Jahr, z.monat_desc Monat, a.artikel_id ID, FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id; select mv_name, message from rewrite_table; MV_UMS_ART_ZEIT_JOIN QSM-01150: Abfrage wurde nicht umgeschrieben DBMS_MVIEW.EXPLAIN_REWRITE begin dbms_mview.explain_rewrite(' SELECT z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe, a.artikel_id ID FROM f_umsatz u, d_artikel a, d_zeit z WHERE a.artikel_id = u.artikel_id AND u.zeit_id = z.datum_id GROUP BY z.jahr_nummer, z.monat_desc, a.artikel_id', 'MV_UMS_ART_Zeit_Join'); end; MV_UMS_ART_ZEIT_JOIN QSM-01082: Materialized View, MV_UMS_ART_ZEIT_JOIN, kann nicht mit Tabelle, F_UMSATZ, verknpft werden MV_UMS_ART_ZEIT_JOIN QSM-01102: Materialized View, MV_UMS_ART_ZEIT_JOIN, erfordert Join zurck zu Tabelle, F_UMSATZ, in Spalte, UMSATZ 134 Analytische Funktionen im SQL Oracle Data Warehouse 135 Analytische Funktionen • Seit Oracle 8.1.6 dabei • Speziell für analytische Aufgaben wie: • BI-Applikationen, Berichte, Ad-Hoc-Abfragen • Sind ANSI Standard SQL-konform (SQL-99) • Bieten erweiterte Abfrage-Performance • Verarbeitung ist effizient und skalierbar • Kann Verarbeitungslast der Anwendungen entlasten 136 Welche Antworten man von analytischen Funktionen erwarten kann • Welches sind die Top 10 Kundenberater in jeder Region? • Welches sind die 90-Tage-Durchschnitte der Produktbestände? • Welchen Prozentsatz vom Jahres-Total machen die Dezember-Verkäufe aus? • Welchen Rang hat ein Produkt, das für 100000 verkauft worden ist, verglichen mit anderen in seiner Kategorie? • Welches ist der Median von den Verkäufen pro Produkt und Region? 137 Arbeitsweise analytischer Funktionen • Analytische Funktionen berechnen einen aggregierten Wert basierend auf einer Gruppe (Partition / Window) von Zeilen • Syntax: FUNCTION_NAME (<arg>,<arg>....)OVER (<partition clause><order by clause><windowing clause>) • Ausführungsablauf: JOIN, WHERE, GROUP BY, HAVING 138 Partitionen erzeugen, Funktionen auf Partionen anwenden ORDER BY Favoriten: Beliebte Funktionen • • • • • • • • 139 LAG / LEAD: Vorgänger und Nachfolger ohne SELF-JOIN FIRST / LAST oder MIN / MAX ROW_NUMBER: vergibt eindeutige Zahl, z.B. für TOP-N RANK, DENSE_RANK: Rangfolge RATIO_TO_REPORT: Verhältnis zur Summe Aggregatfunktionen wie AVG, SUM NTILE: Aufteilung in sog. Buckets PERCENTILE_CONT/_DISC: zur Berechnung des Median Beispiel für analytische Funktionen • Finde das höchste Gehalt in jeder Abteilung und gib die Liste der Gehälter der zugehörigen Angestellten aus • 1.Schritt: SELECT department_id, MAX(salary) FROM employees GROUP BY department_id • 2.Schritt: und für die Angestellten noch eine Subquery (korreliert ?) .. 140 Einfache Anwendung... SELECT department_id dept, first_name || ' ' || last_name name, salary FROM (SELECT department_id, first_name, last_name, MAX(salary) OVER (PARTITION BY department_id) dept_max_sal, salary FROM employees e) WHERE salary = dept_max_sal; DEPT NAME SALARY ---------- -------------------- -----------------10 Jennifer Whalen 20 Michael Hartstein 13000 30 Den Raphaely 11000 ...... 141 4400 ...Und hohe Flexibilität • Doch eigentlich interessiert das höchste Gehalt je Job... SQL> SELECT job_id job, first_name || ' ' || last_name name, salary FROM (SELECT job_id, first_name, last_name, MAX(salary) OVER (PARTITION BY job_id) job_max_sal, salary FROM employees e) WHERE salary = job_max_sal; JOB NAME SALARY ---------- --------------------- ---------AC_ACCOUNT William Gietz AC_MGR Shelley Higgins 12000 AD_ASST Jennifer Whalen 4400 AD_PRES Steven King .... 142 8300 24000 Zusätzliche Funktionalitäten • Sortierung innerhalb einer Partition • Ohne Angabe der Partition-Klausel wird auf der gesamten Menge gearbeitet • Jede analytische Funktion kann ihre eigene PartitionKlausel haben • Windowing-Klausel für Teiloperationen in einer Partition • Physikalische Rows: Anzahl, von Vorgänger bis Nachfolger etc. • Logische Wertebereiche (Ranges) 143 Abfrage der Top 10 Artikel ArtikelSparte Zeit Artikelgruppe Dimension Artikel Artikel Umsatz Top 10 Artikel SELECT * FROM (SELECT substr(A.Artikel_Name, 1, 15), SUM(U.umsatz) AS Wert, Region Kunde RANK() OVER (ORDER BY SUM(U.umsatz) DESC ) AS Rangfolge FROM f_umsatz U, d_artikel A WHERE U.artikel_ID = A.artikel_ID GROUP BY A.Artikel_Name) WHERE rownum < 11; 144 Abfrage Top 3 Artikel pro Artikelgruppe ArtikelSparte Zeit Artikelgruppe Dimension Artikel Artikel Umsatz Top 3 Artikel pro Gruppe SELECT substr(Artikel,1,25) AS Artikel, substr(Artikelgruppe,1,25) AS Artikelgruppe, Wert, Rangfolge FROM (SELECT Artikel, Artikelgruppe, SUM(U.umsatz) AS Wert, RANK() OVER (PARTITION BY A.Artikelgruppe Region Kunde ORDER BY SUM(U.umsatz) DESC) AS Rangfolge FROM f_umsatz U, dim_artikel A WHERE U.artikel_ID = A.artikel_ID GROUP BY A.Artikelgruppe, A.Artikel ORDER BY A.Artikelgruppe) WHERE Rangfolge < 4; 145 Über Quartale kumulierte Umsätze Pro Kunde Q1_2003 Q4_2002 Q3_2002 Q2_2002 Q1_2002 Zeit Name Dimension Kunde Jahr Quartal Umsatz Region 146 SELECT substr(k.kunden_Name, 1, 25) AS kunde, Z.jahr, Z.quartal_des_jahr AS Quartal, SUM(U.umsatz) AS Umsatz, SUM(SUM(U.umsatz)) OVER (PARTITION BY K.kunden_Name ORDER BY K.kunden_Name, Z.jahr, Z.quartal_des_jahr ROWS UNBOUNDED PRECEDING) AS Umsatz_Summe FROM dim_kunde K, f_Umsatz U, dim_zeit Z WHERE K.kunde_id = U.kunde_id AND to_char(Z.Datum) = to_char(U.Datum) GROUP BY K.kunden_Name, Z.jahr, Z.quartal_des_jahr; Kunde ¼ der Kunden tragen zu wieviel Prozent des Umsatzes bei? 1 Zeit Buckets 2 Name Dimension Kunde 3 4 Umsatz 1 Region 2 147 SELECT SUM(umsatz), anteil, (SUM(umsatz) * 100 / Gesamt_umsatz) AS Prozent FROM (SELECT substr(K.nachname, 1, 25) AS kunde, SUM(U.umsatz) AS Umsatz, NTILE(4) OVER (ORDER BY sum(U.umsatz)) AS Anteil FROM Kunde d_kunde K, f_Umsatz U WHERE K.kunden_id = U.kunde_id GROUP BY K.nachname), (SELECT SUM(U.umsatz) AS Gesamt_Umsatz FROM f_Umsatz U) GROUP BY anteil, Gesamt_umsatz; Durchschnittliche Bestellquote eines Kunden über 3 Monate M5_2002 M4_2002 M3_2002 M2_2002 M1_2002 Zeit Name Dimension Kunde Jahr Monat Umsatz Region 148 SELECT substr(K.kunden_Name,1,25) AS kunde, Z.jahr AS Jahr, Monat_des_jahres AS Mon, SUM(u.umsatz) AS Umsatz, AVG(SUM(u.umsatz)) OVER (ORDER BY K.kunden_Name, Z.jahr, Z.Monat_des_jahres ROWS 2 PRECEDING) AS Mov_3M_AVG FROM dim_kunde K, f_Umsatz U, dim_zeit Z WHERE K.kunde_id = U.kunde_id AND to_char(Z.Datum) = to_char(U.Datum) AND K.kunden_name Kunde= 'Bauer' GROUP BY K.kunden_Name, Z.jahr, Z.Monat_des_jahres ORDER BY Z.jahr, Z.Monat_des_jahres; Das Bundesland mit dem stärksten Umsatz für jede Artikelgruppe Region Bundesland Artikelgruppe Dimension Artikel Artikel Ort Region Kreis Region 149 Umsatz SELECT ArtGr, Land, Umsatz FROM (SELECT Artikelgruppe AS ArtGr, Bundesland AS Land, SUM(umsatz)AS Umsatz, MAX(SUM(umsatz)) OVER (PARTITION BY Artikelgruppe) AS Max_Ums_Land FROM dim_region R, dim_artikel A, f_umsatz U WHERE R.ort_ID = U.ort_ID AND A.Artikel_ID = U.artikel_ID GROUP BY Artikelgruppe, Bundesland ORDER BY Artikelgruppe, Bundesland) WHERE Umsatz = Max_Ums_Land ; Vergleiche Umsätze mit Vorjahreszeitraum M2_2003 M1_2003 M12_2002 M11_2002 M10_2002 M9_2002 M8_2002 M7_2002 M6_2002 M5_2002 M4_2002 M3_2002 M2_2002 M1_2002 Zeit Jahr Monat Region 150 Umsatz Name Dimension Kunde SELECT substr(K.kunden_Name,1,25) AS kunde, z.jahr AS Jahr, Monat_des_jahres AS Mon, SUM(U.umsatz) AS Umsatz, LAG(SUM(U.umsatz),12) OVER (ORDER BY Z.jahr, Z.Monat_des_jahres) AS vorjahr FROM dim_kunde Kunde K, f_Umsatz U, dim_zeit Z WHERE K.kunde_id = U.kunde_id AND to_char(Z.Datum) = to_char(U.Datum) AND K.kunden_name = 'Bauer' GROUP BY K.kunden_Name, Z.jahr, z.Monat_des_jahres ORDER BY z.jahr, z.Monat_des_jahres; Eine der SQL-Neuigkeiten in 11.2 Die LISTAGG-Funktion aggregiert VARCHAR2 • Neue Aggregatsfunktion für Zeichenketten • Beispiel (Tabelle EMP): select deptno, listagg(ename, ':') within group (order by ename) ename_list from emp group by deptno DEPTNO ENAME_LIST ---------- ---------------------------------------10 CLARK:KING:MILLER 20 ADAMS:FORD:JONES:SCOTT:SMITH 30 ALLEN:BLAKE:JAMES:MARTIN:TURNER:WARD 151 Aggregate und Materialized Views • Bereitstellung von Aggregaten auch in Form von Materialized Views • • • • Spart separaten ETL-Lauf Ist flexibler, weil nur ein SQL-Statement ausgeführt wird Weitreichende Funktionalitäten für SQL-Query-Rewrite Aufbau eines mehrstufigen Kennzahlensystems möglich Optimierung durch OLAP-basierte Materialized Views 152 Grundlagen von Oracle OLAP 8 Gründe für OLAP • Performance • Multidimensionale Technologie ermöglicht maximale Performance für Ad Hoc-Analysen • Managebility • Einfache Administration in / mit der Datenbank • MAV • Lösung für viele gleichartige MAVs • Nähe zum ODS • Drill -Through und Recalculation leicht gemacht • DB Calculation Power • Datenbank-Engine berechnet komplexeste Formeln, Verhältniskennzahlen u.v.m. • Mehr als Reporting • OLAP-Analysen gehen über traditionelles Reporting hinaus bis hin zu hypothetischen und kausalen Fragestellungen • Benutzer-Logik • Keine Einarbeitung und DesktopEinbindung notwendig • Offenheit • Support aller BI-Applikationen durch die Offenheit der Datenbank BI-Funktionalität in der Datenbank OLTP / 3NF DWH Star Schema Standard Reporting Ad-Hoc Reporting Ad-Hoc Analysis “Analyse-freie Zone” Ad Hoc-Abfragen Ad Hoc-Analysen Zeitreihen Shares/Indizes “Analyse in Denkgeschwindigkeit” OLAP Planning Vorhersagbare Analysen Statistisches Forecasting Budgetzuordnungen Advanced Aggregations Modellberechnung Wirtschaftsbezogene und selbstdefinierte Funktionen OLAP TransaktionsModell Komplexe Fragestellungen Rückblick / IST-Zustand • Was sind die Top10-Märkte? • Abweichung zum Forecast? • Welche Kunden, Produkte, Dienste sind profitabel? • Umsatz pro Produkt im Vergleich zum letzten Jahr? • Verkaufszahlen pro Produkt, pro Filiale und pro Quartal? • Entwicklung Personalkosten? • Personalbestand vs. offene Stellen? Vorhersage / SOLL-Zustand • Wie können Promotions unsere Verkäufe um 10% steigern? • Wie ändert sich das Ergebnis, wenn der USDollar um 5% fällt? • Wenn Rohstoffpreise um 20% steigen, was heißt das für den Gewinn? • Mit welchen Kunden erzielen wir 80% unseres Gewinns? • Wie ändern sich die Verkäufe einer Filiale bei einem um 5% höheren Warenumschlag? OLAP: Daten als Cube organisiert Umsätze Kosten Deckungsbeitrag in % Zeit Zelle Slicing und Dicing mit OLAP Zeit Wann? Sicht des Vertriebs Sicht der Produktmanager Region Wo? Indikatoren Produkt Was? Sicht des Controllings Ad HocAnalysen Vorteile der Integration in die Datenbank Report Dashboard Web Service Analysis • Business Rules liegen im Data Dictionary • Rules werden einmalig definiert zur Erstellung des OLAP Cubes • Zugriff mit allen Client Tools und Applikationen • Komplexität der Berechnung wird in die Datenbank verlegt • Vereinfacht die Implementation (Daten sind bereits im DWH) • Effiziente Verarbeitung Bestandteile von Oracle OLAP • OLAP Catalog • Speichert das logische Modell der Cubes (Metadaten) • Analytic Workspace • Enthält die multidimensionalen Daten in der Datenbank (gespeichert als LOB-Daten) • OLAP Calculation Engine • Ehemals eigenes Produkt (Oracle Express Server) • Seit Oracle 9iR2 integriert in der Datenbank • Schnittstellen mit Applikationen • OLAP DML • SQL OLAP Cubes anlegen • Metadaten der Cubes liegen im OLAP Catalog • Messgrößen, Cubes und Dimensionen • Level, Hierarchien und Attribute • Definition der Metadaten erfolgt hauptsächlich über zwei Werkzeuge • Analytic Workspace Manager • Wird zusammen mit dem Oracle DB Client installiert • Speziell auf den Aufbau von OLAP Cubes zugeschnitten • Oracle Warehouse Builder • Fast gleicher Arbeitsgang wie beim Anlegen eines Star oder Snowflake Schemas Kennzahlen und Dimensionen • Die Kennzahlen stellen die Fakten dar, die Zellen des Cubes bilden die einzelnen Werte • Kennzahlen setzen sich aus zwei oder mehr Dimensionen zusammen • Es gibt nicht nur das numerische Format, sondern auch Text, Boolean, etc. • Die Kanten des Cubes werden mit den Dimensionen definiert • Die Dimensionen weisen durch Pointer auf die angeforderten Zellen im Cube Ein großer vs. zwei kleine Cubes Dimension Members D1 100 D2 Data Points Dimension Members 100 D1 100 100 100 10,000 D2 100 10,000 D3 100 1,000,000 D3 100 1,000,000 D4 100 100,000,000 D5 100 10,000,000,000 Dimension Members D6 100 1,000,000,000,000 D1 100 100 D2 100 10,000 D3 100 1,000,000 D4 100 100,000,000 Ein großer Cube mit 1 Trillion Zellen Data Points Data Points Zwei kleinere Cubes mit insgesamt 101 Millionen Zellen OLAP und Materialized Views in Oracle 11g Wachsende Anzahl an Materialized Views • Bei zunehmender Menge von MAVs • Können zahlreiche Ergebnisse für verschiedene Nutzer vorgehalten werden • Wird die Administration erschwert (Indexes, Storage, Anlegen und Löschen welcher MAVs, etc.) Month, City, Category Qtr, State, Item Month, State SALES_MCC SALES_QSI SALES_MS month_id category_id city_id quantiy sales qtr_id item_id state_id quantiy sales month state quantiy revenue Year, City, Category Year, Region SALES SALES_YC year_id category_id city_id quantiy sales day_id prod_id cust_id chan_id quantity sales year_id region_id quantity revenue Year, Region, Category Year, District SALES_YCC SALES_YCC SALES_YCT year_id category_id region_id quantiy sales year_id type_id region_id quantiy sales Cust, Time, Prod, Chan Lvls SALES_XXX XXX_id SALES_XXX XXX_id SALES_XXX XXX_id expense_amount SALES_XXX XXX_id XXX_id potential_fraud_cost XXX_id XXX_id XXX_id XXX_id XXX_id XXX_id expense_amount expense_amount XXX_id potential_fraud_cost potential_fraud_cost quantiy revenue Oracle 11g: Cube-Organized MAVs PRODUCT SQL item_id subcategory category type CUSTOMER cust_id city state country TIME SALES day_id prod_id cust_id chan_id quantity sales Automatisches Query Rewrite day_id month quarter year CHANNEL chan_id class Materialized View Refresh Vorteile von Cube-organized MAVs • Ein Cube ersetzt viele Summierungs-Kombinationen (implementiert als Materialized Views) • Der Query Optimizer in Oracle 11g behandelt OLAP Cubes als Materialized Views und leitet SQLAbfragen transparent auf den Cube um • Der Cube wird mit den für Materialized Views verfügbaren Mechnismen aktualisiert Hardware Komponenten 169 Balanced Konfigurationen • Anzahl CPU‘s • ~200 MB Datendurchsatz pro CPU • Anzahl CPU = Max. Durchsatz in MB/s / 200 • Größe des Hauptspeichers • Anzahl Platten • Größe des Speichers in GB = 2 * Anz. CPUs • 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 • • Anzahl Disk Controller Einfaches und DB-optimiertes Verwalten Anzahl Disk Controller = Controllerdurchsatz in MB = 170 Max. Durchsatz in MB/s Controllerdurchsatz in MB 70% * Herstellerangaben in Gbit/s 8 Messung von IO-Durchsatz • Einfache Schätzmethode • Calibrate_IO • Read-only Test • Wenige Test-Optionen -> leicht anwendbar • > 11g • Orion (ORacle IO Numbers) • • • • • 171 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 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 RAIDVerfahren überlegen) • Bequemes Hinzufügen /Wegnehmen von Platten • Verhindert Fragmentierung der Platten • Einführung von ASM kann bis 25% verbessertes IOVerhalten liefern • Performance kommt an Raw Devices heran 172 ASM Architektur 173 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 174 ‘Typische’ Cluster Konfiguration – 2005 1 Gigabit ethernet 4 nodes, each with 4 x 2 Ghz CPUs 5 PCI slots 16-port switch 16-port switch 16 Storage arrays, each with 10-20 disks 175 Performance und Systemzustand überwachen / Hilfsmittel • • • • • • 2) Perfstat 1) Alerts 3) AWR (EE, Diagnostic Pack) ADDM (EE, Diagnostic Pack) SQL Tuning ASH analog Polling Beginn-Zeitpunkt Ende-Zeitpunkt Tracing Permanente Betrachtung Protokolldatei 176 Automatic Database Diagnostic Monitor (ADDM) und AWR DBMS_ADVISOR Package Statistics_level OEM Addmrpt.sql TYPICAL -> ON BASIC -> OFF 1 AWR-Report ADDM Findings 1……nn% 2……nn% 3……nn% ……. use stündlich AWR 2 MMONProcess Recommendations 3 User 1 User 2 sysaux Action 8 Tage lang 4 Undo Advisor 177 SQL Tuning Advisor Segement Advisor Rationale - Hardware - Init-Parameter - Space Konfig. - Performance Advisor 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 • Awrrpt.sql • OEM 178 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 179 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. 180 ADDM-Screen Snapshot mit „Findings“ Weiterführende Aktivitäten 181 182 Oracle Database Machine (Exadata) Traditionelle Umgebung Extreme Performance Einführungsdauer 0,5 – 5 GB/sec Monate Database Machine 25/50 GB/sec Tage Personaleinsatz Tuning Platten-, Server-, Netz-Integration Investionen notwendig minimal (vorkonfiguriert) sorgfältige Planung erforderlich Ausgewogenes System Oracle Database Machine X2-2 Oracle Database Server Grid • 8 compute servers • 96 Intel Cores (gesamt) (Six-Core Intel X5670, 2,93 GHz) • 768 GB DRAM (gesamt) • Jeder Server • 2x10Gb Ethernet Port • 4x1Gb Ethernet Port • 4x300 GB SAS Disks InfiniBand Network • 40 Gb/sec unified server and storage network • Fault Tolerant Enterprise Linux Exadata Storage Server Grid • 14 storage servers 168 Platten / 112 Intel Cores • 100 TB raw SAS disk storage or 336 TB raw SATA disk storage • 5,3TB flash storage! 25 GB / Sec IO – Datendurchsatz 50 GB / IO für Flash-Speicher Query Processing: Das Problem mit klassischem Storage What Were Yesterday’s Sales? Oracle Database Server Grid Select sum(sales) where salesdate= ‘22-Dec-2009’ … SUM Storage Array Retrieve Entire Sales Table Query Processing: Bei Exadata fliessen weniger Daten durch das Netz What Were Yesterday’s Sales? Oracle Database Server Grid Select sum(sales) where salesdate= 22-Dec-2009’ … SUM Oracle Exadata Storage Grid Retrieve Sales for Dec 22 2009 Hybrid Columnar Compression Storage und IO sparen (Beispiele) Anzahl Sätze GB Vor K. EHCC Query Low T4 22.241.978 587.794.948 17.952.967 43 550 29 11 11.3 8.6 28.5 17.3 16.6 28.5 18.5 17.3 40.6 24 24.9 T5 34.341.563 63 4.8 9.1 10.2 12.4 T6 354.985.310 360 9.9 10.9 26.6 39.1 T7 60.703.833 84 9.4 19.5 19.5 23.6 Table T1 T2 EHCC Query EHCC Archive EHCC High Low Archive High DATA WAREHOUSE BigData – neue Optionen für das Data Warehouse Alfred Schlaucher, Oracle Klassische Daten • Messbare Größen und Einheiten • Transaktionsbezogene Daten • Misst OLTP-Systeme • Definierte Kennzahlen • 1 – 100 TB • Tabellen und Spalten • Täglich neue Daten • Jeder Satz ist relevant • „Buchungs“relevant • Zeitrelevant • Wachstum messbar Der größte Teil der entstehenden Daten wird noch nicht der Analyse zugeführt • Verkehrsströme • Kontaktinformationsdaten / CRM • Briefwechsel • Vertragsunterlagen • Mailverkehr • EnergieVerbrauchsdaten • Treuepunkt-Daten • Mobile-Banking • Verbrechensprofile • Auto-Mobilitätsdaten • FahrzeugInformationssysteme • Maschinen-Messdaten Big Data: Potentielle Anwendungsfälle Aufgabenstellung „Neue“ Daten Lösungen Healthcare Teures Gesundheitssystem Remote Erfassung von Patientendaten, Krankenverläufe etc. Genauere+günstigere Medikation Weniger Krankenhausaufenthalte Produktion Personeller Support Location Based Services Öffentlicher Dienst Bürger-Angebote Retail Marketing Sensoren an Maschinen und Anlagen Realtime Bewegungsdaten potentieller Kunden Bevölkerungsstatistiken Verbrauchsdaten Soziale Netzwerke / Medien Remote – Support Ausfallvorhersagen Geo-bezogenes Marketing, Besucherstrom-Analyse Verkehrsanalysen Individualisierte Dienste Kostensenkung Stimmungsanalysen Genauere Segmentierungen BigData bedeutet nicht nur „Viele Daten“ sondern erweiterte Analysen mit anderen Daten • Messbare Größen und Einheiten • Transaktionsbezogene Daten • Misst OLTP-Systeme • Definierte Kennzahlen • 1 – 100 TB • Tabellen und Spalten • Täglich neue Daten • Jeder Satz ist relevant • „Buchungs“relevant • Zeitrelevant • Wachstum messbar + • Keine klassischen Masseinheiten • Daten entstehen durch zufällige Begebenheiten • „Abfallprodukt“ • Die Relevanz ist zunächst noch unbestimmt • Ansammlung von unterschiedlichen Objekten • Mengen und Anhäufungen sind interessant • Einzelnes Objekt ist unwichtig • Wachstum indifferent Big Data: Infrastruktur Anforderungen Acquire Organize • Unvorhersehbares Auftreten • Hohe Datenmengen • Flexible Daten-Strukturen • Arbeiten mit vielen Servereinheiten • Abfragen mit extrem hohen Daten-Durchsatz • Bearbeitung am Speicherplatz •Hohe Parallelisierung Analyze • Exporative Analyse •Komplexe statistische Analysen • Agile Berichtsentwicklung • Massive Skalierung • Real Time Ergebnisse Heutige Lösungen sind isoliert und “handgemacht” Data Variety Unstructured Distributed HDFS File Systems (z. B. HDFS) Schema-less Schema Information Density Transaction (KeyOracle Value)Stores NoSQL DB (Cassandra) DBMS RDBMS (OLTP) (OLTP) Acquire NoSQL Hadoop MapReduce Solutions (Hadoop MapReduce) Oracle Loader for “R” Hadoop Home Grown ETL ETL ETL Home Advanced DBMS RDBMS Analytics Grown Advanced (DW) (DW) BI Analytics Organize Analyze Flexible Specialized Developer Centric SQL Trusted Secure Administered Oracle’s integrierte Software Lösung Data Variety Unstructured Cloudera HDFS Schema-less Schema Information Density Oracle NoSQL DB Hadoop Oracle MapReduce Oracle Hadoop Loader Acquire Mining R Spatial Graph Oracle Data Integrator Oracle (OLTP) Oracle (DW) Organize Oracle Analytics OBI EE Analyze Oracle Engineered Systems Data Variety Unstructured Exalytics Schema-less Schema Information Density Big Data Appliance Exadata Database Machine Acquire Organize Analyze Big Data Appliance Hardware: • 216 CPU cores with 864 GB RAM • 648 TB of raw disk storage • 40 Gb/s InfiniBand Integrated Software: • • • • • • Oracle Linux Oracle Java VM Cloudera Distribution of Apache Hadoop (CDH) Cloudera Manager Open-source distribution of R NoSQL Database Community Edition All integrated software (except NoSQL DB CE) is supported as part of Premier Support for Systems and Premier Support for Operating Systems Oracle Loader for Hadoop ORACLE LOADER FOR HADOOP • Leverage Hadoop Cluster to pre-process data for loading MAP REDUCE MAP MAP SHUFFLE /SORT MAP REDUCE MAP MAP REDUCE REDUCE SHUFFLE /SORT Last stage in MapReduce workflow Partitioned and non-partitioned tables REDUCE Online and offline loads Oracle Direct Connector for HDFS • Direct Access from Oracle Database HDFS Oracle Database SQL Query SQL access to HDFS External Table External table view Data query or import Infini Band DCH DCH DCH HDFS Client Oracle NoSQL Database A distributed, scalable key-value database • Simple Programming and Operational Model • Simple Major + Sub key and Value data structure • ACID transactions • Configurable consistency & durability • Scalable throughput, bounded latency • Commercial Grade Software and Support Application Application NoSQLDB Driver NoSQLDB Driver • General-purpose • Reliable – Based on proven Berkeley DB JE HA • Easy to install and configure • Easy Management • Web-based console, API accessible • Manages and Monitors: Topology; Load; Performance; Events; Alerts Storage Nodes Storage Nodes Data Center A Data Center B R Statistische Programmiersprache Open source Sprache und Entwicklungsumgebung Geeignet für statistische Berechnungen und graphische Darstellung der Ergebnisse Endbenutzertaugliche Graphiken Erweiterbar Oracle R Enterprise Lösung Vorher Kleine Modelle oft nur auf Benutzer Laptops Oracle R Modelle laufen in der skalierbaren Datenbank Große Datenmengen können verarbeitet werden Nutzt die Performance der Oracle DB und von Exadata Gleicher Code nur schneller Data Mining Provides Better Information, Valuable Insights and Predictions Cell Phone Churners vs. Loyal Customers Customer Months Source: Inspired from Data Mining Techniques: For Marketing, Sales, and Customer Relationship Management by Michael J. A. Berry, Gordon S. Linoff Data Mining Provides Better Information, Valuable Insights and Predictions Cell Phone Churners vs. Loyal Customers Customer Months Source: Inspired from Data Mining Techniques: For Marketing, Sales, and Customer Relationship Management by Michael J. A. Berry, Gordon S. Linoff Data Mining Provides Better Information, Valuable Insights and Predictions Cell Phone Churners vs. Loyal Customers Segment #3: IF CUST_MO > 7 AND INCOME < $175K, THEN Prediction = Cell Phone Churner, Confidence = 83%, Support = 6/39 Segment #1: IF CUST_MO > 14 AND INCOME < $90K, THEN Prediction = Cell Phone Churner, Confidence = 100%, Support = 8/39 Customer Months Source: Inspired from Data Mining Techniques: For Marketing, Sales, and Customer Relationship Management by Michael J. A. Berry, Gordon S. Linoff Data Mining Provides Better Information, Valuable Insights and Predictions Cell Phone Churners vs. Loyal Customers Segment #3: IF CUST_MO > 7 AND INCOME < $175K, THEN Prediction = Cell Phone Churner, Confidence = 83%, Support = 6/39 Insight & Prediction Segment #1: IF CUST_MO > 14 AND INCOME < $90K, THEN Prediction = Cell Phone Churner, Confidence = 100%, Support = 8/39 Customer Months Source: Inspired from Data Mining Techniques: For Marketing, Sales, and Customer Relationship Management by Michael J. A. Berry, Gordon S. Linoff Data Mining Provides Better Information, Valuable Insights and Predictions Cell Phone Fraud vs. Loyal Customers ? Customer Months Source: Inspired from Data Mining Techniques: For Marketing, Sales, and Customer Relationship Management by Michael J. A. Berry, Gordon S. Linoff Oracle Data Mining Algorithms Problem Algorithm Classification Logistic Regression (GLM) Decision Trees Naïve Bayes Support Vector Machine Multiple Regression (GLM) Support Vector Machine Regression Anomaly Detection Attribute Importance Association Rules Clustering Feature Extraction One Class SVM Minimum Description Length (MDL) A1 A2 A3 A4 A5 A6 A7 Apriori Hierarchical K-Means Hierarchical O-Cluster Nonnegative Matrix Factorization F1 F2 F3 F4 Applicability Classical statistical technique Popular / Rules / transparency Embedded app Wide / narrow data / text Classical statistical technique Wide / narrow data / text Lack examples of target field Attribute reduction Identify useful data Reduce data noise Market basket analysis Link analysis Product grouping Text mining Gene and protein analysis Text analysis Feature reduction In-Database Data Mining Traditional Analytics Oracle Data Mining Results Data Import Data Mining Model “Scoring” Savings Data Preparation and Transformation Data Mining Model Building Data Prep & Transformation Model “Scoring” Data remains in the Database Embedded data preparation Data Extraction Cutting edge machine learning algorithms inside the SQL kernel of Database Model “Scoring” Embedded Data Prep Model Building Data Preparation Hours, Days or Weeks Source Data • Faster time for “Data” to “Insights” • Lower TCO—Eliminates • Data Movement • Data Duplication • Maintains Security Dataset s/ Work Area Analytic al Process ing Process Output Target Secs, Mins or Hours SQL—Most powerful language for data preparation and transformation Data remains in the Database Oracle Data Miner 11g Release 2 GUI Churn Demo—Simple Conceptual Workflow Oracle Data Miner 11g Release 2 GUI Churn Demo—Simple Conceptual Workflow Churn models to product and “profile” likely churners Oracle Data Miner 11g Release 2 GUI Churn Demo—Simple Conceptual Workflow Market Basket Analysis to identify potential product bundless Oracle Data Mining and Unstructured Data • Oracle Data Mining mines unstructured i.e. “text” data • Include free text and comments in ODM models • Cluster and Classify documents • Oracle Text used to preprocess unstructured text Oracle Communications Industry Data Model Example Better Information for OBIEE Dashboards ODM’s predictions & probabilities are available in the Database for reporting using Oracle BI EE and other tools DWH-bezogenes Monitoring Oracle Data Warehouse 217 DWH-bezogene Monitoring-Aktivitäten • • • • • • • 218 ASH-Report SQL-Monitoring (OEM) Informationsbedarf Endanwender Messung Platzverbrauch Lesestatistiken über tatsächlich genutzte Daten Ressourcen-Manager ETL-Monitoring ASH Reports Active Session History • Auflisten der wichtigsten Aktivitäten in den letzten 30 Minuten • • • • • Langläufer Waits Top SQL-Statements Aktive Session Blocking Sessions • Report erzeugen mit Ashrpt.sql • HTML-Report 220 Beispiel-Session SQL> SELECT sid, serial# FROM gv$session WHERE username = 'MON'; Sessiondaten abfragen SID SERIAL# ---------- ---------134 63 SELECT sample_time, event, wait_time FROM gv$active_session_history WHERE session_id = 134 AND session_serial# = 63 Sample-Time Mit Sessiondaten abfragen Aktives SQL abfragen 221 SAMPLE_TIME EVENT WAIT_TIME ---------------------------------- ---------------- 05-SEP-11 08.47.44.282 PM 1 05-SEP-11 08.46.42.283 PM 1 SELECT sql_text, application_wait_time FROM gv$sql WHERE sql_id IN ( SELECT sql_id FROM gv$active_session_history WHERE TO_CHAR(sample_time) = '05-SEP-11 08.44.53.283 PM' AND session_id = 134 AND session_serial# = 63) / Beobachtung des Informationsbedarfs 222 Beobachten des Informationsbedarfs • Regelmäßige Teilnahme an Gremien • Abstimmung / Feedback / Planung mit Fachabteilungen und DWHNutzern • Statistiken über DWH-Nutzung • Benutzerzahlen / Session-Statistik • Datenmengen / Platzverbrauch • Segment-Reads 223 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, bei den auch den Spiegel oder auch Backup-Platz beinhalten • 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 224 Messung belegter Plattenplatz pro Tablespace 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 225 HEADING HEADING HEADING HEADING HEADING 'Tablespace Name' 'Filename' 'File Size' 'Used (in bytes)' 'Pct. Used‚ SELECT /*+ ordered */ d.tablespace_name tablespace , d.file_name filename , d.file_id file_id , d.bytes filesize , NVL((d.bytes - s.bytes), d.bytes) used , TRUNC(((NVL((d.bytes - s.bytes) , d.bytes)) / d.bytes) * 100) FROM sys.dba_data_files d , v$datafile v , ( select file_id, SUM(bytes) bytes from sys.dba_free_space GROUP BY file_id) s WHERE (s.file_id (+)= d.file_id) AND (d.file_name = v.name) UNION SELECT d.tablespace_name tablespace , d.file_name filename , d.file_id file_id , d.bytes filesize , NVL(t.bytes_cached, 0) used , TRUNC((t.bytes_cached / d.bytes) * 100) pct_used 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#) / pct_used Tablespace Name -----------------DWH1 DWH1 DWH1 EXAMPLE PERFSTAT PERFSTAT SYSAUX SYSTEM TEMP TEST TEST_ALERT TEST_ALERT UNDOTBS1 USERS avg sum 226 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 D:\ORA\ORADATA\ORCL\SYSTEM01.DBF 1 734003200 729874432 99 D:\ORA\ORADATA\ORCL\TEMP01.DBF 1 20971520 18874368 90 D:\ORA\ORADATA\ORCL\TEST.DBF 10 3145728 1048576 33 D:\ORA\ORADATA\ORCL\TEST_ALERT.DBF 11 3145728 2097152 66 D:\ORA\ORADATA\ORCL\TEST_ALERT2 13 3145728 3145728 100 D:\ORA\ORADATA\ORCL\UNDOTBS01.DBF 3 52428800 33816576 64 D:\ORA\ORADATA\ORCL\USERS01.DBF 4 5242880 4325376 82 ---------- ---------- --------62 4953473024 1738932224 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 227 Lesestatistiken für die wichtigsten Tabellen anlegen Select distinct * from (select to_char(begin_interval_time,'dd.mm.yyyy:hh24:MI') Zeit, logical_reads_total log_rd, logical_reads_delta log_rd_delta, physical_reads_total phy_rd, physical_reads_delta phy_rd_delta from dba_hist_seg_stat s, dba_hist_seg_stat_obj o, dba_hist_snapshot sn where o.owner = 'DWH1' and s.obj# = o.obj# and sn.snap_id = s.snap_id and object_name = 'UMSATZ') order by zeit; ZEIT LOG_RD LOG_RD_DELTA PHY_RD PHY_RD_DELTA ---------------- ---------- ------------ ---------- -----------06.09.2010:22:00 3357520 3357520 3355361 3355361 06.09.2010:23:00 4030816 673296 4028177 672816 07.09.2010:12:32 8060160 4029344 8054609 4026432 07.09.2010:15:50 688 688 1 1 228 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 229 Beispielabfrage 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 select to_char(s.begin_interval_time,'mm-dd hh24') c1, break on 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; 230 ‘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 `Begin Interval time' -------09-12 13 `Buffer `Disk `Application `Concurrency `SQL `Exec Gets Reads Wait Wait ID' SQL-Text Delta' Delta' Delta' C6 Delta' Delta' ------------- ---------------------------------------------- ------ ------- ------ ---------- ------------ -----------01978kjxb5yd2 Select * from 1 8,573 8,390 7448344 0 0 (select Produkt, sum(U.summe) AS Wert, RANK() -------- ------------- ---------------------------------------------- ------ ------- ------ ---------- ------------ -----------01978kjxb5yd2 Select * from 1 8,573 8,390 7494081 0 0 (select Produkt, sum(U.summe) AS Wert, RANK() -------- ------------- ---------------------------------------------- ------ ------- ------ ---------- ------------ -----------01978kjxb5yd2 Select * from 1 8,576 8,390 6601478 0 0 (select Produkt, sum(U.summe) AS Wert, RANK() 231 Verwendungsinformationen speichern User Tabelle DWH-Zugriffshistorie Tabname 232 Gelesen_Von_User Anzahl_Read_IO Lese_Datum Verbrauchsdaten sammeln • Mess-Aufruf in der aktuellen ETL-Job-Session als letzten Aufruf einbauen • Ergebnis-Daten in Historien-Tabelle eintragen 233 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#