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.

Image for post
Image for post

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.

Image for post
Image for post

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.

Image for post
Image for post

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.

Senior Software Developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store