vSRO Çözüldü WITH (NOLOCK) Gerekliliği

Karabiber

.
Aktiflik: 1%
Çırak 50 mesaj
Katılım
12 Haz 2023
Mesajlar
60
Tepkime puanı
13
Puan
8
Konum
İstanbul
Thread owner
Merhaba arkadaşlar, yavaş yavaş öğreniyor ve yavaş yavaş kendimi geliştiriyorum ancak bazı durumlarda tıkandığım oluyor ona istinaden bu konuyu açmış bulunmaktayım, zamanını ayırıp cevap verecek herkese şimdiden teşekkür ediyorum.

WITH (NOLOCK) kullanımı konusunda takılmış durumdayım, her SELECT sorgusunda bunu kullanmalı mıyım? Biliyorum ki bir sorgu yaparken diğer sorgunun beklemeden veri çekmesi adına bunu kullanmalıyım ama SQL de zaten sorgular çok hızlı oluyor yinede bunu kullanmalı mıyım ? yada Kullanacaksam hangi tablolarda kullanmalıyım örn RefObjCommon da veri girişi olmadığı için burada kullanmamam gerektiğini düşünüyorum ama _Char tablosunda yeni çar açılabilir buraya veri girişi olur o sırada ben tablodan veri çekiyor olabilirim ve bu sorgu WITH (NOLOCK) olmadan _Char tablosuna baktığı zaman sorun yaşar mı ?

Bu konuda beni aydınlatabilecek bir arkadaş var mı ?
Şu anda bazı prosedürler yazmış durumdayım ve hepsi gayet sağlıklı bir şekilde çalışmakta ama çok oyunculu bir serverde ne olur kestiremiyorum buna istinaden cevaplarınızı bekliyorum.
iyi forumlar..
 
Eğer veri çekmek istediğin tabloda bir transaction varsa with(nolock) ile o transaction kilidini açıp işlem gerçekleşmiş gibi veri çekebilirsin.
 
Her zaman olmasada bazı yazdığım prosedür ve event içeriklerinde kullanıyorum.
Bir sorgu çalıştığında, diğer sorguların veritabanı üzerinde yaptığı değişikliklerin etkisinde kalmaz.
Bunun sebebi bu tablodan veri okumak istediğimizde (select) burada işi bitmemiş olan bir “insert, update veya delete” işlemi olduğundan, ve henüz işlemler tamamlanmadığından dolayı o tablodaki veriler bloklanmaya sebep olur (transaction sonlanana kadar). Böyle durumlarda veri okurken with(nolock) komutunu kullanırsak transaction bitmemiş olsa dahi select sorgusunun çalıştırıldığı ana kadarki verileri getiririlir, ve arka tarafta transaction devam eder. Ama, bizim select sorgusunu çalıştırdığımız ana kadarki halini bize döndürür.

SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.
SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.
SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.
 
Thread owner
Peki, bu durumda WITH NOLOCK durumunu sadece karakteri ilgilendirecek her sorguda kullanmamız bize sadece fayda getirmez mi ?
Örnek vermem gerekirse
Karakter üzerindeki item için update işlemi yaptıracağım ve bu işlem diğer oyuncuların yaptığı hiç bir sorguda karakterdeki slot6,7 veya 13 e yansımayacak bu durumda benim WITH NOLOCK kullanımım bana sadece fayda getirir doğru mu anladım ?

Ama Event gibi veya bir etkinlikte diğer oyuncuların yaptığı hareket Update veya DELETE getirdiğinde yeni sorguyu yapacak olan oyuncununda bundan etkilenme sebebinin muhtemel olmasınıda dikkate alırsak WITH NOLOCK kullanımı uygun olmuyor

acaba bütün olayı doğru anlamış mıyım ?
 
Kısacası sabit sütun verilerinde ihtiyacına göre kullanabilirsin. Değişkenlik gösteren verilerde kullanma. (x bir puan sütunu) değişkenlik gösterirken. (_Char charname) sabit ve değişkenlik göstermez.
WITH NOLOCK her sorguda kullanman gereken bir şey değil, sadece ihtiyaç halinde kullan, her değişken için kullanman sorun yaratacaktır.
 
Thread owner
Hocam verilen cevaplardan ötürü teşekkür ediyorum, konu güzel bir şekilde anlaşılmıştır.
 

Bu konuyu görüntüleyen kullanıcılar

Geri
Üst Alt