Kullanılmayan Index’leri Tespit Etmek

17 Tem by NURULLAH ÇAKIR

Kullanılmayan Index’leri Tespit Etmek

Index, genel olarak veritabanındaki performası artıran bir nesnedir. Fakat performansı arttırır düşüncesi ile tecrübesiz bir çok veritabanı yöneticisi ya da uygulamacı veritabanı çok sayıda index ekler. Bu index’lerden büyük bir kısmına ya çok az ihtiyaç olur ya da hiç ihtiyaç olmaz.

 

İyi bir veritabanı yöneticisi bir veritabanı sistemine bakmaya başladığında ilk yapması gereken işlemlerden biri veritabanlarındaki kullanılmayan indexleri tespit edip kaldırmaktır. Kullanılmayan tabloları bulmak için de “Kullanılmayan Tabloları Tespit Etmek” isimli makaleye göz atmak isteyebilirsiniz.

 

Aşağıdaki script yardımıyla sql server servisinin en son restartından bu yana kullanılmamış index’leri bulabilirsiniz.

 

select SCHEMA_NAME(tbl.schema_id) as [Şema İsmi],
OBJECT_NAME(us.object_id) as [Tablo İsmi],
'DROP INDEX '+i.name + ' ON  [' + SCHEMA_NAME(tbl.schema_id)+'].['+ OBJECT_NAME(us.object_id)+ ']' as [Drop Index Script],
us.last_user_seek [Son Seek Zamanı],
us.user_seeks [Seek Sayısı],
CASE us.user_seeks WHEN 0 THEN 0
ELSE us.user_seeks*1.0 /(us.user_scans + us.user_seeks) * 100.0 END AS SeekYüzdesi,
us.last_user_scan [Son Scan Zamanı],
us.user_scans [Scan Sayısı],
CASE us.user_scans WHEN 0 THEN 0
ELSE us.user_scans*1.0 /(us.user_scans + us.user_seeks) * 100.0 END AS ScanYüzdesi,
us.last_user_update [Son Update Zamanı],
us.user_updates [Update Sayısı]
FROM sys.dm_db_index_usage_stats us
INNER JOIN sys.indexes i ON i.object_id=us.object_id and i.index_id = us.index_id
INNER JOIN sys.tables tbl ON tbl.object_id=us.object_id
WHERE us.database_id = DB_ID('VeritabaniAdi') AND us.user_seeks=0 AND us.user_scans=0

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Lütfen captcha kodunu giriniz *

Lütfen Resimdeki Kodu Boşluğa Giriniz.