Partitionierung Indizes und Statistiken DOAG Konferenz + Ausstellung 18.11.2014 Nürnberg Klaus Reimers info@ordix.de www.ordix.de
Agenda Einführung Arten der Partitionierung Fragestellungen Indizes Indextypen (global / local / prefixed / hash) Maintenance Unusable Index Empfehlungen Statistiken dbms_stats / Preferences Empfehlungen Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 1
Arten der Partitionierung Hauptverfahren Range (seit Oracle 8.0) Hash (seit Oracle 8.1) List (seit Oracle 9.0) System (seit Oracle 11.1) Composite Partitioning (seit Oracle 8.1) erweiterte Verfahren (seit Oracle 11.1) Interval (verfügbar mit Range) REF (verfügbar mit Range, Hash, List) Virtual Column Based (verfügbar mit Range, Hash, List) diverse Erweiterungen - vor allem Maintenance (Oracle 12c) Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 2
Arten der Partitionierung Range Partitioning Partitionsgrenze durch die Klausel VALUES LESS THAN häufig für Partitionierung nach Datum im sogenannten Roll-In/Roll-Out-Verfahren < 1997 < 2000 < 2003 < 2007 < MAXVALUE Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 3
Arten der Partitionierung Hash Partitioning Datenverteilung aufgrund Oracle-interner Hash-Funktion kein logischer Zusammenhang der Daten einer Partition Oracle-interne Hash-Funktion P1 P2 P3 P4 Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 4
Arten der Partitionierung List Partitioning Einordnung in Partitionen aufgrund von Wertelisten Wertelisten entsprechen der Logik der Applikation P_NRW P_HH P_BERLIN P_BAYERN Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 5
Arten der Partitionierung System Partitioning Einschränkung auf Partitionen kann nur durch Applikation erfolgen Datenbank kann keine Aussage zu den Inhalten der Partition treffen mit System ist hier also die Applikation gemeint P_POST P_POSTBANK P_DHL P_SCHENKER Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 6
Arten der Partitionierung Composite Partitioning Spaltenliste zweite erste Range List Hash Range (Intervall) List Hash Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 7
Agenda Einführung Arten der Partitionierung Fragestellungen Indizes Indextypen (global / local / prefixed / hash) Maintenance Unusable Index Empfehlungen Statistiken dbms_stats / Preferences Empfehlungen Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 8
Fragestellungen (von Kunden / aus Projekten) Indizes Welche Indextypen gibt es? Wann verwendet man lokale, wann globale Indizes? Was ist der Unterschied zwischen prefixed und nonprefixed? Sind global hash partitioned Indizes sinnvoll einsetzbar? Sind Indizes wartungsfrei? Kann man Indizes (teilweise) weg schalten? Statistiken Brauche ich aktuelle Statistiken? Müssen die Statistiken immer komplett erstellt werden? Was bedeuten die einzelnen Preferences (dbms_stats)? Benötigen ich Histogramme (auf allen Ebenen)? Was mache ich, wenn das Wartungsfenster zur Erstellung der Statistiken zu klein ist? Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 9
Agenda Einführung Arten der Partitionierung Fragestellungen Indizes Indextypen (global / local / prefixed / hash) Maintenance Unusable Index Empfehlungen Statistiken dbms_stats / Preferences Empfehlungen Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 10
Partitionierte Indizes - Indextypen Oracle unterstützt folgende Indextypen Tabelle Index Global Non-Partitioned Indexes Global Prefixed Indexes Local Prefixed Indexes Local Non-Prefixed Indexes Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 11
Indextypen Global Indexes wird mit Attribut GLOBAL angelegt Angabe von MAXVALUE zwingend CREATE TABLE verkauf (rechnungsnr NUMBER, woche number(2) NOT NULL) PARTITION BY RANGE (woche) (PARTITION verkauf_1 VALUES LESS THAN (18), (PARTITION verkauf_2 VALUES LESS THAN (36), PARTITION verkauf_3 VALUES LESS THAN (53)); CREATE INDEX verkauf_idx ON verkauf(woche, rechnungsnr) GLOBAL PARTITION BY RANGE (woche) (PARTITION verkauf_i1 VALUES LESS THAN (26), PARTITION verkauf_i2 VALUES LESS THAN (MAXVALUE)); Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 12
Indextypen Global Hash Partitioned Index zur Vermeidung von HOT BLOCKS CREATE TABLE verkauf (rechnungsnr NUMBER, woche number(2) NOT NULL) PARTITION BY RANGE (woche) (PARTITION verkauf_1 VALUES LESS THAN (18), (PARTITION verkauf_2 VALUES LESS THAN (36), PARTITION verkauf_3 VALUES LESS THAN (53)); CREATE INDEX verkauf_idx ON verkauf(woche) GLOBAL PARTITION BY HASH(woche) PARTITIONS 8; Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 13
Indextypen Local Indexes wird mit Attribut LOCAL angelegt equi-partitioned CREATE TABLE verkauf (rechnungsnr NUMBER, woche number(2) NOT NULL) PARTITION BY RANGE (woche) (PARTITION verkauf_1 VALUES LESS THAN (26), PARTITION verkauf_2 VALUES LESS THAN (53)); CREATE INDEX verkauf_idx ON verkauf(woche, rechnungsnr) LOCAL; Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 14
Indextypen Prefixed Index / Non-Prefixed Index CREATE TABLE verkauf ( rechnungsnr NUMBER, woche NUMBER(2) NOT NULL PARTITION BY RANGE (woche) (PARTITION verkauf_1 VALUES LESS THAN (26), PARTITION verkauf_1 VALUES LESS THAN (53) ); Prefixed Index: Partition-Key-Spalten sind im Index enthalten (ideal führend) CREATE INDEX verkauf_idx ON verkauf(woche) LOCAL; Non-Prefixed Index: Partition-Key-Spalten sind nicht im Index enthalten CREATE INDEX verkauf_idx ON verkauf(rechnungsnr) LOCAL; Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 15
Indexformen in der partitionierten Welt Normaler Index auf allen Ebenen verwendbar Function Based Index auf allen Ebenen verwendbar Reverse Index auf allen Ebenen verwendbar Bitmap (Join) Index nur LOCAL verwendbar Text Index nur auf RANGE-partitionierten Tabellen verwendbar Spatial Index nur auf RANGE-partitionierten Tabellen verwendbar Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 16
Agenda Einführung Arten der Partitionierung Fragestellungen Indizes Indextypen (global / local / prefixed / hash) Maintenance Unusable Index Empfehlungen Statistiken dbms_stats / Preferences Empfehlungen Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 17
Global Index Maintenance < Oracle 12c Globale Indizes werden bei 3-Step-Operationen invalide split / merge / move / drop / truncate konnte mit UPDATE INDEXES umgangen werden ab Oracle 12c drop und truncate partition kann beschleunigt werden Angabe von UPDATE INDEXES dann zwingend notwendig nur die Metadaten werden noch angepasst tatsächliche Indexpflege dann asynchron Ausführungsplan auch ohne Indexnachpflege ok Index muss nachgepflegt werden manuell automatisch Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 18
Agenda Einführung Arten der Partitionierung Fragestellungen Indizes Indextypen (global / local / prefixed / hash) Maintenance Unusable Index Empfehlungen Statistiken dbms_stats / Preferences Empfehlungen Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 19
Segmentlose Unusable Indizes & Index Partitionen Keine unnötigen Informationen sollen den Speicherplatz verschwenden! Segmentlose Unusable Indizes einzelne Unusable Indizes(-Partitionen) verbrauchen keinen Speicherplatz sinnvoll für Datenbereiche, die üblicherweise nicht mehr benutzt werden! ALTER INDEX <idx_name> MODIFY PARTITION <part_name> UNUSABLE; Große Ersparnis beim Indexstorage Vorteile bei Massenladevorgängen Buchungstabelle 476.240.517 Rows JAN-10 FEB-10 MAR-10 APR-10 MAY-10 UI UI I I I Partition Scan Index Scan Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 20
Partial Indexing Indizes betreffen nur einige Partitionen nutzbar für lokale und globale Indizes wird gesteuert INDEXING ON OFF PARTIAL mehr Freiheit bei der Definition Einsparung von Speicherplatz bessere Auslastung des Caches Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 21
Agenda Einführung Arten der Partitionierung Fragestellungen Indizes Indextypen (global / local / prefixed / hash) Maintenance Unusable Index Empfehlungen Statistiken dbms_stats / Preferences Empfehlungen Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 22
Empfehlungen idealerweise lokale Indizes verwenden Globale Indizes dann, wenn Uniqueness gefordert ist Global Hash Partitioned Index zur Vermeidung von Hot Blocks Ausnutzung des Prunings Verfahren so optimieren, dass möglichst keine Wartungsfenster erforderlich sind Maintenance-Window online ist praxistaugliche Erweiterungen in Oracle 12c verwenden Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 23
Agenda Einführung Arten der Partitionierung Fragestellungen Indizes Indextypen (global / local / prefixed / hash) Maintenance Unusable Index Empfehlungen Statistiken dbms_stats / Preferences Empfehlungen Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 24
Statistiken dbms_stats Auf welcher Ebene sollen Statistiken gesammelt werden? Parameter: granularity BEGIN dbms_stats.gather_table_stats ( ownname => 'SCOTT', tabname => 'EMP', estimate_percent => 30, method_opt => 'FOR ALL COLUMNS SIZE 64', degree => 32, granularity => 'AUTO', cascade => 'TRUE' ); END; / Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 25
Statistiken Granularity AUTO ALL GLOBAL GLOBAL AND PARTITION PARTITION SUBPARTITION (X) X X X KONTOAUSZUEGE Table (X) X X X P_1995 P_2014 P_2015 Partition (X) X X Subpartition Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 26
Preference INCREMENTAL Die Granularität AUTO führt dazu, dass alle Partitionen einer Tabelle gelesen werden, um globale Statistiken zu erzeugen. Wenn alte Partitionen unverändert sind, ist das in der Regel nicht notwendig. Keine inkrementelle Pflege von Histogrammen globalen Statistiken BEGIN dbms_stats.set_table_prefs( ownname => user, tabname => 'tab', pname => 'INCREMENTAL', pvalue => 'TRUE' ); dbms_stats.gather_table_stats( user, 'tab', granularity=>'auto'); END; / Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 27
Preference INCREMENTAL_STALENESS Definition der Staleness von Partitionen use_stale_percent use_locked_stats null BEGIN dbms_stats.set_table_prefs( ownname => user, tabname => 'tab', pname => 'INCREMENTAL_STALENESS', pvalue => 'use_stale_percent' ); dbms_stats.gather_table_stats( user, 'tab', granularity=>'auto'); END; / Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 28
Global_Stats Global_Stats YES Statistiken sind berechnet worden Histogramme liegen vor NO globale Statistiken werden nur kumuliert keine Histogramme keine Statistiken auf globalen Indizes Vorgehensweise nicht definierbar Ergibt sich aus der Art der Statistiksammlung Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 29
Agenda Einführung Überblick Techniken Fragestellungen Indizes Indextypen (global / local / prefixed / hash) Maintenance Unusable Index Empfehlungen Statistiken dbms_stats / Preferences Empfehlungen Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 30
Empfehlungen Zeitdauer im Auge behalten (Maintenance-Window) INCREMENTAL ist je nach Oracle-Version problematisch GLOBAL_STATS = NO ist sinnvoll wenn keine globalen Histogramme notwendig sind Statistiken bei extrem großen Tabellen manuell setzen Statistiken bei Bedarf einfrieren Partitionierung - Indizes und Statistiken, Klaus Reimers, DOAG 2014 31
Zentrale Paderborn Westernmauer 12-16 33098 Paderborn Tel.: 05251 1063-0 Seminarzentrum Wiesbaden Kreuzberger Ring 13 65205 Wiesbaden Tel.: 0611 77840-00 Zentrales Fax: 0180 1 67349 0 0180 1 ORDIX 0 Weitere Geschäftsstellen in Köln, Münster und Neu-Ulm E-Mail: info@ordix.de Internet: http://www.ordix.de Vielen Dank für Ihre Aufmerksamkeit!