DOAG Nürnberg Oracle Index Tuning & Administration. Marco Patzwahl

Ähnliche Dokumente
Oracle Index Tuning &Admin

10 Gründe warum Ihr Index nicht verwendet wird

DOAG Index Tuning

Warum wird mein Index nicht benutzt?

Oracle Database 12c Was Sie immer schon über Indexe wissen wollten

Index Rebuild. DOAG Konferenz , Nürnberg DOAG Konferenz , Nürnberg Martin Hoermann Martin Hoermann

Index Rebuild. DOAG Konferenz , Nürnberg. Martin Hoermann

Oracle 9i Einführung. Performance Tuning. Kurs. Teil 8 Indizes. Universität Hannover. Installation. Index-Typen. Anhang.

DOAG München Die etwas anderen Oracle Performance-Tipps. Marco Patzwahl

Automatisierung von Tabellen- und Index-Reorganisationen

Inhalt. 1. Indextypen B*Baum-Index Reversed Key Index Bitmap Index Funktionsbasierter Index

Performance in der Oracle Datenbank von Anfang an

Oracle 9i Einführung Performance Tuning

Row Chaining & Row Migration Alte Bekannte - immer noch aktuell! DOAG 2014 Datenbank Dierk Lenz

Tabellen und Indizes Reorganisieren, aber wann?

Online Table Shrink. Freigabe von ungenutztem Speicherplatz. Autor: Ralf Durben, ORACLE Deutschland GmbH

DOAG Regionaltreffen TABLE REORG. Klaus Reimers. Leiter Beratung & Entwicklung, ORDIX AG, Paderborn

Donnerstag, 10. November h00, Musensaal Database. LogMiner im Einsatz. Marco Patzwahl MuniQSoft GmbH, Unterhaching b.

Übersicht der wichtigsten MySQL-Befehle

Oracle 9i Einführung Performance Tuning

Neuerungen in Marco Patzwahl MuniQSoft GmbH Unterhaching

Indizes B+Bäume in Oracle. Jörg Winkler

Copyright 2013, Oracle and/or its affiliates. All rights reserved.

Copyright 2013, Oracle and/or its affiliates. All rights reserved.

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Übung PL/SQL Trigger Lösungen

Willkommen zum DOAG Regionaltreffen

Oracle Datenbank 11g Advanced Compression Option

Sind wir eigentlich ganz dicht? - Revisited. Eero Mattila Principal Systems Consultant

DOAG ORACLE LogMiner

Johannes Ahrends Geschäftsführer CarajanDB GmbH CarajanDB GmbH

Abfragen (Queries, Subqueries)

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

DATENBANKTUNING - NEUE MÖGLICHKEITEN DURCH DIE FEATURES DER ORACLE DATABASE 12C OPTION ADVANCED COMPRESSION

Oracle 10g Einführung

Anfrageoptimierung Ausführungspläne, Hints, Statistikinformationen, IDEs

Automatisierte Datenmigration mit dynamischen SQL

SQL structured query language

Parallele Programmierung in SQL und PL/SQL. Peter Bekiesch Dierk Lenz DOAG 2011 Konferenz und Ausstellung 17. November 2011

SAP Business Information Warehouse mit Oracle Database

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

Üben von DDL und DML. Ergebnis:

ACCESS SQL ACCESS SQL

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Flashback mal sieben. DOAG Konferenz , Nürnberg. Klaus Reimers

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Tablespaces und Datendateien

Mengen- oder SET-Operatoren fassen das Ergebnis von zwei oder mehreren Teilabfragen zu einem Ergebnis zusammen.

MIN oder MAX Bildung per B*Tree Index Hint

Asynchrone Replikation Projekt oder Produkt. Lukas Grützmacher (AIS Automation Dresden GmbH)

Erzeugen von Constraints

<Insert Picture Here> Security-Basics. Privilegien, Rollen, SQL und PL/SQL - inkl. 12c-Update. Carsten Czarski, ORACLE Deutschland B.V. Co.

Speed up your Query Strategien zur Optimierung von SQL-Queries. Juni 2012 Ulrike Brenner

Datenbank und Tabelle mit SQL erstellen

Erzeugung und Veränderung von Tabellen

