SQL Server Deadlock Nasıl Oluşur ?
Merhaba,
Bu yazımda SQL Sunucu üzerinde oluşan Deadlock’ların nasıl oluştuğu ve nasıl izleyebileceğimiz konusunda çok basit bir yöntemi anlatmaya çalışacağım.
Öncelikle DeadLock oluşturtabilmek için basit 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 cevabı geliyor.

İkinci Query Çıktısı :

Gördüğünüz gibi gelen taleplerden biri kurban edilip işleme alınamadı.
Bu olayı basitce anlayabilmek ve izlemek için SSMS üzerinden erişebileceğiniz system_healt alanını kullanabilirsiniz.

Bu alan üzerinde Sağ Tıklayıp : View Target Data… diyelim, ilk aşamada burada bir çok veri göreceksiniz. Bize burada sadece DeacLock mesajları gerekli olduğu için Filtre oluşturacağız.

Aşağıdaki şekilde bir filtreleme yapıyoruz :
Filtre kısmını şu şekilde yapılandırınız
Field : Name
Operator : =
Value xml_deadlock_report

Bu filtreden sonra sadece Deadlock mesajları listelenecektir. OK dediğimizde az önce 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 görsel olarak ta görebilirsiniz.
SQL Server tarafından kurban edilip Rollback yapılan işlem üzeri mavi çarpı işaretli olandır.

Faydalı olması dileklerimle.
Teknolojik Blog
Aziz Ozdemiroglu