Bir
databasede sorgu performanslarını artırmak için öncelikle index yapısını gözden
geçirip eklememiz index ekleyebilmek içinse
eksik olan indexleri ekleyebilmemiz için öncelikle eksik indexleri
bulmamız gerekmektedir. SQL Servera
gönderilen sorgular için SQL Server bir query plan oluşturur. Bu query plan en
iyi index kullanarak sorgu yapmaya çalışmakta eğer sorgu için index bulamadığı
takdirde aşağıdaki DMV ve DMFler üzerinde depolama yapmaktadır.
Aşağıda
bulunan 4 DMV ve DMF kullanarak eksik indexlerimizi belirleyebiliyoruz.
- sys.dm_db_missing_index_group_stats - DMV-Eksik index’ler hakkında özet bir bilgi sunar.
- sys.dm_db_missing_index_groups - DMV-sys.dm_db_missing_index_group_stats ile sys.dm_db_missing_index_details arasında ilişki kurmamızı sağlar.
- sys.dm_db_missing_index_details-DMV-Eksik index hakkında kolon bilgileri gibi detaylı bilgileri döndürür.
- sys.dm_db_missing_index_columns - DMF-Eksik index kolonları hakkında bilgi döndüren fonksiyondur. Diğer 3 tanesi ise viewdir.
Örnek
Sorgu
Aşağıdaki
sorgu mevcut databasede bulunan eksik indexlerin bir listesini döndürür.
SELECT so.name , (avg_total_user_cost * avg_user_impact) * (user_seeks + user_scans) as Impact , mid.equality_columns , mid.inequality_columns , mid.included_columns FROM sys.dm_db_missing_index_group_stats AS migs INNER JOIN sys.dm_db_missing_index_groups AS mig ON migs.group_handle = mig.index_group_handle INNER JOIN sys.dm_db_missing_index_details AS mid ON mig.index_handle = mid.index_handle INNER JOIN sys.objects so WITH (nolock) ON mid.object_id = so.object_id WHERE migs.group_handle IN ( SELECT TOP (5000) group_handle FROM sys.dm_db_missing_index_group_stats WITH (nolock) ORDER BY (avg_total_user_cost * avg_user_impact) * (user_seeks + user_scans) DESC)
DMVler her instance
başlatıldığında yeniden doldurulduğu için bu DMVler SQL Server başlatıldıktan
sonra ve belirli bir süre çalıştırıldıktan sonra kontrol edilmelidir.
SQL Server IQ oranı
o kadar iyi olmadığı için bu sorguda önerilen indeksleri körü körüne uygulamak
doğru değildir. Öncelikle bir test sunucusu üzerinde index oluşturulmalı ve iş
yükü test edilmelidir. Eğer olumlu sonuçlar alınırsa teyit edilmeli ve kullanılmaya
başlanmalıdır.
Eğer kullanılmayan
bir index oluşturulursa boş yere disk alanı israfı veya dahada önemlisi tabloya
yapılan diğer sorgularda performansı düşüreceği için index oluşturulma işi çok
iyi analiz edilerek yapılmalıdır.
Not:Kullanılmayan
indekslerin tespit edilmesi konusunu DMV-DMF Kullanımı-3 nolu makalede
ayrıntılı olarak inceleyeceğiz.