• Forumu şuan da Ziyaretçi olarak görüntülüyorsunuz. Forum ziyaretçileri tüm konu ve bağlantıları görüntüleyemez ve kaynaklara erişimi yoktur. Eğer üye iseniz buradan üye girişi yapın ya da burayı tıklayarak şimdi üye olun.
  • Ubden® Topluluk Projelerine, Aracılığınızla Destek Vermektedir.

    Topluluk projelerine katkı yapmak ve topluğumuza ulaşan genç girişimcilere destek olmak için Buradaki  bağlantıdan işlem kanallarına ulaşabilirsiniz.

    Desteklerinizle 7.000 kişilik bir ekosistem olduk ve büyümeye devam ediyoruz. Desteğiniz için teşekkürler.

SQL Server Deadlock Nasıl Oluşur ?

A

Aziz

Misafir
Misafir
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 :

Kod:
[B]--- Table 1[/B]
CREATE TABLE SehirListesiA
(
    ID INT IDENTITY PRIMARY KEY,
    SehirAdi NVARCHAR(50)
)
INSERT INTO SehirListesiA VALUES ('İstanbul'),('Ankara'),('İzmir')
[B]--- Table 2[/B]
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.

Kod:
--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

Kod:
--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.

Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.


İkinci Query Çıktısı :

Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.


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 bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.


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.

Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısını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 bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.


Bu filtreden sonra sadece Deadlock mesajları listelenecektir. OK dediğimizde az önce oluşturduğumuz DeadLock’u göreceğiz.

Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.


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

Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.


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.

Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.


Faydalı olması dileklerimle.

Teknolojik Blog
Aziz Ozdemiroglu

The post
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
appeared first on
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
.

Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
 
Üst