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 STATEyetkisi 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_sessions | Sunucuya bağlı tüm session’lar hakkında bilgi verir (Host name, login name, program adı vb.). |
| sys.dm_os_wait_stats | Sunucu genelindeki tüm bekleme türlerini (Wait Types) listeler. Performans analizinin başlangıç noktasıdır. |
| sys.dm_exec_query_stats | Cache’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_info | SQL Server’ın gördüğü CPU, bellek ve thread sayıları gibi donanım bilgilerini verir. |
| sys.dm_tran_locks | O an sistemde bulunan kilitleri (locks) ve hangi kaynağın kim tarafından kilitlendiğini gösterir. |
| sys.dm_db_missing_index_details | SQL 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)