Oracle DB 12c: Die In-Memory-Option Oliver Zandner System-Berater für Oracle-DB-Technologien Oracle Hannover. Available July 2014

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

DOAG Konferenz Was Sie bei modernen Datenbank-Systemen anders machen müssen!

Oracle Indexing Primer

Objektorientierung unter Oracle richtet sich einerseits nach objekt-orientierten Programmiersprachen wie Java,

Indexbasiertes SQL Tuning

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

Oracle 12c: Neuerungen in PL/SQL. Roman Pyro DOAG 2014 Konferenz

Datenbank Reorganisation Sinn oder Unsinn?

Oracle Advanced Compresion 10g versus 11g

Oracle Datenbank Reorganisationen

Introduction to Data and Knowledge Engineering. 6. Übung SQL

Nested Tables Types als Ergänzung zu Pivot XML

Im Folgenden möchten wir Ihnen einige Beispiele aufzeigen, wie ALTER TABLE gemäß SQL92 verwendet wird:

Oracle Datenbank - Tuning

Geodaten und Karten in APEX

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

Datenbank Objekte (Tabellen, Segemente, Extents, Blöcke)

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

5.8 Bibliotheken für PostgreSQL

Praktische SQL-Befehle

Johannes Ahrends Geschäftsführer CarajanDB GmbH

5/14/18. Grundlagen von SQL. Grundlagen von SQL. Google, Facebook und Co. setzen auf SQL. Whatsapp

Schnellübersichten. SQL Grundlagen und Datenbankdesign

Oracle 9i Einführung. Performance Tuning. Kurs. Teil 10 Stored Outlines. Universität Hannover. Eigenschaften. Migration. Erstellen mit OEM.

Datenbanken Implementierungstechniken SS2015

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Trigger. Andreas Schmidt Trigger 1/25

Hochschule Karlsruhe Technik und Wirtschaft Fakultät für Informatik und Wirtschaftsinformatik

Views erzeugen. Datenbank - Objekte. Wozu braucht man Views? Was ist eine View?

Editions - Upgrade im laufenden Betrieb

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

C++ Anwendungskurs Tag 4: Datenbanken Daniela Horn Institut für Neuroinformatik Real-time Computer Vision

4. Objektrelationales Typsystem Kollektionstypen. Nested Table

