dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Script #50
sqlserver
Performanceread-onlyMin Version: 2012

SQL Server'da Kullanılmayan ve Maliyetli İndeksleri Bulma

Okuma yapılmayan ama güncellenen indeksleri bulur. Yazma maliyetini düşürmek için kaldırma adayı listesi çıkarır.

#unused-index#index-usage#dmv
sqlserver · sql
SELECT OBJECT_SCHEMA_NAME(i.object_id) AS schema_name,
       OBJECT_NAME(i.object_id) AS table_name,
       i.name AS index_name, i.type_desc,
       ISNULL(s.user_seeks,0) + ISNULL(s.user_scans,0) + ISNULL(s.user_lookups,0) AS reads,
       ISNULL(s.user_updates,0) AS writes,
       (SELECT SUM(ps.used_page_count) * 8 / 1024 FROM sys.dm_db_partition_stats ps
         WHERE ps.object_id = i.object_id AND ps.index_id = i.index_id) AS size_mb
FROM sys.indexes i
LEFT JOIN sys.dm_db_index_usage_stats s
       ON s.object_id = i.object_id AND s.index_id = i.index_id AND s.database_id = DB_ID()
WHERE OBJECTPROPERTY(i.object_id, 'IsUserTable') = 1
  AND i.type_desc = 'NONCLUSTERED'
  AND i.is_primary_key = 0 AND i.is_unique_constraint = 0
  AND ISNULL(s.user_seeks,0) + ISNULL(s.user_scans,0) + ISNULL(s.user_lookups,0) = 0
ORDER BY writes DESC;
Operasyonel Notlar & İyileştirme Aksiyonu

İstatistikler servis yeniden başlatmada sıfırlanır; yeterince uzun çalışma süresi sonrası değerlendirin.

Üretim Güvenliği & Çalıştırma Standartları
  • Bu script salt okunur (read-only) teşhis için tasarlanmıştır; doğrudan veri veya şema değişikliği yapmaz.
  • Ağır yük altındaki üretim sunucularında çalıştırmadan önce hedef veritabanı sürümünü (Min. Sürüm: 2012) doğrulayın.
  • İlişkili oturumu sonlandırma veya indeks silme gibi yazma etkili aksiyonlar için notlar bölümündeki komutları temkinli uygulayın.