SQL Server Deadlock Nasıl Oluşur ?

Merhaba,

Bu yazımda SQL Sunucu üstünde oluşan Deadlock’ların iyi mi oluştuğu ve iyi mi izleyebileceğimiz konusu ile ilgili oldukça kolay bir tekniği söylemeye çalışacağım.

Öncelikle DeadLock oluşturtabilmek için kolay bir tablo oluşturuyoruz :

--- Table 1
CREATE TABLE SehirListesiA
(
    ID INT IDENTITY PRIMARY KEY,
    SehirAdi NVARCHAR(50)
)
INSERT INTO SehirListesiA VALUES ('İstanbul'),('Ankara'),('İzmir')
--- Table 2
CREATE TABLE SehirListesiB
(
    ID INT IDENTITY PRIMARY KEY,
    SehirAdi NVARCHAR(50)
)
INSERT INTO SehirListesiB VALUES ('İzmir'),('İstanbul'),('İzmir')

Aşağıda Query 1 ve Query 2 scriptleri bulunmaktadır. Bu Scriptleri iki ayrı pencerede peş peşe çalıştıracağız ve ne olduğuna bakalım.

--Query Window 1
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN TRANSACTION
UPDATE SehirListesiB Set
SehirAdi = 'Diyarbakır' WHERE Id = 1
WAITFOR DELAY '00:00:10'
UPDATE SehirListesiA
Set SehirAdi = 'Düzce' WHERE Id = 1
ROLLBACK TRAN
--Query Window 2
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN TRANSACTION
UPDATE SehirListesiA Set
SehirAdi = 'Adana' WHERE Id = 1
WAITFOR DELAY '00:00:10'
UPDATE SehirListesiB Set
SehirAdi = 'Ardahan' WHERE Id = 1
ROLLBACK TRAN

Birinci Query Çıktısı : İlk çalıştırılan Query yanıtı geliyor.

İkinci Query Çıktısı :

Gördüğünüz gibi gelen taleplerden biri kurban edilip işleme alınamadı.

Bu vakası basitce anlayabilmek ve seyretmek için SSMS üstünden ulaşabileceğiniz system_healt alanını kullanabilirsiniz.

Bu alan üstünde Sağ Tıklayıp : View Target Data… diyelim, ilk aşamada burada birçok veri göreceksiniz. Bize burada yalnızca DeacLock mesajları lüzumlu olduğundan Filtre oluşturacağız.

Aşağıdaki şekilde bir filtreleme yapıyoruz :

Filtre kısmını şöyle yapılandırınız

Field : Name

Operator : =

Value xml_deadlock_report

Bu filtreden sonrasında yalnızca Deadlock mesajları listelenecektir. OK dediğimizde azca ilkin oluşturduğumuz DeadLock’u göreceğiz.

Burada xml_report tıklandığında Deadlock oluşturan sorguların detayını göreceğiz.

Bu çıktı da Deadlock tab’ına tıkladığınızda oluşan Deadlock’u resim olarak ta görebilirsiniz.

SQL Server tarafınca kurban edilip Rollback meydana getirilen prosedür üstü mavi çarpı işaretli olandır.

Faydalı olması dileklerimle.

Teknolojik Blog
Aziz Ozdemiroglu