SQL Server Parameter Sniffing sorununu çözme
Parameter sniffing, SQL Server'ın bir stored procedure'ü ilk çağıran parametre değerine göre plan üretip cache'lemesidir. O plan farklı veri dağılımına sahip diğer parametreler için kötü olabilir; aynı sorgu bazen hızlı, bazen çok yavaş çalışır.
Kendi sorgunuzu yapıştırın — bağlantı olmadan, saniyeler içinde teşhis alın.
Sorgu Analizcisini açBelirtiler
- Aynı procedure çağrısı bazı parametrelerde milisaniye, bazılarında dakika sürüyor
- Procedure'ü recompile edince geçici olarak düzeliyor
- Estimated vs actual rows arasında büyük sapma
Kök nedenler
- Çarpık (skewed) veri dağılımı + tek paylaşılan plan
- Cache'lenen plan ilk 'sniff' edilen atipik değere göre üretilmiş
Çözüm adımları
Sorunu doğrula
Plan cache'i ve estimated/actual row farkını inceleyin. Belirli parametrelerde planın uygunsuz olduğunu teyit edin.
Hedefli çözüm seç
OPTION (RECOMPILE) her çağrıda taze plan üretir (CPU maliyeti var). OPTIMIZE FOR UNKNOWN ortalama bir plan üretir. OPTIMIZE FOR (@p = değer) tipik değere sabitler. Senaryoya göre seçin.
İstatistikleri güncel tut
Eski istatistikler sniffing'i ağırlaştırır. Düzenli istatistik güncellemesi tahminleri iyileştirir.
Sık sorulanlar
OPTION (RECOMPILE) her zaman güvenli mi?
İşlevsel olarak güvenlidir ama her çağrıda derleme CPU maliyeti getirir. Çok sık çağrılan sıcak sorgularda dikkatli kullanın.
Parameter sniffing'i tamamen kapatmalı mıyım?
Hayır. Sniffing çoğu zaman faydalıdır; yalnızca çarpık dağılımlı problemli sorgularda hedefli müdahale yapın.
Sorgunuzu ChatGPT'ye değil, senior DBA'ye sorun
Deterministik DBA checklist + execution plan analizi. Bağlantı yok, credential yok.
Ücretsiz analiz et