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


Bir cevap yazın

Connect with: