MSSQL Server’da DMV ve DMF Nedir

SQL Server yönetiminde performans izleme ve sorun giderme süreçlerinin kalbi, Dinamik Yönetim Görünümleri (DMV) ve Fonksiyonlarıdır (DMF). Sistemde bir darboğaz yaşandığında veya beklenmedik bir hata oluştuğunda, sorunu hızlıca adreslemek ve çözüm için ipuçları (hint) yakalamak bu yapılar sayesinde mümkündür. Eğer bu iki yapı doğru okunabilirse, veritabanı yöneticisi için eşsiz bir rehber haline gelirler.

SQL Server’ın iç işleyişini, bellek kullanımını, disk aktivitelerini ve sorgu performanslarını anlık olarak takip etmemizi sağlayan bu yapılar, motorun durumunu yansıtan canlı aynalardır.

DMV ve DMF’leri sorgulayabilmek için kullanıcının belirli yetkilere sahip olması gerekir. Bu yapılar kapsamlarına göre ikiye ayrılır:

  • Server Düzeyi: Tüm sunucuyu ilgilendiren bilgileri verir. Sorgulamak için VIEW SERVER STATE yetkisi gereklidir.
GRANT VIEW SERVER STATE TO [Login_Name];
  • Database Düzeyi: Sadece ilgili veritabanına özel bilgileri kapsar. Sorgulamak için VIEW DATABASE STATE yetkisi gereklidir.
GRANT VIEW DATABASE STATE TO [User_Name];
  • Dynamic Management View (DMV): Tablo benzeri nesnelerdir. Standart bir SELECT komutu ile okunabilirler. SQL Server servisinin başladığı andan itibaren biriken verileri sunarlar.
  • Dynamic Management Function (DMF): Belirli parametreler alarak çalışan fonksiyonlardır. Genellikle bir DMV ile birleştirilerek kullanılırlar ve sonuç kümesini genişletmek için CROSS APPLY operatöründen faydalanılır.

1. En Çok Kullanılan DMV’ler (Dynamic Management Views)

DMV’ler doğrudan tablo gibi sorgulanabilen yapılardır ve genellikle sistemin o anki genel durumunu yansıtırlar.

DMV AdıKullanım Amacı
sys.dm_exec_requestsŞu an çalışan aktif talepleri gösterir. Hangi sorgu ne kadar süredir çalışıyor, hangi komutu çalıştırıyor görebilirsiniz.
sys.dm_exec_sessionsSunucuya bağlı tüm session’lar hakkında bilgi verir (Host name, login name, program adı vb.).
sys.dm_os_wait_statsSunucu genelindeki tüm bekleme türlerini (Wait Types) listeler. Performans analizinin başlangıç noktasıdır.
sys.dm_exec_query_statsCache’de bulunan sorguların performans istatistiklerini (toplam CPU, IO, çalışma sayısı) verir.
sys.dm_db_index_usage_statsİndekslerin kullanım miktarını gösterir. Gereksiz veya hiç kullanılmayan indeksleri bulmak için kritiktir.
sys.dm_os_sys_infoSQL Server’ın gördüğü CPU, bellek ve thread sayıları gibi donanım bilgilerini verir.
sys.dm_tran_locksO an sistemde bulunan kilitleri (locks) ve hangi kaynağın kim tarafından kilitlendiğini gösterir.
sys.dm_db_missing_index_detailsSQL Server’ın sorguları hızlandırmak için eksik olduğunu düşündüğü indeks detaylarını verir.

2. En Çok Kullanılan DMF’ler (Dynamic Management Functions)

DMF’ler dışarıdan bir parametre (genellikle bir ID veya Handle) alarak çalışırlar ve daha detaylı, spesifik veriler sunarlar.

DMF AdıKullanım Amacı
sys.dm_exec_sql_text(handle)Bir sorgunun sql_handle değerini alarak, o sorgunun açık metnini (T-SQL) döndürür.
sys.dm_exec_query_plan(handle)Bir sorgunun plan_handle değerini alarak, XML formatında execution planını (çalışma planı) verir.
sys.dm_db_index_physical_stats(…)İndekslerin fiziksel durumunu (Fragmentation oranı, sayfa sayısı vb.) gösterir.
sys.dm_io_virtual_file_stats(…)Belirli bir veritabanı dosyası üzerindeki IO gecikmelerini (Latency) milisaniye cinsinden verir.
sys.dm_exec_input_buffer(id, id)Belirli bir Session ID’nin (SPID) gönderdiği son komutu görmenizi sağlar.

Genellikle en verimli sonuç, bir DMV ile DMF’nin CROSS APPLY kullanılarak birleştirilmesiyle alınır. İşte en popüler örnek:

-- Şu an çalışan sorguları ve metinlerini getirir
SELECT 
    r.session_id, 
    r.status, 
    r.start_time,
    t.text AS [Query Text]
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t;

Özet Karşılaştırma

  • DMV’ler (Örn: sys.dm_exec_requests), sistemdeki “nesneleri” temsil eder.
  • DMF’ler (Örn: sys.dm_exec_sql_text), o nesnelerin içindeki “detayları” (sorgu metni, plan vb.) açığa çıkarır.

DMV ve DMF yapıları, SQL Server veritabanı yöneticileri için sadece birer izleme aracı değil, aynı zamanda proaktif yönetim stratejilerinin temel taşıdır. Bu nesnelerden gelen verileri doğru analiz etmek; veritabanı performansını optimize etmeyi, kilitlenmeleri (deadlock) önlemeyi ve donanım kaynaklarını verimli kullanmayı sağlar. Unutulmamalıdır ki, bu veriler genellikle SQL Server servisi yeniden başlatıldığında sıfırlanır; bu nedenle kritik verilerin düzenli aralıklarla kalıcı tablolara kaydedilmesi, uzun vadeli analizler için büyük önem taşır.

Başka makalede görüşmek dileğiyle…

Huzur Allah’tandır. (Necm-43)

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir