SQL Server’da Sunucuyu En Çok Yoran Sorguları Bulma

SQL Server’da Sunucuyu En Çok Yoran Sorguları Bulma

SQL Server’da Sunucuyu En Çok Yoran Sorguları Bulma

Posted on Aralık 18, 2025 by Şaban ÇİÇEK
SQL Server’da Sunucuyu En Çok Yoran Sorguları Bulma

SQL Server’da Sunucuyu En Çok Yoran Sorguları Bulma (CPU / Süre / IO)

Problem:
“SQL Server yavaş”, “CPU sürekli %90”, “Sunucu nefes alamıyor” gibi sorunların arkasında çoğu zaman birkaç aşırı maliyetli sorgu bulunur. Bu sorgu, sunucuyu en çok yoran SQL’leri CPU, süre ve IO bazında ortaya çıkarır.

Bu sorgu ne işe yarar?

  • Sunucu genelinde en çok CPU tüketen sorguları listeler
  • Hangi veritabanından geldiğini gösterir
  • Toplam ve ortalama çalışma sürelerini hesaplar
  • Disk IO (logical read/write) yükünü ortaya koyar
  • Gerçek çalıştırılan SQL statement’ı gösterir

Ne zaman kullanılır?

✔ CPU sürekli yüksekse
✔ Sunucu yavaş ama hangi sorgu belli değilse
✔ Canlı sistemde “anlık değil, genel yük” analiz edilecekse
✔ Performans tuning öncesi “nereden başlamalıyım?” sorusu varsa

SQL Sorgusu (CPU’ya Göre En Pahalı Sorgular)

SELECT TOP (20)
    DB_NAME(st.dbid) AS database_name,
    qs.execution_count,
    qs.total_worker_time / 1000 AS total_cpu_ms,
    (qs.total_worker_time / 1000) / NULLIF(qs.execution_count, 0) AS avg_cpu_ms,
    qs.total_elapsed_time / 1000 AS total_elapsed_ms,
    (qs.total_elapsed_time / 1000) / NULLIF(qs.execution_count, 0) AS avg_elapsed_ms,
    qs.total_logical_reads AS total_logical_reads,
    qs.total_logical_writes AS total_logical_writes,
    SUBSTRING(
        st.text,
        (qs.statement_start_offset / 2) + 1,
        ((CASE qs.statement_end_offset
            WHEN -1 THEN DATALENGTH(st.text)
            ELSE qs.statement_end_offset
        END - qs.statement_start_offset) / 2) + 1
    ) AS statement_text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY qs.total_worker_time DESC;
  

Kolonlar ne anlama geliyor?

Kolon Açıklama
database_name Sorgunun çalıştığı veritabanı
execution_count Toplam kaç kez çalıştırıldığı
total_cpu_ms Toplam CPU tüketimi (ms)
avg_cpu_ms Çalıştırma başına ortalama CPU
total_elapsed_ms Toplam çalışma süresi
avg_elapsed_ms Ortalama çalışma süresi
logical_reads / writes Disk IO yükü (okuma / yazma)
statement_text Gerçek çalıştırılan SQL kodu

Bu sorgudan sonra ne yapılmalı?

  • En üstte çıkan sorgular için Execution Plan incele
  • Table Scan / Key Lookup var mı bak
  • Eksik indeksleri belirle
  • SELECT * ve fonksiyonlu WHERE şartlarını temizle
  • Gerekirse Query Store ile geçmiş performansı kıyasla
Pro ipucu:
Bu DMV sonuçları SQL Server restart edilince sıfırlanır. Kalıcı analiz için mutlaka Query Store ile birlikte kullan.
64 görüntülenme • 0 Yorum • Son Güncelleme: Aralık 18, 2025
Yorumlar 0
Yorum Yap

Henüz yorum yok. İlk yorumu siz yapın!