Muniqsoft Training

Auswahl  

Oracle Indexüberwachung 

Oracle
DBA:SQL
RDBMS 12.x
12.12.18 (MP)
12.12.18 (MP)
DBA , SQL

Body

Eigentlich bin ich ja ein großer Oracle Fan. Aber manchmal ärgere ich mich auch über Unzulänglichkeiten der Software. Man kann zwar einen Index danach überwachen, ob er verwendet wird, aber nicht, wie oft. Das ist so, als wenn der Tacho eines Autos nicht die Tageskilometer anzeigen würde, sondern nur "Auto wurde bewegt". Das zweite Problem ist, dass bei einer Überwachung eines Index nur der Inhaber des Index sieht, ob er verwendet worden ist oder nicht. Dem Administrator fehlt diese Möglichkeit der Überprüfung. Das ist doch Anarchie :-)

Nun, Problem bekannt, Problem gebannt. Das folgende Skript ist auf den Benutzer SCOTT abgestimmt und legt für ihn eine Tabelle und eine Procedure an. Sie können natürlich gerne auch einen anderen Benutzer verwenden (z.B. SYSTEM).

Die Idee ist folgende:

Die Datenbank zeichnet in der View v$object_usage auf, ob ein Index benutzt worden ist:

Beispiel:

connect scott/tiger

ALTER INDEX scott.pk_emp MONITORING USAGE;

SELECT * FROM scott.emp WHERE empno=7369;

SELECT index_name,used FROM v$object_usage;

INDEX_NAME                     USED
------------------------------ ----
PK_EMP                         YES
 

Wir prüfen also in einem bestimmten Zeitintervall, ob der Index benutzt worden ist. Wenn ja, dann zählen wir einen Zähler (Tabelle scott.index_usage_count Spalte count_usage) um eins hoch. Dann schalten wir die Indexüberwachung aus und wieder ein. Nach einer gewissen Zeitspanne wiederholt sich der Vorgang. Je kleiner Sie das Intervall setzen, desto genauer ist das Ergebnis. Auf jeden Fall ist es genauer als die Angabe benutzt/nicht benutzt. :-)

Auf der anderen Seite steigt mit der Verkleinerung des Intervalls die CPU-Last.

Insofern sollte man sich für den goldenen Mittelweg entscheiden (wir verwenden bei uns 15 Minuten).

Noch ein paar Anmerkungen:

Die Procedure schaltet nicht die Indexüberwachung ein, sondern überwacht sie nur.

Wenn Sie die Indexüberwachung für ein komplettes Schema (z.B. SCOTT) einschalten wollen, gehen Sie bitte wie folgt vor:

SPOOL c:\temp\index_monitoring.sql
SELECT 'ALTER INDEX '||owner||'.'||index_name||' MONITORING USAGE;'
FROM dba_indexes
WHERE owner='SCOTT';
SPOOL OFF
@c:\temp\index_monitoring.sql
 

So, und nun viel Spaß bei der Indexüberwachung. Wenn Sie noch mehr tolle Tricks erfahren wollen, dann kommen Sie doch z.B. in einen unserer Opens internal link in current windowKurse über DB Monitoring, Tabellen/Index-Administration oder DB Tuning. :-) 

Aber alle anderen Kurse bei uns kann man natürlich auch empfehlen...


Noch ein paar Anmerkungen:

Die Procedure schaltet nicht die Indexüberwachung ein, sondern überwacht sie nur.

Wenn Sie die Indexüberwachung für ein komplettes Schema (z.B. SCOTT) einschalten wollen, gehen Sie
bitte wie folgt vor:

SPOOL c:\temp\index_monitoring.sql
SELECT 'ALTER INDEX '||owner||'.'||index_name||' MONITORING USAGE;'
FROM dba_indexes
WHERE owner='SCOTT';
SPOOL OFF
@c:\temp\index_monitoring.sql

So, und nun viel Spaß bei der Indexüberwachung. Wenn Sie noch mehr tolle Tricks erfahren wollen, dann kommen Sie doch z.B. in einen unserer Kurse über DB Monitoring, Tabellen/Index-Administration oder DB Tuning. :-)
Aber alle anderen Kurse bei uns kann man natürlich auch empfehlen...

Besuchen Sie uns doch bei einer unsere über 40 Oracle Schulungen in München - Unterhaching.