MsSql

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

· 4 dakika okuma · 46
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ş: