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ş: