Aşağıdaki sorgu sayesinde fragmentation oranı %5 üzerinde olan tüm indexleri otomatik olarak reorganize edebilir, isterseniz bunu bir sql job sayesinde her gece çalışacak şekilde ayarlayarak index bakım işlemini SQL Server Agent'a bırakabilirsiniz.

Normal şartlarda fragmentation oranı %30 un üzerinde olan indexleri rebuild etmeniz daha sağlıklı olacaktır ancak rebuild işlemi sırasında yeni disk alanına ihtiyaç duyacağınız için rebuild yapmadan önce disk alanını kontrol etmenizde fayda var. Ben rebuild işlemini otomatik olarak yapacağım derseniz ise; aşağıda yer alan sorguda REORGANIZE yerine REBUILD yazmanız yeterli olacaktır...

SELECT      ROW_NUMBER() OVER(ORDER BY ps.avg_fragmentation_in_percent DESC) AS SiraNo,

            OBJECT_NAME(ps.object_id) as ObjectName,

            i.name as IndexName,

            ps.avg_fragmentation_in_percent,

            'ALTER INDEX '+i.name+' ON '+OBJECT_NAME(ps.object_id)+' REORGANIZE;' AS Query

INTO        #tmpIndex

FROM        sys.dm_db_index_physical_stats (DB_ID(),NULL,NULL,NULL,'LIMITED') ps

JOIN        sys.indexes i

            ON    i.object_id =     ps.object_id

            AND   i.index_id  =     ps.index_id

WHERE       ps.avg_fragmentation_in_percent    >     5

            AND ps.index_id                    >     0                

ORDER BY    ps.avg_fragmentation_in_percent DESC

 

 

DECLARE     @Query      NVARCHAR(MAX)

DECLARE     @SiraNo     INT

SET         @SiraNo     =     (SELECT MIN(SiraNo) FROM #tmpIndex)

 

WHILE       (@SiraNo IS NOT NULL)

BEGIN 

      SET   @Query      =     (SELECT Query FROM #tmpIndex WHERE SiraNo = @SiraNo)

      SET   @SiraNo     =     (SELECT MIN(SiraNo) FROM #tmpIndex WHERE SiraNo > @SiraNo) 

      EXEC  (@Query) 

END

 

DROP TABLE  #tmpIndex