MsSql

SQL Server Performans Tuning: Yavaş Sorguları Hızlandırmanın Yolları

· 8 dakika okuma · 0
SQL Server Performans Tuning: Yavaş Sorguları Hızlandırmanın Yolları

Merhaba,

SQL Server yavaşladı, kullanıcılar şikayetçi, DBA ekibi baskı altında — klasik senaryo. Performans sorununu doğru teşhis etmeden rastgele index eklemek veya sunucu yükseltmek çözüm değil, bant-aid. Sistematik yaklaşımı paylaşayım arkadaşlar.

Önce Teşhis: Nerede Yavaş?

İlk adım nereden baktığınızı bilmek. SQL Server Management Studio'da Activity Monitor hızlı bir genel bakış sunuyor. Ama gerçek güç DMV'lerde (Dynamic Management Views). sys.dm_exec_query_stats en çok kaynak tüketen sorguları listeler. sys.dm_os_wait_stats sunucunun nede beklediğini gösterir. Bu ikisi ile hangi sorgu ve hangi bekleme tipi sorun yaratıyor hızlıca tespit edilebilir.

Execution Plan: Sorgunun X-Ray'i

Yavaş sorguyu bulduktan sonra execution plan'ı inceleyin. SSMS'te Ctrl+M ile gerçek execution plan aktif olur. Plan üzerinde en pahalı operatör kalın ok ile gösteriliyor. Dikkat edilecek uyarılar:

  • Table Scan / Index Scan: Tablo taranıyor, index yok veya kullanılmıyor.
  • Key Lookup: Index var ama covering değil, extra I/O yapıyor.
  • Hash Match / Sort: Büyük veri seti için bellek gerekiyor, TempDB'ye taşabilir.
  • Estimated vs Actual Rows farkı: İstatistikler güncel değil.

Index Stratejisi

Missing index önerilerini körü körüne uygulamayın — her tablo için yüzlerce öneri gelebilir. Index oluşturma maliyeti (yazma yavaşlaması, storage) ile sorgu kazanımını dengeleyin. Covering index ile key lookup'ları ortadan kaldırın: INCLUDE ile SELECT listesindeki kolonları index'e ekleyin. Kullanılmayan index'leri sys.dm_db_index_usage_stats ile tespit edip kaldırın — bunlar sadece yazma performansını olumsuz etkiliyor.

İstatistik Güncellemesi

Query optimizer, execution plan seçmek için istatistiklere güveniyor. Eski istatistikler yanlış plan seçimine yol açıyor. UPDATE STATISTICS veya EXEC sp_updatestats ile güncelleyin. Auto Update Statistics açık olmalı ama büyük tablolarda tetikleme eşiği yavaş kalabilir — manuel veya zamanlanmış güncelleme gerekebilir. DBCC SHOW_STATISTICS ile istatistik histogram'ını inceleyebilirsiniz.

Wait Statistics: Sunucu Ne Bekliyor?

Performans sorunlarını kategorize etmenin en etkili yolu wait statistics. Başlıca wait tipleri:

  • PAGEIOLATCH: Disk I/O yavaş, storage sorunu veya buffer pool yetersiz.
  • LCK_M_X: Blocking ve deadlock, transaction tasarımı veya index sorunu.
  • CXPACKET: Paralel sorgu senkronizasyonu, MAXDOP ayarı gözden geçirin.
  • SOS_SCHEDULER_YIELD: CPU baskısı, yoğun hesaplama veya yetersiz CPU.

TempDB Optimizasyonu

TempDB hot spot SQL Server'ın sık yaşanan darboğazlarından. Öneriler: TempDB data dosyası sayısını CPU sayısına eşitleyin (maksimum 8), tüm data dosyaları eşit boyutlu olsun, TempDB'yi ayrı hızlı diske taşıyın. SQL Server 2016+ ile TempDB kurulum sırasında otomatik configure ediliyor ama mevcut sunucularda kontrol şart.

Sonuç

SQL Server performans optimizasyonu sistematik bir süreç: önce teşhis, sonra execution plan analizi, ardından index ve istatistik optimizasyonu. Sunucu yükseltmeden önce yazılım seviyesinde ne yapılabileceğini tüketin — çoğu zaman doğru index ve güncel istatistik sorunu çözüyor :)

İyi Günler Dilerim,

Bu yazıyı paylaş: