Sefik Can Kanber
2 min readJul 17, 2019

SQL Server’da Transaction,Locking ve Deadlock Nedir ?

Bu makalemde veritabanlarında art arda işlem yaparken kullandığımız yapılardan bahsedeceğim.

Bir veya daha fazla sql ifadesini bir bütün olarak düşünen ve başarılı olması halinde sql ifadelerini kalıcı olarak istenilen değişikliği uygulayan veya hata olması halinde değişiklik yapmadan verileri aynı şekilde korunmasını sağlayan işleme transaction denir.Transaction işlemlerinin sağlıklı bir şekilde çalışmaya devam edebilmesi için ACID ilkelerini sağlaması gerekmektedir.

Veritabanları kullanıcılardan gelen istekleri ayrıştırabilmek için Locking’i kullanır.Peki nedir bu Locking ?

Bir kullanıcının işlem yaptığı tabloya transaction açması ve insert-update işlemlerine başlaması sonucunda başka bir kullanıcı bu tabloya ulaşmak istediğinde ilk kullanıcının işlemi tamamlamasını bekler.İşte bu yapıya Locking denir.İşlemlerin büyüyüp kullanıcıların birbirini Lock’laması sonucu Deadlock’lar oluşmaya başlayabilir.

Lock yapısının olmadığı sistemlerde 3 temel problem ortaya çıkmaktadır.

Dirty Read:Bir transaction sonlanmadan diğer transaction’ın bir önceki transaction’ın değişiklik sonucunu görmesidir.Daha detaylı açıklamak gerekirse burada değişiklik yapan transaction commit edilmezse ilgili değişiklik rollback ile geri alır.İşte tam bu sırada yapılan read işlemi bu sırada veritabanına yansıtılmamış veriyi gösterir.Aşağıdaki resimde dirty read kullanımını görebilirsiniz.

Non-Repetable Read:Bir transaction sonlanmadan diğer transaction’ın art arda yaptığı okuma işlemleri sonucu diğer transaction’ın yaptığı işlemlerden etkilenip farklı sonuçlar üretmesidir.Aşağıdaki resimde non-repetable read kullanımını görebilirsiniz.

Phantom-Read:Bir transaction sonlanmadan diğer transaction’ın kendi içerisinde art arda yaptığı okuma işlemlerinin önceki transaction’ın insert-delete işlemlerinden etkilenip farklı sonuçlar üretmesidir.İlgili işlem bir süre sonra commit yada rollback ile tamamlanmazsa sistem hata fırlatır.Aşağıdaki resimde phantom-read kullanımını görebilirsiniz.

Peki bu locking problemleri nasıl çözülmüştür ? Bunu diğer makalemde anlatıp daha sonra bu işlemleri entity framework ile nasıl kullanabileceğimizden bahsedeceğim.

Umarım transaction yönetimi ile ilgili faydalı bilgiler verebilmişimdir.İyi çalışmalar.

Sefik Can Kanber
Sefik Can Kanber

No responses yet