AgusWijiyanto

Check Index Fragmentation on Indexes in a Database Sql Serve

Nov 5th, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.20 KB | None | 0 0
  1. SELECT                                                                                                                                                         
  2.     dbschemas.[name] AS 'Schema',                                                                                                                                      
  3.     dbtables.[name] AS 'Table',                                                                                                                                    
  4.     dbindexes.[name] AS 'Index',                                                                                                                                       
  5.     indexstats.avg_fragmentation_in_percent,                                                                                                                           
  6.     CASE                                                                                                                                                           
  7.         WHEN indexstats.avg_fragmentation_in_percent<5 THEN ''                                                                                                             
  8.         WHEN indexstats.avg_fragmentation_in_percent BETWEEN 5 AND 30 THEN 'ALTER INDEX ['+dbindexes.[name]+']'+CHAR(13)+' ON '+dbschemas.[name]+'.['+dbtables.[name]+'] '+CHAR(13)+'REORGANIZE'       
  9.         WHEN indexstats.avg_fragmentation_in_percent>30 THEN 'ALTER INDEX ['+dbindexes.[name]+']'+CHAR(13)+' ON '+dbschemas.[name]+'.['+dbtables.[name]+'] '+CHAR(13)+'REBUILD'                
  10.     END AS [SQL statement],                                                                                                                                        
  11.     indexstats.page_count                                                                                                                                          
  12. FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats                                                                                            
  13.     INNER JOIN sys.tables dbtables ON dbtables.[object_id] = indexstats.[object_id]                                                                                            
  14.     INNER JOIN sys.schemas dbschemas ON dbtables.[schema_id] = dbschemas.[schema_id]                                                                                           
  15.     INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]                                                                                      
  16.                                         AND indexstats.index_id = dbindexes.index_id                                                                                                                       
  17.                                         AND indexstats.avg_fragmentation_in_percent>5  
  18.     WHERE dbindexes.[name] IS NOT NULL                                                                                                                                                         
  19.     ORDER BY indexstats.avg_fragmentation_in_percent DESC,                                                                                                                 
  20.         indexstats.page_count DESC                                                                                                                                 
  21.                                                                                                                                                                  
  22. /*---- Looping ----*/                                                                                                                                              
  23. DECLARE @TSql NVARCHAR(500)                                                                                                                                        
  24. DECLARE MyCursor CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY                                                                                                            
  25. FOR SELECT                                                                                                                                                     
  26.         CASE                                                                                                                                                       
  27.             WHEN indexstats.avg_fragmentation_in_percent<5 THEN ''                                                                                                         
  28.             WHEN indexstats.avg_fragmentation_in_percent BETWEEN 5 AND 30 THEN 'ALTER INDEX ['+dbindexes.[name]+']'+CHAR(13)+' ON '+dbschemas.[name]+'.['+dbtables.[name]+'] '+CHAR(13)+'REORGANIZE'   
  29.             WHEN indexstats.avg_fragmentation_in_percent>30 THEN 'ALTER INDEX ['+dbindexes.[name]+']'+CHAR(13)+' ON '+dbschemas.[name]+'.['+dbtables.[name]+'] '+CHAR(13)+'REBUILD'            
  30.         END AS [SQL statement]                                                                                                                                     
  31.     FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats                                                                                        
  32.         INNER JOIN sys.tables dbtables ON dbtables.[object_id] = indexstats.[object_id]                                                                                        
  33.         INNER JOIN sys.schemas dbschemas ON dbtables.[schema_id] = dbschemas.[schema_id]                                                                                           
  34.         INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]                                                                                      
  35.                                             AND indexstats.index_id = dbindexes.index_id                                                                                                                   
  36.                                             AND indexstats.avg_fragmentation_in_percent>5  
  37.         WHERE dbindexes.[name] IS NOT NULL                                                                                                             
  38.         ORDER BY indexstats.avg_fragmentation_in_percent DESC,                                                                                                             
  39.             indexstats.page_count DESC                                                                                                                                 
  40. OPEN Mycursor                                                                                                                                                      
  41. FETCH NEXT FROM MyCursor INTO @TSql                                                                                                                                
  42. WHILE @@FETCH_STATUS = 0                                                                                                                                           
  43. BEGIN                                                                                                                                                          
  44.     EXECUTE sp_executesql @TSql                                                                                                                                        
  45.     FETCH NEXT FROM MyCursor INTO @TSql                                                                                                                            
  46. END                                                                                                                                                            
  47. CLOSE MyCursor                                                                                                                                                 
  48. DEALLOCATE MYcursor
Advertisement
Add Comment
Please, Sign In to add comment