Zu Oracle

Bereich:
Versionsinfo:
DBA
getestet mit 10.2 und 11.1
Erstellung:
Letzte Überarbeitung:
11/2003 HA
05/2009 RM
 Als PDF Downloaden!

Identifizierung ungenutzter Indices

Ungenutzte Indices bedeuten unnötigen Verwaltungsaufwand und Platzverbrauch, deshalb ist es sinnvoll, sie zu löschen. Voraussetzung ist allerdings herauszufinden, welche Indices genutzt werden und welche nicht. Ab Version 9.0 ist dies relativ einfach möglich mit der Erweiterung des ALTER INDEX-Befehls:

  • ALTER INDEX MONITORING USAGE;
  • ALTER INDEX NOMONITORING USAGE;

und der neuen DD-View

  • V$OBJECT_USAGE

In V$OBJECT_USAGE werden Indices eingetragen, deren Nutzung überwacht wird oder wurde; in der Spalte MONITORING wird angezeigt, ob der Index zur Zeit überwacht wird, und die Spalte USED gibt an, ob der Index seit dem (letzten) Einschalten der Überwachung genutzt wurde.
Mit der Option  MONITORING USAGE wird die Überwachung der Nutzung eingeschaltet, mit NOMONITORING USAGE ausgeschaltet.

Beispiel:

Die im folgenden benutzte Ausgangstabelle BIGEMP ist eine Vervielfältigung der Daten aus SCOTT.EMP. Die Ausgabe der Spalten index_name und table_name wurde auf je 12 Zeichen formatiert.

ALTER TABLE bigemp ADD(nr NUMBER);
UPDATE bigemp SET nr = ROWNUM;
COMMIT;
ALTER TABLE bigemp
ADD CONSTRAINT pk_bigemp PRIMARY KEY(nr);
CREATE INDEX idx_empno ON bigemp(empno);
                  
SQL> SELECT * FROM V$OBJECT_USAGE;

Es wurden keine Zeilen ausgewählt

ALTER INDEX pk_bigemp MONITORING USAGE;
ALTER INDEX idx_empno MONITORING USAGE;

SQL> SELECT * FROM V$OBJECT_USAGE;

INDEX_NAME   TABLE_NAME   MON USE START_MONITORING    END_MONITORING
------------ ------------ --- --- ------------------- -------------------
IDX_EMPNO    BIGEMP       YES NO  10/13/2003 12:10:00
PK_BIGEMP    BIGEMP       YES NO  10/13/2003 12:08:11
SELECT * FROM bigemp WHERE nr = 7; (Ausgabe weggelassen)
SQL> SELECT * FROM V$OBJECT_USAGE;

INDEX_NAME   TABLE_NAME   MON USE START_MONITORING    END_MONITORING
------------ ------------ --- --- ------------------- -------------------
IDX_EMPNO    BIGEMP       YES NO  10/13/2003 12:10:00
PK_BIGEMP    BIGEMP       YES YES 10/13/2003 12:08:11
ALTER INDEX IDX_EMPNO NOMONITORING USAGE;
ALTER INDEX PK_BIGEMP NOMONITORING USAGE;

SQL> SELECT * FROM V$OBJECT_USAGE;

INDEX_NAME   TABLE_NAME   MON USE START_MONITORING    END_MONITORING
------------ ------------ --- --- ------------------- -------------------
IDX_EMPNO    BIGEMP       NO  NO  10/13/2003 12:10:00 10/13/2003 12:13:00
PK_BIGEMP    BIGEMP       NO  YES 10/13/2003 12:08:11 10/13/2003 12:13:21

Soll beispielsweise  eine Applikation auf ungenutzte Indices hin überprüft werden, so bietet sich an, mit Hilfe eines Skripts für alle Indices die Überwachung einzuschalten, dann in einem repräsentativen Zeitraum und Umfang die Applikation zu nutzen und dann das Monitoring über ein weiteres Skript wieder auszuschalten. Die entsprechenden Skripten werden am einfachsten über Spool-Dateien erzeugt.

Beispiel:

SET FEEDBACK OFF HEADING OFF ECHO OFF
SET PAGESIZE 0
SPOOL monitoring_ein.sql
SELECT 'ALTER INDEX ' ||owner||'.'||index_name||' MONITORING USAGE;'
FROM ALL_INDEXES WHERE owner = 'SCOTT';
SPOOL OFF
@monitoring_ein.sql

Arbeiten in der Datenbank...

SPOOL monitoring_aus.sql
SELECT 'ALTER INDEX ' ||owner||'.'||index_name||' NOMONITORING USAGE;'
FROM ALL_INDEXES WHERE owner = 'SCOTT';
SPOOL OFF
@monitoring_aus
SELECT index_name FROM v$object_usage WHERE used = 'NO';
INDEX_NAME
------------
IDX_EMPNO

Suche

Kontakt

Telefon:
  089 6228 6789-0

Telefon (noch gültig):
  089 679090-40

E-Mail Verteiler Monatstipps

Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.