MSSQL Server Extended Events ile DeadLock Mekanizması Oluşturma

Bu makalede Extented Eventsda DeadLock mekanizması nasıl oluşturulduğunu ele almış olacağız. Extented Events sql server’da profiler yapısının yerine gelmiş olan bir yapı olarak karşımıza çıkmaktadır. Profiler system’i anlık takip ederken Extented Events system’i geriden takip etmektedir. Bu sebeple Profiler büyük system’ler de sıkıntıya sebebiyet verirken Extented Events yapısı ile bu sorunun önüne geçmiş oluruz. İlerleyen SQL Server sürümlerinde SQL Server Profiler kaldırılacağı için Microsoft profiler aracı yerine Extended Events kullanılmasını öneriyor. Profiler yapısında önden filtreleme olmadığı için çalıştırılmaması gerekmektedir.

Uygulamacılar bazen deadlock hatası alırlar ve hangi sorgularda bu hatayı aldıklarını göremezler. Bu yüzden veritabanında deadlock hatası alıyoruz diyerek kapınızı çalabilirler. Böyle bir durumda Extended Events ya da SQL Server Profiler kullanarak deadlock’a düşen sorguları yakalayabiliriz.

Bu yapı SSMS’de Management sekmesi altında bulunmaktadır.

Şimdi yapacağımız örnekle veritabanı üzerinde DeadLock yapısına sebep olan sorguları bulmuş olacağız. Şimdi uygulamalı bir şekilde yapacağımız işlemleri görelim.

Extented Events altında bulunan Sessions kısmına sağ tıklayıp New Session Wizard diyiyoruz.

Gelen ekranda Do not Show this page again  kısmını işaretleyip Next diyiyoruz. Bunu seçmemizin sebebi tekrardan bir Session oluşturacağımız zaman karşımıza gelmesini istemeyişimiz.

Gelen ekranda Session name kısmında bir isim veriyoruz. Schedule kısmında Start the event session at server startup. bölümünü seçmiyoruz. Sebebi ise server başladığında bu session’ın başlamasını istemiyoruz. Bu açıklamadan sonra Next deyip bir sonraki ekrana geçiyoruz.

Gelen ekranda Do not use template deyip bir sonraki ekrana geçiyoruz. Use this event session template kısmını seçerek hazır olan bir Template’de seçilip ilerlenebilir.

Gelen ekranda Event library kısmında DeadLock yazıyorum. Gelen kütüphanelere tıklayıp  çerçeve içerisine alınmış OK butonu ile Selected events kısmına dahil ediyoruz.

Gerekli olan kütüphaneleri seçip Next diyiyorum. Hangi kütüphanenin ne işe yaradığına değinelim.

  • xml_deadlock_report:Oluşan deadlock’un XML formatında detaylı raporunu üretir. Hangi sorgular, hangi tablolar, hangi kilitler → hepsi görünür.
  • database_xml_deadlock_report: xml_deadlock_report ile aynı mantıkta ama veritabanı bazında deadlock’ları yakalar.
  • lock_deadlock: Bir deadlock oluştuğu anı yakalar. Detaydan çok, “deadlock oldu” bilgisini verir
  • lock_deadlock_chain: Deadlock’a giden kilitlenme zincirini gösterir. Yani: hangi işlem kimi bekliyordu, olay nasıl buraya geldi Deadlock chain yapısının seçilmesi deadlock oluşmasını takip etmektedir.

xml_deadlock_report seçildikten sonra filtreleme ekranından ilgili veritabanımız seçilmesi gerekmektedir.

Tüm veritabanlarının üzerinde kontrol işlemi yapmamız gerekirse value kısmına % işareti koymamız yeterli olacaktır. sqlserver.database_name ifadesi kullanılmazsa boş bırakılırsa yüzde ifadesinde olduğu gibi tüm veritabanlarının üzerinde kontrol işlemini yapmaktadır.

Yukarıdaki tanımlanan ifadelerde Next dedikten sonra gelen ekran için hangi bilgileri almak istediğimizi seçiyoruz. Burası tamamen sizin ifadeler hakkında ne bilgi görmek istiyorsanız onu seçiyorsunuz. Seçimlerimiz yaptıktan sonra Next deyip bir sonraki aşamaya geçiyoruz.

Next diyip bir sonraki ekrana geçtiğimizde oluşturulan Deadlock yapısının nereye kaydedeceğimizi ka. dosyadan oluşturmamız gerektiğini bir dosyanın ortalama boyutu ve boyut aşıldığında Enable file rollever yapısıyla dosyasının üzerine yazması gerektiğini belirtebiliriz.

Yukarıdaki tanımlamaları yaptıktan sonra Deadlock yapımızı oluşturuyoruz.

Belirtilen dizindeki .xel ifadesine tıklandığında SSMS arayüzünden inceleme yapabiliriz.

Gelen ekranda lock_deadlock_chain yapısı dead lock oluşturan sorgularımızı görmekteyiz.

Details kısmından xml_report’ a çift tıklayınca hangi sorgunun hangi sorguyu deadlock’a düşürdüğünü görebiliriz. <victim-list> teki process kurban olarak seçilen process’tir. Aşağıdaki ifadede sorgunun hangi sebepten dolayı victim seçildiğini görebiliriz. İlgili ifadelerin üzerine mouse ile gelince hangi sorgumuzun olduğunu görebiliriz.

Aşağıda görünen Lock_deadlock kısmında ise hangi sorguda ve anda deadlock oluştuğunu göstermektedir. Detaylı bir şekilde hangi kullanıcının hangi veritabanında hangi sorgu sonucu deadlock’a düştüğünü görebiliriz.

Bu makalede Extented Events Deadlock yapısını görmüş olduk. Başka bir makalede görüşmek dileğiyle.

Onlar “Boş Şeylerden Tümüyle Yüz Çeviriler. ” Mü’minun-3

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir