Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 19946|Yanıt: 3

[Kaynak] Veritabanı kilitleri NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Bağlantıyı kopyala]
Yayınlandı 14.01.2021 15:23:14 | | | |
NOLOCK
Bu seçenek seçildiğinde, SQL Server kilitsiz verileri okur veya değiştirir. Bu durumda, kullanıcı "kirli veri" olarak bilinen Bağlanmamış İşlem veya Geri Geri Dönüşten veri okuyabilir.

TUTMA
Bu seçenek seçildiğinde, SQL Server bu paylaşılan kilidi tüm işlemin sonuna kadar sürdürür ve yol boyunca serbest bırakır.

UPDLOCK
Bu seçenek seçildiğinde, SQL Server veri okururken paylaşılan kilit yerine değiştir kilidi kullanır ve bu kilidi tüm işlem veya komutun sonuna kadar korur. Bu seçenek, birden fazla sürecin aynı anda veriyi okuyabilmesini sağlar, ancak yalnızca o süreç veriyi değiştirebilir.

TABLOCK
Bu seçenek seçildiğinde, SQL Server komut bitene kadar tüm tabloya paylaşılan bir kilit yerleştirir. Bu seçenek, diğer süreçlerin sadece verileri okuyabilmesini ve veriyi değiştirmemesini sağlar.

PAGLOCK
Bu seçenek varsayılan seçenektir ve seçildiğinde SQL Server paylaşılan bir sayfa kilidi kullanır.

TABLOCKX (Özel Masa Kilidi)
Bu seçenek seçildiğinde, SQL Server komut veya işlem bitene kadar tüm tabloya bir kilit koyar. Bu, diğer süreçlerin tablodaki verileri okumasını veya değiştirmesini engeller.

HOLDLOCK, paylaşılan kilidi tüm işlem tamamlanana kadar tutar ve kilitli nesne gerekmediğinde serbest bırakılmalıdır; bu da SERIALIZEDİLİR işlem izolasyon seviyesine eşit

NOLOCK ifadesi, paylaşılan kilit verilmeden yürütülür ve kirli okumalara izin verilir; bu da READ UNCOMMITTED işlem izolasyon seviyesine eşittir

PAGLOCK, bir tablo kilidi kullanılan birden fazla sayfa kilidi kullanır

READPAST, sql sunucusunun kilitli satırları atlamasına ve işlemleri yürütmesine izin verir ve READ UNCOMMITTED işlem izolasyon seviyeleri için sadece RID kilitlerini atlar, sayfa, bölge ve tablo kilitlerini değil

ROWLOCK, sıralı kilitlerin kullanımını zorunlu kılar

TABLOCKX, işlem sırasında başka herhangi bir işlemin tabloyu kullanmasını engelleyen özel bir tablo düzeyinde kilit kullanımını zorunlu kılar

UPLOCK, paylaşılan kilitsiz bir tablo okunurken güncellemeler kullanımını zorunlu kılıyor

Not: Bir veritabanında bir tabloyu kilitlemek arasındaki fark
SELECT * FROM tablosuyla (HOLDLOCK) Diğer işlemler tabloyu okuyabilir, ancak güncellenemez veya sile gelemez
SELECT * FROM tablo WITH (TABLOCKX) Diğer işlemler tabloları okuyamaz, güncellelemez ve silmez




Önceki:Win10 Uzak Masaüstü Çift Ekranlı Ekran
Önümüzdeki:.NET/C# Nethereum'a dayalı ETH cüzdan hesabı ve doğrulama şifresi oluşturun [kaynak koduyla]
 Ev sahibi| Yayınlandı 14.01.2021 16:53:24 |
TABLOCKX kilidini test et

Test sql aşağıdaki gibidir:


C# Kodunun Testi:


Keşif,Tüm tablo kilitlenmiştir ve veri yalnızca işlem yürütüldüğünde sorgulanabilir, aşağıdaki şekilde gösterildiği gibi:



WITH(TABLOCKX)'u silin ve veri sadece ID 1 ile güncellenir, test şu şekildedir:



Görev 2 ve Görev 4 id 1 ile veri içermediğinden, sorgu çok hızlıdır ve 3 ile 4 işlemlerin tamamlanmasını beklemek zorundadır.

Veri değiştirilirken davranış

Satır sürüm kullanan taahhütlü bir okuma işleminde, güncelleme kilidi (U-kilidi) uygulanan bir bloklama taraması ile güncellenecek satırları seçin; burada veri değeri okunduğunda veri satırına güncelleme kilidi (U-kilidi) uygulanır. Bu, satır sürüm kullanmayan taahhütlü okuma işlemiyle aynıdır. Bir veri satırı güncelleme kriterlerini karşılamazsa, o satırda bir güncelleme kilidi açılır ve sonraki satır kilitlenip taranır.

Güncelleme Kilidi (U): Çıkmazları önleyen bir kilit modu; burada iki işlem önce bir veri kaynağını okuyor Değişiklik durumunda, paylaşılan kilitler ve münhasır kilitler bazen çıkmazlara yol açarken, güncelleme kilitlerinin kullanımı çıkmaz kilitlerin oluşmasını önleyebilir. Kaynağın güncelleme kilidi aynı anda yalnızca bir işlem için atanabilir ve kaynak değiştirilmesi gerekirse, güncelleme kilidi münhasır bir kilit olur, aksi takdirde paylaşılan kilit olur.

Bağlantı girişi görünür.

 Ev sahibi| Yayınlandı 28.01.2021 17:30:51 |
Sorun:

udpate a
set sütun1 = 1
burada idx = 1
sqlserver update ifadesini çalıştırdığında, tüm tabloyu kilitler

Analiz:

Saat yapısı,Ana anahtar olmadan sadece satırları kilitleyemezsiniz
 Ev sahibi| Yayınlandı 2.05.2023 11:47:24 |
Entity Framework Sorgu Optimizasyonu WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com