DMV: Index Usage
Mai
9
Written by:
09.05.2009 07:07
DMV: Index Usage
Eine der guten Neuerungen im MS SQL 2005 (ja, ich weiß, es gibt schon den 2008 … wir hinken etwas hinterher ), sind die DMV = Dynamic Management Views (Dynamische Verwaltungssichten), die im Schema sys jeder Datenbank liegen.
Sie erlauben einen, Statusinformation des Servers abzurufen und so auch frühzeitig Probleme und Schwachstellen zu erkennen.
Nach der Migration auf SQL2005 beobachte ich als erstes die Ergebnisse aus dem DMV zu den Indexstatistiken. Wie ich hier selektiere und vorgehen, will ich ab und an hier mal vorstellen.
Die erste DMV ist sys.dm_db_index_usage_stats, hier wird vermerkt, welcher Index wie häufig verwendet wurde.
Hier mal mein SQL Statement zur Selektion:
SELECT SCH.name as SchemaName, OBJ.name AS TableName,
IDX.name AS IndexName, IDX.type_desc AS IndexType,
IUS.user_scans, IUS.last_user_scan,
IUS.user_seeks, IUS.last_user_seek,
IUS.system_scans, IUS.last_system_scan,
IUS.system_seeks, IUS.last_system_seek
FROM sys.dm_db_index_usage_stats AS IUS
INNER JOIN sys.indexes AS IDX
ON IUS.index_id = IDX.index_id
AND IUS.object_id = IDX.object_id
INNER JOIN sys.objects AS OBJ
ON IDX.object_id = OBJ.object_id
INNER JOIN sys.schemas AS SCH
ON OBJ.schema_id = SCH.schema_id
WHERE IUS.database_id = DB_ID() -- Nur aktuelle DB betrachten
AND IDX.type > 0 -- Keine Heaps
AND OBJ.type = 'U' -- Nur Userobjekte
AND (IUS.user_scans + IUS.user_seeks
+ IUS.system_scans + IUS.system_seeks) > 0
-- Min. einmal verwendet
ORDER BY (IUS.user_scans + IUS.user_seeks
+ IUS.system_scans + IUS.system_seeks) DESC,
IUS.last_user_scan DESC, IUS.last_user_seek DESC
Im Umkehrschluss gilt übrigens, dass Indizes, die nicht in der Statistik erscheinen, nicht verwendet werden und somit im Laufe der Zeit weg können; sie verringern nur den Schreibzugriff.
Dazu später mehr.
Übrigens, um das Script ausführen zu dürfen, braucht man min. die Berechtigung VIEW SERVER STATE.
(DMV: Index Usage)