SQL Server DEADLOCK OPERASYONU

Reading Time: 3 minutes

Merhaba Sevgili Arkadaşlar, Bu gün ki yazımda sizlere Deadlock kavramını ve bu senaryo ile karşılaşınca yapılması gerekenler üzerine duracağız.Peki nedir bu Deadlock? Deadlock diğer adı ile ölümcül kilitlenme olarak da bilinmektedir.Deadlock aynı zamanda çalışan transactionların çakışması durumudur. O zaman şimdi bir Deadlock senaryosunu gerçekleştirelim. İlk önce aşağıdaki scripti çalıştırarak Test Database imizi oluşturalım.

 

 

 

 

Database imizi oluşturduktan sonra Test tablolarımızı da aşağıdaki script ile oluşturuyoruz.

 

Daha sonra tablolarımızın içine verilerimizi INSERT ediyoruz.

 

Veritabanımızı,tablolarımızıve içerlerine bilgileri ekledikten sonra şimdi ise senaryolarımıza geçelim.İlk önce New Query diyip yeni bir session açıyoruz ve içerisine aşağıdaki scripti ekliyoruz.

 

Daha sonra ikinci bir session açıp aşağıdaki scripti de onun içerisine ekliyoruz.

 

Session larımız hazır olduğuna göre ikisinide EXECUTE ediyoruz.

d1

Yukarıda da gördüğünüz üzere bir session ımız da  Deadlock Victim hatasını almış bulunmaktayız.

d2

Görüldüğü üzere SQL Server diğer session da Deadlock hatası verirken bu sessionın ise sonuçlanmasını sağlamış. Yani anlayacağınız üzere Deadlock durumlarında SQL SERVER kendisine göre kolay olandan geri dönüş sağlamaktadır.

Peki biz bu durumu şematik olarak görebilir miyiz ?

Evet SQL Server da SQL Profiler kullanarak aldığımız Deadlock ‘ları görebiliriz. SQL Profiler ‘ı SSMS üzerinden açacağımız gibi BAŞLAT / MS SQL SERVER 2008 R2 / PERFORMANCE TOOLS / SQL Server Profiler ı açabiliriz.

Peki SSMS üzerinden nasıl açabiliriz?

SSMS üzerinde Tools sekmesinin altında SQL Server Profiler a tıklarız.

d3

Daha sonra ekrana gelen pencerede gerekli login bilgilerini yazıp Connect oluyoruz. Bu aşamadan sonra aşağıdaki ekran karşımıza çıkıyor.Aşağıda ki ekranda Trace Name alanına Trace imize vereceğimiz adı yazıyoruz. Biz SQLTURKIYE-Deadlock-Monitor adını verdik. Daha sonra Use the template bölümüne ise Trace imizin tipini seçerek devam ediyoruz. Deadlock da bir Lock işlemi olduğu için TSQL_Locks sekmesini seçiyoruz ve Events Selections sekmesine tıklıyoruz.

d4

Burada ben genelde sadece Deadlock kontrolü yapacaksam ; Blocked Proccess Report taki,Stored Procedures ve TSQL deki tikleri kaldırıyorum ve Run tuşuna basıyoruz. Artık Deadlock Trace miz istediğimiz koşulları sağlayarak başlamış oldu.Buna nazaran, yukarıdaki scriptleri çalıştırarak Deadlock oluşmasını sağlıyoruz ve bundan sonra SQL Profiler da bu Deadlock nasıl görünüyor onu inceliyor olacağız. Senaryomuzu çalıştırdık ve Deadlock monitörden takibini sağlayacağız.

d5

 

d6

Yukarıdaki ekranlarda görüldüğü üzere oluşan Deadlockların şema halinde görsellerinden takip edip hangi query lerin çakışması sonucu Deadlock olduğunu görebiliriz yada trace imizi XML olarak kaydedip step step inceleyerek nedenlerine ulaşabilirsiniz. Daha sonraki makalemde ise bu DeadLockları nasıl önleriz onu anlatacağız.

Kitlenme Tipleri

Kilitlenme sırasında karşımıza çıkacak olan temel ana birimler şunlardır;

* RID              : Ram’in heap kısmında duran, satır üzerindeki kimlik no’sudur

* KEY             : Satırın indeks anahtarıdır.

* PAGE           : Veritabanının kilitledği herbir sayfaya page denir.

* HOBT          : Heap veya indeks bölümünün kilitlenmesi.

* TABLE         : Tablonun kilitlenmesi.

* METADATA  : Tablo şema açıklamasının kilitlenmesi.

ykkrtvzt

Leave a Reply

Your email address will not be published. Required fields are marked *