Fragmentierungsgrad in einer SQL Server Datenbank feststellen

Hier zwei Abfragen mit der man schnell und einfach den Grad der Fragmentierung für Objekte in einer SQL Server Datenbank angezeigt bekommt:

SELECT 
       OBJECT_NAME(ind.OBJECT_ID) AS TableName
     , ind.name AS IndexName
     , indexstats.index_type_desc AS IndexType
     , indexstats.avg_fragmentation_in_percent 
  
  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 > 30 
 
 ORDER BY indexstats.avg_fragmentation_in_percent DESC
SELECT 
       dbschemas.[name] as 'Schema'
     , dbtables.[name] as 'Table'
     , dbindexes.[name] as 'Index'
     , indexstats.alloc_unit_type_desc
     , indexstats.avg_fragmentation_in_percent
     , indexstats.page_count

  FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
 INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
 INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
 INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
                                    AND indexstats.index_id = dbindexes.index_id
WHERE indexstats.database_id = DB_ID()
ORDER BY indexstats.avg_fragmentation_in_percent desc

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.