fredag 1 juli 2011

Underhåll av index

Senaste tiden har jag suttit en hel del med underhåll, övervakning och komprimering av index. Jag upptäckte i en miljö att det fanns ett helt gäng index som enligt statistics aldrig hade använts. Att på ett snabbt sätt få reda på hur frekvent index används finns en jättebra standardrapport som man enkelt kör via Standard Reports i Management Studion. Dessvärre får man där inget grepp på hur stora respektive index är.

Något jag var intresserad var hur mycket utrymme jag skulle spara om jag tog bort de index som aldrig hade använts.

För att få reda på det behövde jag joina lite olika tabeller.

För att det är fredag delar jag helt gratis med mig av skriptet.

select
o.name as [Tabel_name],
i.name as [Index_name],
8 * SUM(a.used_pages) as Index_size
FROM sys.indexes i
JOIN sys.objects o ON i.object_id = o.object_id
LEFT OUTER JOIN sys.partitions p ON p.object_id = i.object_id and p.index_id = i.index_id
LEFT OUTER JOIN sys.allocation_units a ON a.container_id = p.partition_id
LEFT OUTER JOIN sys.dm_db_index_usage_stats s ON i.object_id = s.object_id and i.index_id = s.index_id
Where
-- Bara index i "användartabeller"
o.[type] = 'u'
-- Clustered och Non-Clustered index
AND i.[type] IN (1,2)
-- Indexes utan statistik
AND (s.index_id IS NULL)
-- Indexes som blivit uppdaterade men inte använda
OR (s.user_seeks = 0 AND s.user_scans = 0 AND s.user_lookups = 0 )
Group by o.name,i.name

Inga kommentarer:

Skicka en kommentar