3 Aralık 2014 Çarşamba

DMV-DMF Kullanımı-2(Eksik Indexlerin Tespit Edilmesi)


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.

Sql Server DateTime Veri Tipindeki Datayı Türkçe Formatında Göstermek

  SQL'de tarihleri farklı formatlarda göstermek için FORMAT fonksiyonunu kullanabilirsiniz. Türkçe kısa tarih formatı genellikle "...