Samstag, September 19, 2015

Überflüssige Indizes anhand von Statistiken erkennen

Bereits vor einigen Wochen hat Jonathan Lewis einen Beitrag veröffentlicht, in dem er zeigt, wie man anhand der Statistiken in v$segstat (bzw. v$segment_statistics) bestimmen kann, ob die Lesezugriffe für einen Index nur für dessen Maintenance erforderlich, oder ob auch Zugriffe über den Index erfolgt sind. Ganz grob gilt dabei, dass ein Index mit blevel = 2 dann vermutlich nicht für Zugriffe verwendet wird, wenn die Anzahl der db block changes etwa ein Drittel der logical reads beträgt. Natürlich weist der Herr Lewis explizit darauf hin, dass sich auf der Basis dieser Beobachtung keine exakten Aussagen treffen lassen - man kann nur Kandidaten ausfindig machen, die dann genauer zu untersuchen wären. Außerdem werden die Zahlen massiv fragwürdig, wenn ein Commit im Test ergänzt wird: aber dadurch ergeben sich keine false positives in der Richtung, dass ein für Zugriffe verwendeter Index als Lösch-Kandidat vorgeschlagen werden würde. Insgesamt ist das Verfahren insofern cum grano salis zu nehmen, aber trotzdem ein interessanter Ansatz, der insbesondere in unübersichtlichen Landschaften mit vielen "historisch begründeten" Indizes einen Einstieg liefern kann. Natürlich umfasst der Artikel ein umfangreiches Beispiel, das ich hier (wie üblich) nicht wiedergebe.

Keine Kommentare:

Kommentar veröffentlichen