8 Eylül 2014 Pazartesi

SQL Server Performans Sorunu-Transaction Deadlock

İşletmemizin farklı yerdeki şubesinde üretim sonu kaydı yaptığımız özel yazılım barkod-üretim takip programında sadece belirli stok kodlarında barkod etiketi çıkartıp üretim sonu kaydını yaptığımız esnada uzun süre bekleme olup çoğu zaman transaction deadlock tarzı hatalar almaktaydık.İlk esnada gecikmenin network ile alakalı olabileceğini düşündüğüm için temel network izleme komutu olan ping komutu ile SQL sunucunun çalıştığı sunucu'ya ping komutu gönderdim herhangi bir paket kaybı yoktu ve PC'den giden paketler 1 ms'den düşük olacak şekilde hedefe ulaşmaktaydı.Buraya kadar sıkıntı yoktu.Ardından yazılım desteği aldığımız firmadaki arkadaş ile SQL Sunucu'da SQL Profiler çalıştırıp column filter'dan karışıklılık olmaması için üretim takip programının ismini yazarak izleme yaptık ve darboğaza-beklemeye girdiği yerdeki T-SQL söz dizimini yakaladık.





Söz diziminin çalıştığı view'i yakaladıktan sonra üretim sonu kaydı yaptığımız stok kodunda fazla hareket olduğu için ve üretim takip programı tüm bu kayıtlara baktığı için geç cevap döndürüyor bu sebepten dolayı üretim sonu kayıt işlemi epeyce geç oluyordu.Sorguyu farklı stok kodları ile denediğimizde çoğunda 4 saniye'de cevap dönerken sorunlu olan stok kodundan 60 saniye civarında sorgu dönüyordu.Sonuç olarak bir çok çözüm yolu olabilir diye düşünüyorum -örn:index rebuild- arkadaş view üzerinde bizim kullanmadığımız alanları sorguda yorum haline getirip üretim  sonu kaydını yeniden deneğimizde çok kısa sürede sorgu cevabı gelmeye başladı sorun bu şekilde çözülmüş oldu.SQL sunucu darboğaz yönetimi gerçekten farklı bir konu ilk başta gecikmenin network'ten olabileceğini düşünsekte profiler'ın yardımı ile darbogazın fazla stok hareketi ve sorgu optimizasyonu ile çözülebileceğini görmüş olduk.