Yazının İngilizcesi için lütfen tıklayınız.

Bir tablo insert/update/delete aldığında, o tablodaki index’ler sürekli bozulur. Eğer bozulma yüzdesi yüksekse, index’ler sorgu performansını düşürmeye başlar. Veri tabanı bakımının önemli adımlarından bir tanesi, index’lere rebuild/reorganize işlemlerini uygulamadan önce index’lerin bozulma oranlarını tespit etmektir.

Microsoft SQL Server üzerinde yer alan dynamic system view ve function’lar kullanılarak index’lerin bozulma oranlarını listelemek mümkündür. Bu sorguyu aşağıda bulabilirsiniz.

Bir index için bozulma oranı %30’un üzerinde ise rebuild (alter index indexName on tableName rebuild); bozulma oranı %10 ile %30 arasında ise reorganize edilir (alter index indexName on tableName reorganize).

Bir index’in rebuild işlemi devam ederken üzerinde bulunduğu tablonun diğer sorgulara cevap vermeye devam etmesini isterseniz, ONLINE opsiyonunu kullanmayı unutmayın (…rebuild WITH (ONLINE = ON) )

SELECT  
OBJECT_NAME(i.OBJECT_ID) AS [Tablo Adı], 
i.name AS [Index Adı], 
ips.index_type_desc AS [Index Tipi],
ips.page_count AS [Indexin Sayfa Sayısı],
ips.avg_fragmentation_in_percent AS [Bozulma Yüzdesi]

FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) ips
INNER JOIN sys.indexes i ON i.object_id = ips.object_id AND i.index_id = ips.index_id

where 
i.is_disabled = 0 AND –sadece aktif indexler
ips.index_type_desc != ‘HEAP’ AND –sadece clustered index’li tablolar
ips.page_count > 40 –küçük sayfa sayılı index’ler dahil edilmeyebilir

ORDER BY [Bozulma Yüzdesi] DES