Freitag, 19. Oktober 2018

Index Fragmentierung bei Tabellen, prüfen und neu aufbauen

Lt. Microsoft ist bei einer Fragmentierung zwischen 5% und 30% ein REORGANIZE des Indexes sinnvoll und bei größer 30% ein REBUILD .

Mit diesem Script kann man die Indexe prüfen und bekommt gemäß den Schwellenwerten auch die passenden SQL Scripte dafür.

Allerdings sollte man das nicht einfach blind ausführen, da Index Aufbereitung großen Einfluss auf die Performance haben kann.

SELECT 
 TableName = OBJECT_NAME(ind.OBJECT_ID) 
,IndexName = ind.name 
,IndexType = indexstats.index_type_desc 
,Fragmentation = ROUND(indexstats.avg_fragmentation_in_percent,2)
,SqlScript = CASE 
WHEN indexstats.avg_fragmentation_in_percent > 5 AND indexstats.avg_fragmentation_in_percent < = 30 
THEN 'ALTER INDEX [' + ind.name + '] ON [' + OBJECT_SCHEMA_NAME(ind.object_id) + '].[' + OBJECT_NAME(ind.OBJECT_ID) + '] REORGANIZE'
WHEN indexstats.avg_fragmentation_in_percent > 30 
THEN 'ALTER INDEX [' + ind.name + '] ON [' + OBJECT_SCHEMA_NAME(ind.object_id) + '].[' + OBJECT_NAME(ind.OBJECT_ID) + '] REBUILD WITH (ONLINE = ON)'
ELSE NULL END 
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats
INNER JOIN sys.indexes ind
ON ind.object_id = indexstats.object_id
    AND ind.index_id = indexstats.index_id
WHERE indexstats.avg_fragmentation_in_percent > 0
ORDER BY indexstats.avg_fragmentation_in_percent DESC;


/*
avg_fragmentation_in_percent-Wert Korrigierende Anweisung
> 5 % und < = 30 % ALTER INDEX REORGANIZE
> 30% ALTER INDEX REBUILD WITH (ONLINE = ON)
*/

Keine Kommentare: