MSSQL Server’da Diskte En Çok Fiziksel Read Yapan Sorguları Tespit Etme

Veritabanı yöneticileri (DBA) ve yazılım geliştiriciler için performans optimizasyonunun altın kuralı, sistem kaynaklarını en çok tüketen noktaları bulmaktır. SQL Server’da bir sorgu çalıştığında, veriyi önce bellekten (Buffer Pool) okumaya çalışır. Eğer veri bellekte yoksa, diske gidip veriyi getirmek zorunda kalır. İşte bu işleme Physical Read (Fiziksel Okuma) diyoruz.

Diskten okuma yapmak, bellekten okumaya göre kat kat daha yavaştır. Bu makalede, disk sisteminizi yoran ve performansı aşağı çeken “top” sorguları nasıl bulacağınızı inceleyeceğiz.

Yüksek fiziksel okuma değerleri genellikle şu iki soruna işaret eder:

  1. Yetersiz Bellek (RAM): SQL Server, sık kullanılan verileri bellekte tutamıyor ve sürekli diske başvuruyor olabilir.
  2. Eksik İndeksler: Tablo taramaları (Table Scan), motorun devasa veri yığınlarını diskten okumasına neden olur.

Aşağıdaki T-SQL sorgusu, sys.dm_exec_query_stats ve sys.dm_exec_sql_text DMV’lerini (Dynamic Management Views) kullanarak, veritabanı servisinin başladığından beri en çok fiziksel okuma yapmış ilk 100 sorguyu getirir.

SELECT TOP 100
    qs.total_physical_reads,
    qs.execution_count,
    qs.total_physical_reads / qs.execution_count AS avg_physical_reads,
    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 QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY qs.total_physical_reads DESC;

Sorgu Sütunlarının Analizi

  • total_physical_reads: Sorgunun toplamda diskten yaptığı okuma sayısıdır. Toplam yükü gösterir.
  • execution_count: Sorgunun kaç kez çalıştırıldığı.
  • avg_physical_reads: Sorgu başına düşen ortalama disk okuması. Bazı sorgular az çalışsa da tek seferde disk sistemini felç edebilir.
  • QueryText: SQL Server’ın o an işlediği spesifik sorgu cümlesi.

Sorgu sonucunda listenin en başında yer alan ifadeler, sisteminizin performansını iyileştirmek için ilk bakmanız gereken yerlerdir. Eğer bir sorgunun avg_physical_reads değeri çok yüksekse şu adımları izleyebilirsiniz:

  1. Execution Plan Kontrolü: Sorgunun “Index Scan” mi yoksa “Table Scan” mi yaptığını kontrol edin.
  2. İndeks Stratejisi: İlgili tabloda WHERE ve JOIN koşullarını kapsayan uygun bir non-clustered index var mı?
  3. İstatistik Güncelliği: İstatistiklerin güncel olmaması, SQL Server’ın yanlış kararlar vererek gereksiz veri okumasına neden olabilir.

Özet

Fiziksel okumaları minimize etmek, sadece sorgu hızını artırmakla kalmaz; aynı zamanda disk üzerindeki I/O yükünü hafifleterek tüm sunucunun nefes almasını sağlar. Yukarıdaki sorguyu düzenli aralıklarla çalıştırarak sisteminizdeki “darboğaz” noktalarını proaktif bir şekilde izleyebilirsiniz.

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

“Böyle birine âyetlerimiz okunduğunda sanki kulaklarında ağırlık varmış da onu işitemiyormuş gibi büyüklük taslayarak sırt çevirir. Ona acıklı bir azabı müjdele!”Lokman-7

Author: Yunus YÜCEL

Bir yanıt yazın

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