Gliederung ) Speicherplatz-Zuordnung und -Verwaltung 2) Indizes 3) Explain Plan 4) Join-Operationen 5) Der Optimizer 6) Parallelisieren
) Speicherplatz-Zuordnung und -Verwaltung.) Tabellenspeicherung: Varianten der Zugriffspfade Tabellensegment (Standard-Variante) unsortierte Liste neue Sätze werden angehängt Full Table Scan Index-Cluster Gruppierung einer oder mehrerer Tab. nach Key-Wert (z.b. KDNR) Cluster Scan Hash-Cluster Gruppierung einer Tabelle nach Hash-Funktionswert (z.b. Kontenkreis) Hash Scan nur für "statische" Tabellen
) Speicherplatz-Zuordnung und -Verwaltung.2) Speicherplatz-Zuordnung: Die Storage-Klausel create table tabname storage (initial m next 0k pctincrease 0) as select... DEFAULT MINIMUM INITIAL: Größe des. Extents (wird bei create <object> angelegt) 5*DB_BLOCK_SIZE* 5*DB_BLOCK_SIZE NEXT: Größe des nächsten anzulegenden Extents n, n >=2 : 5*DB_BLOCK_SIZE 2*DB_BLOCK_SIZE Es gilt: NEXT(n+) = NEXT(n)*( + PCTINCREASE / 00) (gerundet auf Blockgröße) PCTINCREASE: Wachtumsrate der Extents 0 0 MINEXTENTS: Anzahl, der beim Create bereits anzulegenden Extents (incl. INITIAL) MAXEXTENTS: Zulässige Maximalzahl von Extents 2E+09 ZIEL: Möglichst wenige Extents *Datawarehouse: DB_BLOCK_SIZE = 8K y:\or\user\obst\extents.sql: y:\or\user\obst\bytes.sql: y:\or\user\obst\freespac.sql: y:\or\user\obst\blocks.sql: Anzeige der Größe der Extents (aus USER_EXTENTS) Anzeige der Größe aller User-Objekte (aus USER_SEGMENTS) Anzeige des freien (zusammenh.) Speicherplatzes pro Tablespace Anzeige der wirklich benutzten Blöcke einer Tabelle
) Speicherplatz-Zuordnung und -Verwaltung.3) Speicherplatz-Verwaltung create table tabname tablespace fb_dwh_users pctfree 0 pctused 99 unrecoverable storage (...) as select... PCTFREE: definiert Pufferbereich für Updates Default: 0 Block-Header für UPDATES vorbehalten INSERT-Obergrenze 00 00 - PCTFREE PCTUSED: definiert den anzustreb. Mindestfüllgrad Default: 40 Falls Füllgrad unter PCTUSED fällt, erneut für INSERTs heranziehen. PCTUSED TABLESPACE: definiert den Speicherort Default: USERS Statische Tabellen: 0 PCTFREE 0 PCTUSED 99 RECOVERABLE/UNRECOVERABLE: Soll in Redologdateien protokolliert werden?
2) Indizes 2.) Überblick create [unique] index name on tabelle(var, var2,...) [noparallel/parallel(degree integer)]; Unterstützung des Full Table Scans Suche eines Key-Wertes (auch mehrstufig) in einem B*-Baum Bei Inserts und Updates wird Index gepflegt (wird autom. 'ausbalanciert') Storage-Klausel wie bei CREATE TABLE (PCTUSED nicht!) Anzeige des Index: Tabelle ALL_IND_COLUMNS y:\or\user\obst \dwh\index.sql Beschreibung des Index: ANALYZE INDEX / VALIDATE INDEX Parallelisieren des CREATE INDEX möglich
2) Indizes 2.2) Die B*-Baum-Struktur Treepointer (max. 4 Baum 4. Ordnung) Level 0 (Root) 7 Internal Nodes / 'Index Set' Index Level 2 5 9 3 Level 2 2 P P2 3 4 P3 P4 6 7 P6 P7 8 9 P8 P9 0 P0 P 4 5 P3 P4 Leaves / 'Sequence Set' 5 P5 3 P2 P,...,P4 (Datenpointer) Mindestens zu 50% gefüllt Daten
3) Explain Plan explain plan [into schema.plan_table] for select p.*, a.qwagat_wgt_nr from q_bestell_pos p,q_angebots_einh a where p.qae_stamm_bestell_nr = a.stamm_best_nr and p.qae_vers_nr = a.vers_nr; y:\or\user\obst\plan.sql (select... from plan_table): OPERATION OPTIONS OBJECT_NAME TYPE ID PARENT_ID POSITION OPTIMIZER -------------------- ------------ -------------------- ---------- --- --------- --------- ---------- SELECT STATEMENT 0 RULE NESTED LOOPS 0 TABLE ACCESS FULL Q_BESTELL_POS 2 ANALYZED TABLE ACCESS BY ROWID Q_ANGEBOTS_EINH 3 2 ANALYZED INDEX UNIQUE QAE_PK UNIQUE 4 3 ANALYZED y:\or\user\obst\explain.sql* (...CONNECT BY PRIOR id = parent_id...): Query Plan ------------------------------------------------------------ SELECT STATEMENT Optimizer = RULE Cost = NESTED LOOPS TABLE ACCESS FULL Q_BESTELL_POS (ANALYZED) TABLE ACCESS BY ROWID Q_ANGEBOTS_EINH (ANALYZED) INDEX UNIQUE QAE_PK (ANALYZED) *) In der Script muß das Schema (hier: ZUO03C) an den jeweiligen Benutzer angepaßt werden.
4) Join-Operationen Hash-Join n 3 A Nested-Loop B 4 2 m n HASH A HASH 2 n Merge-Join A B m maximal n*m Daten-Zugriffe (mit jedem Satz aus Tabelle A, komplett durch Tabelle B - eventuell Index-unterstützt) B m Sort Sort n+m Daten-Zugriffe (Kleinere Tabelle A sortiert in Hash-Area, mit jedem Satz aus Tabelle B in der entspr. Hash-Area suchen) n+m Daten-Zugriffe Tabellen A, B sortieren (Sort_Area). Abgleich mit Satzzeiger.
5) Der Optimizer 5.) Grundlagen Rang 2 3 4 5 6 7 8 9 0 2 3 4 5 regelbasiert jeder mögliche Ausführungsplan ist mit einem Rankingwert verbunden, der minimiert wird. Zugriffspfad Single row by ROWID Single row by cluster join Single row by hash cluster key with unique or primary key Single row by unique or primary key Cluster join Hash cluster key Indexed cluster key Composite index Single-column indexes Bounded range search on indexed columns Unbounded range search on indexed columns Sort-merge join MAX or MIN of indexed columns ORDER BY on indexed columns Full table scan statistikbasiert Tabellen sollten analysiert sein ( ANALYZE) die Selektivität einer WHERE-Bed. entscheidet, dafür muß idealerweise die Werteverteilung bekannt sein (Spalten-HISTOGRAMM),,...,,,...,,,...,,2,...,20 2,...,40 95,...,000 BUCKET BUCKET 2 BUCKET 50 BUCKET 5 BUCKET 52 BUCKET 00 WHERE- PRÄDIKAT bis ORACLE 7.2 geschätzte Selektivität Spalte = 0, % INDEX Spalte = 20 0, % INDEX Spalte <=20 2 % INDEX ab ORACLE 7.3 geschätzte Selektivität Zugriffspfad Zugriffspfad ~50 % TABLE FULL < % INDEX ~5 % FULL TABLE
5) Der Optimizer 5.2) Optimizer-Hints... select /*+ optimizer-hints */... HINT RULE CHOOSE ALL_ROWS FIRST_ROWS FULL (table) INDEX (index) ORDERED USE_NL (tab,tab2...) USE_MERGE (tab,tab2,...) USE_HASH (tab,tab2,...) PARALLEL (tab,degree) NOPARALLEL tabi = Tabellen-Alias-Name! Erläuterung regelbasierter Ausführungsplan (AP) wähle zwischen regelb. und statistikb. AP statistikb. AP mit Ziel optimale Gesamtlaufzeit statistikb. AP mit Ziel schnellste Rückgabe der ersten Ergebniszeile Full Table Scan Tabellenzugriff über Index Forciert Tabellenzugriff (bei Joins) gemäß der Reihenfolge in der FROM-Klausel Verwendung von Nested-Loop-Operationen Verwendung von Sort-Merge-Join-Operationen Verwendung von Hash-Join-Operationen Spezifiziert die Parallelisierung der Abarbeitung Verhindert Parallelisierung der Abarbeitung Achtung! Bei Tippfehlern wird der gesamte Hint ignoriert!
6) Parallelisieren SELECT /*+ PARALLEL(e,degree) */ * FROM emp e ORDER BY ename; Es werden mind. degree EXTENTS angelegt! 2*degree Query-Server A-G EMP Table USER PROCESS QUERY COORDINATOR H-M N-S T-Z Nur 2 Operationen können simultan parallelisiert werden parallel-to-serial parallel-to-parallel parallel-from-serial