IsolationLevel.ReadUncommitted üzerinde paylaşılan Paylaşılan Kilit


10

IsolationLevel.ReadUncommitted kullanırsanız, sorgu herhangi bir kilit vermemesi gerektiğini okudum. Ancak, bunu test ettiğimde, aşağıdaki kilidi gördüm:


Kaynak_Türü : HOBT İsteği_Modu: S (Paylaşılan)

HOBT kilidi nedir? HBT (Öbek veya İkili Ağaç kilidi) ile ilgili bir şey var mı?

Neden hala S kilidi alıyorum?

Yalıtım düzeyi anlık görüntü seçeneğini açmadan sorgu yaparken paylaşılan kilitlemeyi nasıl önleyebilirim?

Bunu SQLServer 2008'de test ediyorum ve anlık görüntü seçeneği kapalı olarak ayarlanmış. Sorgu yalnızca bir seçim gerçekleştirir.

SQL Server kilit sorgumda görünmüyor gibi görünse de, Sch-S gerekli olduğunu görebilirsiniz. Nasıl oluyor da hala Paylaşılan Kilit veriyor? Göre:

İŞLEM YALITIM SEVİYESİNİ AYARLA (Transact-SQL)

READ UNCOMMITTEDDüzeyde çalışan işlemler, diğer işlemlerin geçerli işlem tarafından okunan verileri değiştirmesini önlemek için paylaşılan kilitler vermez.

Bu yüzden biraz kafam karıştı.

Yanıtlar:


13

HOBT kilidi nedir?

Kümelenmiş bir dizini olmayan bir tablodaki bir B ağacını (dizin) veya yığın veri sayfalarını koruyan bir kilit.

Neden hala S kilidi alıyorum?

Bu yığınlarda olur. Misal

SET NOCOUNT ON;

DECLARE @Query nvarchar(max) = 
   N'DECLARE @C INT; 
     SELECT @C = COUNT(*) FROM master.dbo.MSreplication_options';

/*Run once so compilation out of the way*/
EXEC(@Query);

DBCC TRACEON(-1,3604,1200) WITH NO_INFOMSGS;

PRINT 'READ UNCOMMITTED';
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
EXEC(@Query);

PRINT 'READ COMMITTED';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
EXEC(@Query);

DBCC TRACEOFF(-1,3604,1200) WITH NO_INFOMSGS;

Çıktı READ UNCOMMITTED

Process 56 acquiring Sch-S lock on OBJECT: 1:1163151189:0  (class bit0 ref1) result: OK

Process 56 acquiring S lock on HOBT: 1:72057594038910976 [BULK_OPERATION] (class bit0 ref1) result: OK

Process 56 releasing lock on OBJECT: 1:1163151189:0 

Çıktı READ COMMITTED

Process 56 acquiring IS lock on OBJECT: 1:1163151189:0  (class bit0 ref1) result: OK

Process 56 acquiring IS lock on PAGE: 1:1:169 (class bit0 ref1) result: OK

Process 56 releasing lock on PAGE: 1:1:169

Process 56 releasing lock on OBJECT: 1:1163151189:0 

Bu makaleye göre Paul Randal'a atıfta bulunarak bu BULK_OPERATIONpaylaşılan HOBT kilidini almanın nedeni , biçimlendirilmemiş sayfaların okunmasını önlemektir.


5

ReadUncommorted izolasyon seviyesi kilitler kazanır. Şema kararlılık kilitleri, sorgu yürütülürken sorguların nesnelerin değiştirilmesini önler. Bu kilitler, anlık görüntü ve read_committed_snapshot (RCSI) dahil olmak üzere tüm yalıtım düzeylerinde edinilir. Gönderen Kilit Modları :

Şema Kilitleri

Veritabanı Altyapısı, bir tablo veri tanımlama dili (DDL) işlemi sırasında sütun ekleme veya tablo bırakma gibi şema değişikliği (Sch-M) kilitlerini kullanır. Tutulduğu süre boyunca Sch-M kilidi, masaya eşzamanlı erişimi önler. Bu, Sch-M kilidinin kilit serbest bırakılana kadar tüm dış işlemleri engellediği anlamına gelir.

Tablo kesmesi gibi bazı veri işleme dili (DML) işlemleri, eşzamanlı işlemler tarafından etkilenen tablolara erişimi önlemek için Sch-M kilitlerini kullanır.

Veritabanı Altyapısı, sorguları derlerken ve yürütürken şema kararlılığı (Sch-S) kilitlerini kullanır. Sch-S kilitleri, özel (X) kilitler dahil olmak üzere işlem kilitlerini engellemez. Bu nedenle, bir tabloda X kilitli olanlar da dahil olmak üzere diğer işlemler, bir sorgu derlenirken çalışmaya devam eder. Ancak, eşzamanlı DDL işlemleri ve Sch-M kilitlerini alan eşzamanlı DML işlemleri tabloda gerçekleştirilemez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.