Create-Table-Befehl. CREATE TABLE Tabellenname ( { Spalte { Datentyp Gebietsname } [ Spaltenbedingung [ ] ] Tabellenbedingung }

Powerful PL/SQL: Collections indizieren mit VARCHAR2-Indizes

SQL-Sprachvielfalt. Peter Willadt (Ludwig-Erhard-Schule) SQL-Befehle / 47

Prakt. Datenbankprogrammierung. Sommersemester Was sind Constraints? I,11: Verwendung von Constraints. Festlegung von Constraints

Partitionierung Indizes und Statistiken

Entspricht dem kartesischen Produkt von zwei oder mehr selektierten Tabellen ohne Join-Bedingung.

DOAG Regionaltreffen München 2008

DOAG Regional-Konferenz München 02/2007. Gibt es ein Leben nach der Block Corruption?

Transkript:

DOAG Nürnberg 2010 Oracle Index Tuning & Administration Marco Patzwahl

MuniQSoft GmbH Gegründet 1998 Tätigkeitsbereiche: Oracle IT Consulting & Services Oracle Schulungen (SQL, PL/SQL, DBA, APEX, B&R, ) Software-Lösungen Oracle Lizenzen MuniQSoft GmbH Grünwalder Weg 13 a D-82008 Unterhaching www.muniqsoft.de +49 89 6228 6789-0 Index Tuning 2/35

Was ist ein Index? Ein Index indiziert eine / mehrere Spalten einer Tabelle Bei Abfragen auf indizierte Spalten werden die dazu passenden Zeilen schneller gefunden Bei Inserts/Updates/Deletes auf indizierten Spalten wird die Transaktion jedoch verlangsamt! Dieser Vortrag behandelt folgende Index-Typen nicht: XML Index Context Index Spatial Index Partitionierter Index Index Tuning 3/35

Index Vorteile / Nachteile u.u. schneller Zugriff bei Select, Update und Delete Sortierungen schneller COUNT(*) schneller bei Bitmap Index oder indizierten NOT NULL Spalten Längere Verarbeitungszeit bei Insert/Update/Delete Höherer Pflegeaufwand durch Index (Ressourcenverbrauch) Index-Blöcke können Cache dicht machen (und Tabellen-Blöcke aus dem Cache vertreiben) Index Tuning 4/35

CREATE INDEX Kommando Ein Index kann auf jede beliebige Spalte einer Tabelle (Ausnahme Long und Lob) gesetzt werden Einspaltige oder mehrspaltige Indizes sind möglich Syntax: CREATE [UNIQUE] INDEX [<owner>.]<index_name> ON [<owner>.]<tab_name> (<spalten_name> [ASC DESC], <spalten_name> [ASC DESC],...) [LOGGING NOLOGGING] [ONLINE] [TABLESPACE <tablespace_name>] [COMPRESS <int> NOCOMPRESS] [NOSORT] [PARALLEL <int> NOPARALLEL] [PCTFREE <int>] [INITRANS <int>]; Index Tuning 5/35

Besonderheiten im Vergleich zur Tabelle Es gibt keinen Default Index Tablespace. Ein Index landet (ohne Angabe) im Default Tablespace des Benutzers PCTFREE hält bei Indizes den Platz für Updates und INSERTS frei! Es gibt keinen internen Update auf einen Index-Wert. Stattdessen wird der Wert gelöscht und neu eingefügt Ein Indexeintrag darf maximal 78% eines Blocks betragen sonst bekommt man den Fehler (8k Blockgröße) SQL-Fehler: ORA-01450: Maximale Schlüssellänge (6398) überschritten Maximal 32 Spalten (Bitmap Index: 30) lassen sich von einem Index erfassen Index Tuning 6/35

B-Tree Index Aufbau A:2 K:3 1 Ebene 1 (root) A:4 C:5 J:6 2 K:7 S:8 W:9 3 Ebene 2 (branch) 4 5 6 7 8 Ebene 3 (leaf) 9 ADAMS AABJHGFDSA ALLEN AABJJHTFGG CLERK AADBGHZGH CLODI AADFGHJKLK JAMES AADFGHJGFD JONES AAFGHJJKKHK KING AAFDSADFDSSD KONG AAFDDSHGFDS SMITH AAASDFKLMH STEVIE AAJHGFDSAL WARD AAAFDSATHG ZORRO AASSESSSH Aufbau in den Leaf-Blocks: Index-Wert, ROWID Index Tuning 7/35

Index Tablespace Nach Möglichkeit sollten ein oder mehrere Tablespaces dediziert für Indizes verwendet werden Vorteile: Saubere Trennung von Tabellen und Indizes Im Crashfall des Tablespace u.u. Neuaufbau der Indizes mit Skripten Bei geeigneter Hardware: Eigene Platten für Indizes (Ideal: Solid State Disks) Index Tuning 8/35

Bitmap Index Voraussetzungen: Vorteile: Enterprise oder Personal Edition Bei Tabellen mit geringer Insert und Update Aktivität auf indizierte Spalten (Data Warehouse) Bei größeren Datenmengen mit geringer Kardinalität (z. B. 80 Mio. Einwohner, Bitmap Index auf Spalte Bundesländer (16)) Schneller, wenn Abfragen aus mehreren WHERE- Bedingungen bestehen, die mit OR oder AND verknüpft sind Bei Read-Only Tabellen schneller Benötigen weniger Speicherplatz als B*Indizes, wenn Kardinalität klein (teilweise nur 2% von B*Indizes) Count Funktion ist schneller Index Tuning 9/35

Bitmap Index (f) Syntax: Nachteile: Hinweis: CREATE BITMAP INDEX [<owner>.]<index_name> ON [<owner>.]<tab_name> (<col_name> [ASC DESC], <col_name> [ASC DESC]...) [TABLESPACE <tbs_name>]; INSERT, UPDATE und DELETE dauern länger. Da beim Ändern eines Wertes alle Zeilen mit diesem Wert gesperrt werden, kann es leichter zu Deadlocks kommen Index-Werte werden komprimiert gespeichert. Bei Änderungen muss zuerst dekomprimiert, danach manipuliert, der Index-Zweig neu aufgebaut und wieder komprimiert werden NULL Werte werden indiziert Index Tuning 10/35

Bitmap Index (ff) Beispiel: CREATE TABLE bm_test AS SELECT rownum nr,decode(floor(dbms_random.value(0,4)),0, 'Nord',1,'Süd',2,'Ost',3,'West') region FROM dba_objects; -- auf 1 Mio Zeilen CREATE BITMAP INDEX bm_ind ON bm_test(region) TABLESPACE indx; EXEC dbms_stats.gather_index_stats( ownname=>'scott',indname=>'bm_ind'); SELECT blevel, leaf_blocks, distinct_keys, avg_leaf_blocks_per_key FROM DBA_INDEXES WHERE index_name='bm_ind'; => 1,170,4,42 (Bitmap Index) => 2,4440,4,1110 (Für Nonuniqe Index, >Faktor 26 ) Index Tuning 11/35

Reverse Key Index Beschreibung Vorteile: Nachteile: Beispiele: Ein Reverse Key Index indiziert die Werte rückwärts So wird z.b. aus 123 der Wert 321 Bei Primary Key Erzeugung durch Sequenzen sind Inserts schneller Verteilt die Index-Einträge auf verschiedene Index-Blöcke weniger Sperrkonflikte Vorteilhaft in einer RAC-Umgebung Keine Index Range Scans möglich CREATE INDEX "TELE"."BRD_REV_IDX" ON "TELE"."BRDP" ("PLZ") TABLESPACE "BRD_IND_TBS" REVERSE; Index Tuning 12/35

Index Only Access Hier wird die dazugehörige Tabelle nicht mehr benötigt, weil die gesuchten Daten sich alle im Index befinden CREATE TABLE person ( id NUMBER PRIMARY KEY vorname VARCHAR2(200), nachname VARCHAR2(200)); CREATE INDEX person_ix ON person(nachname); SELECT nachname FROM person WHERE nachname like 'A%' Index Tuning 13/35

Index-Tuning Index wird bei Primary Key / Unique Key automatisch verwendet Es ist günstiger, zuerst den Unique Index und dann den Constraint auf diese Spalte anzulegen CREATE TABLE t (id NUMBER); CREATE UNIQUE INDEX i ON t(id) TABLESPACE indx_tbs NOLOGGING; ALTER TABLE t ADD CONSTRAINT pk PRIMARY KEY(id); Alternativ kann wenigstens der Tablespace des Index bei Erzeugen des Constraints angegeben werden: CREATE TABLE t (id NUMBER CONSTRAINT pk PRIMARY KEY USING INDEX TABLESPACE ts_idx); Index Tuning 14/35

Index Tuning durch Selektion Sie können entscheiden, welche Werte alleinig indiziert werden sollen. Nur nach diesen Werten kann dann natürlich gesucht werden Beispiel: Nur Münchner Telefonnummern sollen indiziert werden: CREATE INDEX marco.brd_tel_ix ON marco.brd( CASE WHEN vorwahl='089' THEN vorwahl ELSE NULL END); Originalgröße des Index (ohne Selektion): 2GB Größe des Index (mit Selektion): 16MB SELECT dazu (der den Index dann auch benutzt ): SELECT * FROM marco.brd WHERE (CASE WHEN vorwahl='089' THEN vorwahl ELSE NULL END)='089' Index Tuning 15/35

COMPRESS Option Mit der COMPRESS Option können führende Index- Spalten, die viele gleiche Werte besitzen, platzsparend im Index untergebracht werden CREATE INDEX scott.i ON scott.emp(deptno,job) COMPRESS 2; Sie können vom bestehenden Index eine Analyse erzeugen, um zu sehen, wie viel Prozent ein COMPRESS einsparen würde ANALYZE INDEX scott.i VALIDATE STRUCTURE; SELECT opt_cmpr_count,opt_cmpr_pctsave FROM index_stats; Index Tuning 16/35

Nutzen der Key Compression Hier werden gleiche Index-Einträge komprimiert. CREATE TABLE t (x VARCHAR2(100),y VARCHAR2(100)); INSERT INTO t SELECT object_type,status FROM dba_objects; CREATE INDEX i ON t(x,y) COMPRESS 2; Folgende Indizes wurden erzeugt: i(x,y) i(x)+i(y) i(x,y) compress 2 i(x,y) compress 1 100 Leaf Blocks 77+66 = 143 Leaf Blocks 43 Leaf Blocks 67 Leaf Blocks Index Tuning 17/35

ONLINE Option (nur EE, PE) Wird der Index mit der ONLINE Option angelegt, kann während der Index-Erstellung auf der dazugehörigen Tabelle (schreibend) weitergearbeitet werden Auch bei einem Index Rebuild kann mit der ONLINE Option die Tabelle parallel verändert werden Hinweis: ONLINE Option steht nur in der Enterprise Edition zur Verfügung Index Tuning 18/35

NOLOGGING Option Durch NOLOGGING wird beim Aufbau bzw. Reorg des Index VIEL weniger in den Redolog-Dateien gespeichert Vorteil Nachteil Schnelle Durchführung des Befehls Bis zum nächsten Backup des Index-Tablespace kann der Index bei einem Crash mit Hilfe der Redologs nicht mehr aufgebaut werden (eigene Skripten notwendig) Index Tuning 19/35

Index Größe abschätzen Mit folgendem Skript lässt sich die Größe (hier in MB) abschätzen, die ein Index bei einer Erstellung benötigen würde Hinweis: Compress wird bei Indexberechnung nicht berücksichtigt DECLARE ub NUMBER; ab NUMBER; s CLOB; BEGIN s:='create INDEX x.x ON scott.bug ("TEXTID", "LOAD", "GEO") PCTFREE 30 TABLESPACE USERS'; dbms_space.create_index_cost(s, ub, ab); dbms_output.put_line('used MB: ' round(ub/1024/1024,2); dbms_output.put_line('alloc MB:' round(ab/1024/1024,2); END; / Index Tuning 20/35

Index Reorg Der Platz in den Index-Blöcken wird nach einem Delete u.u. nicht mehr verwendet Indizes wachsen nach vielen Deletes und anschließenden Inserts stark an und sollten häufiger reorganisiert werden ANALYZE INDEX <owner>.<indx> VALIDATE STRUCTURE; SELECT name, del_lf_rows, lf_rows - del_lf_rows lf_rows_used, to_char(del_lf_rows / (lf_rows)*100,'999.99999') ratio, OPT_CMPR_COUNT,OPT_CMPR_PCTSAVE FROM index_stats where name = upper('<indx>'); Wenn die Anzahl der gelöschten Zeilen 10 15 % beträgt, sollte der Index reorganisiert werden (Metalink Note 30405.1): ALTER INDEX <owner>.<indx> REBUILD ONLINE; Index Tuning 21/35

Index Reorg Eine andere Möglichkeit ist, das Package dbms_space anzuwenden Das Package kann die Freelist der Index-Blöcke auslesen und damit ihren Füllpegel in den folgenden Bereichen bestimmen: <25% <=50% <=75% <=100% Pipelined Funktion Skript beim Referenten erhältlich Index Tuning 22/35

Index Reorg Möglichkeiten während der Reorganisation eines Index: ALTER INDEX <owner>.<ind> REBUILD ONLINE PCTFREE 0 COMPUTE STATISTICS COMPRESS 2 TABLESPACE USERS NOLOGGING Bemerkung ONLINE nur bei Enterprise Edition oder PE! Wenn keine vergrößernden Updates oder Inserts!!! in der Tabelle mehr stattfinden = 0! Index-Segment Statistiken gleich mitberechnen (aber mittels ANALYZE INDEX => Desupported) Anzahl der führenden Spalten (hier 2 Spalten), die komprimiert werden sollen Index kann bei Reorg auch auf einen anderen TBS verschoben werden Mitprotokollieren des Reorgs in Redologs verhindern Index Tuning 23/35

Rebuild versus Drop & Create Ein Rebuild kann einen bestehenden SORTIERTEN Index klonen Ein Drop Index & Create Index muss den Index komplett neu sortieren REBUILD DROP & CREATE 1. Test 2m30s 3m39s 2. Test 2m22s 3m26s 3. Test 2m26s 3m30s Index Tuning 24/35

Index Statistiken Sie sollten Index Statistiken nur mit dem Package DBMS_STATS (.GATHER_INDEX_STATS,.GATHER_SCHEMA_STATS oder.gather_database_stats) erzeugen Die folgenden Aufrufe werden nicht mehr empfohlen: ANALYZE INDEX idx COMPUTE STATISTICS; ANALYZE INDEX idx ESTIMATE STATISTICS ; CREATE INDEX idx COMPUTE STATISTICS; ALTER INDEX idx REBUILD COMPUTE STATISTICS; Bereits seit 10g werden Statistiken bei einem CREATE INDEX oder ALTER INDEX Befehl automatisch erzeugt! Index Tuning 25/35

Index Online Segment Shrink (ab 10g) Kann durch den Segment Advisor überprüft werden Text 2 Segment Header Text 3 Text 4 Text 6 Text 9 Text 1 Text 5 Text 7 Text 8 Text 10 High Water Mark Free Space ALTER INDEX scott.i SHRINK SPACE CASCADE; Segment Header Text 1 Text 9 Text 10 Text 8 Text 2 Text 3 Text 4 Text 5 Text 6 Text 7 Free Space Index Tuning 26/35

Nachteile der Index Reorg Index ist "perfekt" ausbalanciert, weist aber keine Lücken für neue Einträge auf Neue Spaltenwerte führen zu einem Index Block Split 50/50 Block Split (die Hälfte der Einträge des "alten" Blocks werden in den "neuen" Block kopiert) 90/10 (bzw. 99/1) Block Split (wenn der höchste Wert im Index überschritten wurde) 4 ADAMS AABJH ALLEN AABJJ AMBER AABJJ BERTA AABJJ 5 COLLINS AADB COSTA AADB CLERK AADB.. CLODI AADFG 9 ZAPPA AABJK ZEBRA AABJH ZEPPA AABJJ ZIPPER AABJK 4 ADAMS AABJH ALLEN AABJJ 6 AMBER AABJJ BERTA AABJJ BONZO AABJK 5 COLLINS AADB COSTA AADB CLERK AADB.. CLODI AADFG 9 ZAPPA AABJK ZEBRA AABJH ZEPPA AABJJ ZIPPER AABJK ZORRO AABJH 10 Index Tuning 27/35

Index-Tuning Gedrehte Indizes versuchen die Reihenfolge der indizierten Spalten (c1,c2,c3) zu ändern. Statt c1, c2, c3 c3,c2,c1) CREATE INDEX i ON t (c1,c2,c3) COMPRESS 2; CREATE INDEX i ON t (c3,c2,c1) COMPRESS 2; Achten Sie jedoch darauf, dass nur nach bestimmten Spalten gesucht werden kann Ausnahme: Index Skip Scan (hier werden führende Index-Spalten übersprungen) Bei geringer Kardinalität den Bitmap Index verwenden CREATE BITMAP INDEX i Index Tuning 28/35

Index Hints (Auswahl) Positiv Hint Negativ Hint Beschreibung INDEX NO_INDEX Index soll (nicht) verwendet werden INDEX_ASC NO_INDEX Index soll aufsteigend verwendet werden INDEX_DESC NO_INDEX Index soll absteigend verwendet werden INDEX_FFS NO_INDEX_FFS Fast Full Scan für Index (nicht) durchführen INDEX_SS NO_INDEX_SS Index Skip Scan (nicht) durchführen INDEX_SS_ASC NO_INDEX_SS Index Skip Scan aufsteigend (nicht) durchführen INDEX_SS_DESC NO_INDEX_SS Index Skip Scan absteigend (nicht) durchführen INDEX_COMBINE INDEX_JOIN Mehrere Indizes in Kombination verwenden Zwei Indizes miteinander Joinen, Verknüpfungsspalte ist die ROWID PARALLEL_INDEX NO_PARALLEL_INDEX Indexabfrage (nicht) parallel durchführen INDEX_RRS Parallel Index Fast Full Scan (undokumentiert) Index Tuning 6-29

Indexübersicht incl. möglicher Optionen Indextyp Funktionalität Null Werte indizierbar? B-Tree Unique Index B-Tree Non- Unique Index Bitmap Index Function Based Index Nein Nein Ja Nein Nein Komprimierbar? Ja Ja Nein Ja Ja Nologging? Ja Ja Ja Ja Ja Parallel? Ja Ja Ja Ja Ja Online Reorg? Ja Ja Ja Ja Ja Blocksperren Nein Nein Ja Nein Nein Reverse Key Index Index Tuning 30/35

Performance Messung: CREATE INDEX NOARCHIVELOG Non Unique (528 MB) Unique (3 Spalten, 928 MB) Bitmap (104 MB) Function based NORMAL 2m50s 4m22s 1m25s 2m24s NOLOGGING 2m30s 4m23s 1m27s 2m29s COMPRESS 2m36s 4m35s na 2m31s PARALLEL 4 2m18s 2m52s 1m14s 2m13s ONLINE 2m50s 4m39s 1m8s 2m34s ARCHIVELOG NORMAL 4m12s 5m46s 1m46s 3m09s NOLOGGING 2m46s 4m18s 1m29s 2m22s COMPRESS 3m20s 6m29s na 2m47s PARALLEL 4 4m04s 4m34s 1m30s 3m13s ONLINE 3m45s 6m11s 1m24s 3m26s Oracle 11.2.0.1 auf Red Hat 5,CPU: 4, MEMORY_TARGET=1G, Tab-Größe: 2GB (27 Mio Zeilen) STARTUP FORCE nach jeder Messung. Mittelwert aus 5 Messungen Index Tuning 31/35

DML Operationen mit Index NOARCHIVELOG UPDATE/ Rollback DELETE/ Rollback INSERT/ Rollback Ohne Index 03,20s / 3,10s 03,72s / 2,49s 02,55s / 1,33s NORMAL 11,03s / 5,66s 12,11s / 35,2s 43,00s / 1,51s NOLOGGING 12,56s / 5,70s 11,78s / 39,8s 42,17s / 1,47s COMPRESS 10,05s / 4,96s 11,41s / 45,55s 40,86s / 1,53s PARALLEL 4 09,58s / 5,68s 11,34s / 44,64s 41,39s / 1,59s ONLINE 09,64s / 5,34s 12,00s / 39,35s 41,56s / 1,44s ARCHIVELOG UPDATE/ Rollback DELETE/ Rollback INSERT/ Rollback Ohne Index 02,2s / 02,21s 03,58s / 02,96s 02,27s / 1,52s NORMAL 09,7s / 06,13s 15,07s / 34,42s 45,76s / 1,54s NOLOGGING 17,40s / 6,85s 14,67s / 35,05s 42,22s / 1,56s COMPRESS 9,30s / 4,30s 14,05s / 36,78s 61,18s / 1,79s PARALLEL 4 11,67s / 5,25s 14,55s / 34,73s 50,07s / 1,47s ONLINE 6,22s / 4,34s 14,32s / 36,40s 44,01s / 1,53s DML Operation war auf 100.000 Zeilen beschränkt Index Tuning 32/35

DML beschleunigen Wenn Sie fast die ganze (sehr große) Tabelle mit einem Update (auf die Index-Spalte) beglücken (bzw. mit einem Multi-Row Insert die Tabelle füllen), ist meist folgendes Verfahren günstiger: DROP INDEX scott.big_ix; UPDATE scott.big SET sal=sal+1; --INSERT /*+ APPEND */ INTO scott.big --SELECT * FROM tab; --DELETE FROM scott.big WHERE deptno=10; CREATE INDEX scott.big_ix ON scott.big_emp(sal) NOLOGGING ; Index Tuning 33/35

Fazit NOLOGGING beschleunigt die Index-Erstellung, birgt aber Gefahren Parallelisierung bringt nicht zwingend etwas COMPRESS kostet bei der Erstellung sogar weniger Zeit und man erhält einen schlanken Index ONLINE (nur in der EE) kostet keine zusätzliche Zeit, die Tabelle ist aber bereits während der Indexerstellung verfügbar Update und Delete sind ca. Faktor 4 langsamer. Ein Insert ist Faktor 14 langsamer!!! Index Tuning 34/35

MuniQSoft GmbH Gegründet 1998 Tätigkeitsbereiche: Oracle IT Consulting & Services Oracle Schulungen (SQL, PL/SQL, DBA, APEX, B&R, ) Software-Lösungen Oracle Lizenzen MuniQSoft GmbH Grünwalder Weg 13 a D-82008 Unterhaching www.muniqsoft.de +49 89 6228 6789-0 Index Tuning 35/35