Alper ÇELİK

Bilgisayar Mühendisi

Sql Server Nolock Kavramı

Merhaba arkadaşlar, nolock ifadesinin kabaca tanımını yapacak olursak:<i> transaction(insert, update vb.) işlemi devam eden(kilitli) tablolar üzerinde, işlem henüz tamamlanmamış olsa dahi sanki tamamlanmış gibi kayıtları elde etmemizi sağlayan bir ifadedir.  Genel yazım şekli şöyledir:  
 
SELECT * FROM Customers WITH(NOLOCK)
 
 
Sql Server default olarak "read committed" modunda olduğu için transaction işlemlerinde tablolar kilitlenir. Pekii, söz konusu tablolar için(NOLOCK) deyiminin yazım şeklini gördük ve istediğimiz kayıtları bu yazım şekliyle elde edebileceğimizi'de biliyoruz artık. Peki bu kilidi kırmanın bize dezavantajı nedir ? Örnek üzerinden ifade edecek olursam: Örneğin bir e-ticaret sitesi tasarladınız ve sepet uygulaması gereği bir adet ürününüz kaldı, senaryo bu ya, aynı ürünü iki farklı kullanıcının aynı anda alma durumu çıkabilir böyle bir durumda...Bu yüzden bu tür durumlar için "TRANSACTION" kullanmanız sizin için fayda sağlayacaktır. En meşhur örneklerden biride havale örneğidir: Farklı hesaplar arasında havale göndermek istediğinizde örneğin sizin hesabınızdan -X lira düştüğünde karşı tarafın hesabına da +X lira yatıyor olması gerekir. Şayet bu işlemler bütünü gerçekleşmez ise işlemin ilk başladığı noktaya geri dönüyor olması gerekir.  
Transaction işlemi devam eden bir tablodan farklı bir session'da aynı tabloya ait verileri çekme işlemine "dirty read" deniyor. Yani herhangi bir sonuç alınamama durumu. Bu etkiyi NOLOCK ile anlık olarak kırmayı öğrendik. Peki sorgularımda her defasında aynı kodu tekrar mı edeceğim ? Tabi ki hayır, bu işlem içinde şu kod bloğunu yazıyor olmamız yeterlidir:
 
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
 
Kod bloğunu tekrar eski(default) hale getirmek için son satırı "COMMITTED" yapıyor olmanız gerekir.
Faydalı bir yazı olması dileğiyle..  
 
Dipnot: Veritabanı mimarisinde TRANSACTION işlemlerine uyulması gereken durumlar ACID(Atomicity, Consistency, Isolation, Durability) doktrini olarak adlandırılır. Ancak bu konu farklı bir makalenin içeriğine derinlik oluşturacak kapasiteye sahip olduğu için burada ele almıyorum.

Trigger Serisinin İlk Bölümüne Buradan Ulaşabilirsin

Trigger'lar özelleşmiş bir tür stored prosedürlerdir(SP).