News zu Oracle

DBA Tipp: Index-Mo­­ni­­to­ring – Aufspüren und Droppen von un­ge­nutz­ten Indizes in Datenbanken

In komplexen Da­ten­bank­sys­te­men exis­tie­ren häufig eine Vielzahl von Indizes. Teilweise nehmen sie mehr Platz in Anspruch als die ei­gent­lich in­di­zier­ten Daten selbst. Indizes müssen bei jeder DML-Operation ak­tua­li­siert werden, belegen Platz im Buffer Cache, auf dem Storage der Datenbank und letzt­end­lich auch im Backup. Daher ist es durchaus ratsam, sie von Zeit zu Zeit auf ihre Da­seins­be­rech­ti­gung hin zu prüfen. Denn un­ge­nutz­te Indizes bringen faktisch nur Nachteile mit sich. 

Für dieses In­dex­mo­ni­to­ring kannst du als DBA auf den Befehl “alter index … mo­ni­to­ring usage” zu­rück­grei­fen. Ein mit “mo­ni­to­ring” mar­kier­ter Index erscheint daraufhin in der v$object_usage View des Indexowners:

[oracle@dr-02(db19c orcl2) ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Mar 23 18:02:31 2023
Version 19.10.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.10.0.0.0


SQL> ALTER INDEX HR.EMP_DEPARTMENT_IX MONITORING USAGE;

Index altered.

SQL> connect hr/hr
Connected.
SQL> select * from v$object_usage;

INDEX_NAME                TABLE_NAME           MON USE START_MONITORING    
------------------------- -------------------- --- --- -------------------
EMP_DEPARTMENT_IX         EMPLOYEES            YES NO  02/01/2023 12:00:20
Die Spalte MON(ITORING) zeigt an, dass der Index EMP_DEPARTMENT_IX ge­mo­nit­ort wird, ent­spre­chend der In­for­ma­ti­on in USE(D) al­ler­dings bislang noch nicht verwendet wurde. Greift nun eine Abfrage auf den Index zu, ändert sich das USED-Flag entsprechend: 
SQL> select last_name from employees where department_id=110;

LAST_NAME
-------------------------
Higgins
Gietz

SQL> select * from v$object_usage;

INDEX_NAME            TABLE_NAME           MON USE START_MONITORING   
--------------------- -------------------- --- --- -------------------
EMP_DEPARTMENT_IX     EMPLOYEES            YES YES 02/01/2023 12:00:20

Lässt du das In­dex­mo­ni­to­ring nun über einen re­prä­sen­ta­ti­ven Zeitraum laufen, erhältst du ein gutes Gefühl dafür, welche Indizes wahr­schein­lich ohne Nutzen für die Datenbank sind und gedroppt werden können. Das Mo­ni­to­ring übersteht im Übrigen auch den Neustart der Datenbank. Es muss also am Ende des ge­wünsch­ten Mo­ni­to­ring­zeit­rau­mes explizit wieder ab­ge­schal­tet werden:

SQL> ALTER INDEX HR.EMP_DEPARTMENT_IX NOMONITORING USAGE;

Index altered.

SQL> select * from v$object_usage;

INDEX_NAME            TABLE_NAME           MON USE START_MONITORING    END_MONITORING
--------------------- -------------------- --- --- ------------------- -------------------
EMP_DEPARTMENT_IX     EMPLOYEES            NO  YES 02/01/2023 12:00:20 02/01/2023 12:08:08

Das USED-Flag wird zu­rück­ge­setzt, wenn das Mo­ni­to­ring für den be­tref­fen­den Index wieder aktiviert wird. Es gibt al­ter­na­tiv zum so­for­ti­gen Löschen (ver­meint­lich) un­ge­nutz­ter Indizes noch die charmante Al­ter­na­ti­ve einer Ka­renz­zeit mit Nutzung des “alter index … invisible”. Damit wird der be­tref­fen­de Index für den Optimizer “un­sicht­bar” und damit nicht mehr genutzt. Der Index selbst wird al­ler­dings weiterhin aktuell gehalten. Zeigt die Praxis, dass der Index tat­säch­lich noch er­for­der­lich ist, kann er mittels “alter index … visible” sofort wieder aktiviert werden, ohne dass du ihn neu aufbauen musst. Das Löschen eines Index dagegen sollte wohl überlegt sein, da seine Wie­der­her­stel­lung im Falle großer Indizes oder auf stark fre­quen­tier­ten Tabellen in der Standard Edition nur schwer im laufenden Betrieb und in der En­ter­pri­se Edition (alter index … rebuild online) nur mit er­heb­li­chen Per­for­man­ce­ein­bu­ßen erfolgen kann.

Fazit

Indizes sind für die Le­se­per­for­mance einer Datenbank elementar wichtig. Da ihre Haltung und Pflege auf der anderen Seite aber auch einen nen­nens­wer­ten Aufwand generiert, gilt beim Einsatz von Indizes der Grundsatz: So viel wie nötig, so wenig wie möglich. Diesem Ziel kann man mit Index-Mo­ni­to­ring ein gutes Stück näher kommen.

Hier findest du weitere in­ter­es­san­te Posts zum Thema Oracle aus unserem News und Insights Bereich.

icon-arrow_right_medium-violet-blue.svg

Share this article

Facebook 
Twitter 
LinkedIn 
XING 
WhatsApp 
Email