SQL Server'ın OKUMA KOMİTESİ SNAPSHOT vs SNAPSHOT


23

SQL Server READ COMMITTED SNAPSHOTve SNAPSHOTizolasyon seviyeleri arasındaki farkları araştırıyordum ve aşağıdaki kaynakla karşılaştım:

Satır Sürümüne Dayalı Yalıtım Düzeylerini Seçme

Çoğu uygulama için, aşağıdaki nedenlerden dolayı anlık görüntü yalıtımı yerine satır sürümü kullanarak okumaya dayalı yalıtım önerilir:

  • Anlık görüntü yalıtımından daha az tempdb alanı tüketir.

  • Anlık görüntü yalıtımı, satır sürüm oluşturma kullanarak okunan yalıtımı uygulamak için geçerli olmayan çakışmaları güncellemeye açıktır. Anlık görüntü yalıtımı altında çalışan bir işlem daha sonra başka bir işlem tarafından değiştirilen verileri okuduğunda, anlık görüntü işlemiyle aynı verilere yapılan güncelleştirme bir güncelleştirme çakışmasına neden olur ve işlem sona erer ve geri alır. Bu, satır sürümleme kullanılarak okumaya dayalı izolasyonla ilgili bir sorun değildir.

Bu konular için biraz yeniyim, ancak yukarıdaki bağlantıdan iki kurşun noktasını anlayamıyorum.

  1. Tempdb alanı bu modlar için neden farklı olsun? Biri diğerinden daha ayrıntılı sürüm depolar mı?

  2. Anlık görüntü yalıtımı neden çatışmaları güncellemek için daha savunmasız?

Yanıtlar:


18
  1. READ COMMITTED SNAPSHOTHer ifadeden sonra yeni bir anlık görüntü kullanır. Bu, daha az satır sürümlerinin hayatta tutulduğu anlamına gelir. (Dokümanlardan alıntı yaptığınız ifade biraz yanıltıcıdır, çünkü bunun her zaman doğru olduğunu düşündürür - yalnızca uzun süren SNAPSHOTişlemlerde geçerlidir.) Anlık görüntü satır sürümleri yazılır. Okurlar, tempdb'ye ne konulduğunu etkilemez. Yazarlar gelecekte okunacakların ne olacağını tahmin edemezler. Okuyucular yalnızca temizlenebilecekleri etkiler.
  2. Bir zaman SNAPSHOTişlem T1başka bir işlem tarafından değiştirildi üst üste yazar T2arasındaki sürede T1başlayan ve T1yazma girişiminde deyimi bir güncelleme çatışma hata ile başarısız olur. Bu iyimser bir eşzamanlılık modelidir. Sırasındaki X kilidini açmak için READ COMMITTED SNAPSHOT T1bekler T2ve normal şekilde devam eder.

1
# 2 için, SNAPSHOT’un sadece güncellemeler için kilitlenmediğini söylemek güvenli - sadece satır sürümüne mi dayanıyor?
John Russell,

1
@ JohnRussell, geri alma işlemini desteklemek için yalnızca kilitlenir. Tüm yazıların, geri alma durumunda sıranın geri yüklenebilmesini sağlamak için X kilidi gerekir.
usr

0

Anlık görüntü ile okumaya bağlı anlık görüntü arasındaki bir fark daha aşağıdadır.

  1. Enstantane fotoğraf

İlk oturumda

SET TRAN İZOLASYON SEVİYESİ SNAPSHOT TRAN SELECT SEÇENMESİ * TB1'DEN ..... .....

İkinci oturumda

TB1'i Güncelle SET NAME = NAME + 'test' Burada id = 1

İlk oturumda

SEÇ * TB1'DEN - BU, ID = 1 için değer adını döndürür; ad + 'test' COMMIT TRAN

Okunmuş anlık görüntüde, 1. oturumdaki ilk seçim, id = 1 için ad, ikinci seçim ise + test sınamasını döndürür.

Bu yüzden, anlık görüntü yalıtımında SQL SERVER işlemin başlangıcında bir anlık görüntü yapar ve tüm işlem sırasında bu anlık görüntüden okur.

Okunmuş görüntüde anlık görüntü, işlem sırasında her SELECT ifadesi için anlık görüntü alınır.

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.