|
|
Yayınlandı 8.01.2016 17:58:31
|
|
|

Eskiden kıdemli geliştiricilerimin SQL Server'da sorgulama yaparken WITH (NOLOCK) kullandığını görürdüm ve neden kullandıklarını merak ederdim. Şimdi araştırdım ve sorgu yürütme performansını artırmak için faydalı olduğunu gördüm. Ancak kullanmanın bir dezavantajı vardır. Dezavantajı ise, şu anda Tablo'da güncellenen verileri aldığından emin olmayabilirsiniz, yani, kilit koruması olmadan verinin alınmadığından emin olamazsınız sorgu çalışırken değişiyor. Bu bağlantıya başvurdum ve oldukça faydalı buldum.
SQL sorgu performansını artırmak için genel olarak ilk göz önünde bulundurulacak bir indeks oluşturmaktır. Aslında, indekslerin kurulmasının yanı sıra, SQL komutları yerleştirdiğimizde, sözdizimine WITH (NOLOCK) bölümü eklemek, çok sayıda çevrimiçi sorgu bulunan bir ortamda veri kümelerinin kilitlenme olgesini iyileştirebilir ve böylece sorgu performansını iyileştirebilir.
Ancak, (NOLOCK) ile SQL SELECT yapmak kirli bir okumaya neden olabilir.
Mesela:
Çünkü SQL Server ilgili kilit tutarlılığı kontrolünü gerçekleştirir. Genel veritabanı sorgu performansını artırmak için, SELECT sözdizimindeki tablo adının sonuna WITH (NOLOCK) ekleyin, ancak (NOLOCK) da kabul edilebilir, ancak Microsoft yine de WITH eklemeyi önerir.
Basit SELECT'in yanı sıra, JOIN ile SELECT sözdizimi de kullanabilirsiniz. Ama DELETE, INSERT, UPDATE ve işlem gerektiren diğer komutlar geçerli değil...
Bazı dosyalar, WITH (NOLOCK) ile SQL sorgu verimliliğinin %33 artabileceğini söylüyor. WITH (NOLOCK) ekleme, SQL Server'a SELECT komutumuzun mevcut tablonun işlem kilidi durumunu dikkate almasına gerek olmadığını belirtir; bu nedenle performans önemli ölçüde artar ve veritabanı sisteminin kilit fenomeni (dead lock dahil) önemli ölçüde azalır.
Dikkat edilmesi gereken bir nokta, WITH (NOLOCK) mevcut tablonun işlem kilidini dikkate almadığından, bir işlemin birden fazla aşamasında bazı veriler olduğunda (örneğin, birden fazla tablo arasında işlem - > para çekme sistemi gibi), WITH (NOLOCK) işlem sürecini işleyen verileri görmezden gelecektir...
Açıkçası, NoLock kullanıldığında, işlem henüz tamamlanmamış ama değiştirilmiş verileri okumaya izin verir. Bu nedenle, işlem verilerinin gerçek zamanlı bütünlüğünü göz önünde bulundurmanız gerekiyorsa, WITH (NOLOCK) kullanmayı dikkatlice düşünmelisiniz.
İşlemleri düşünmenize gerek yoksa, WITH (NOLOCK) faydalı bir referans olabilir.
Not 1: WITH ( < table_hint > ) Tablo taramasını, sorgu optimizleyicisi tarafından kullanılan bir veya daha fazla indeks belirtir, Ya da sorgu optimizatoru tarafından bu veri tablosundan yararlanıp bu ifade için kilit modunu kullanabilirsin.
Not 2: WITH (NOLOCK) OKUMA KARARSIZ ile eşdeğerdir
Son olarak, nolock ile with(nolock) arasındaki birkaç küçük farktan bahsedelim: 1: SQL05'te eşanlamlılar, yalnızca (nolock) ile desteklenir; 2: ile (nolock) çok kolay yazılır ve ardından indeks belirtilir. Sunucular arasında ifadeler sorgularken, (nolock) ile sadece nolock ile kullanamazsınız, sadece nolock ile Aynı sunucuda sorgulama yapılırken, hem (nolock) hem de nolock ile kullanılabiliyor Ne gibi? SQL kodu [IP].a.dbo.table1 ile * seçin. (nolock) Bu size a.dbo.table1'den (nolock) ile * hata seçimini önerecektir. Bu işe yarar |
Önceki:C#, kimlik numarasının orta rakamını gizlerÖnümüzdeki:jquery JS'yi AJAX ile yükler
|