SQL Server - engelleme olmayan seçme deyimleri için hangi yalıtım düzeyi?


9

Bazı siler, güncellemeler ve SQL Server 2008 R2 bir tabloya ekler gerçekleştiren (T1 denir) uzun çalışan bir işlem var. Aynı zamanda, başka bir işlem periyodik olarak bu tablodan select deyimlerini çalıştırır.

Varsayılan yalıtım ayarları altında (Bence OKULULDU?), T1, işlem tamamlanıncaya veya geri alınana kadar seçili ifadelerin çalışmasını engeller.

Ne görmek istiyorum işlem devam ederken bile tutarlı ifadeler işlevini seçmek için select deyimleri içindir. SNAPSHOT izolasyonunun yardımcı olabileceğine inanıyorum, ancak doğru yönde olup olmadığımdan emin değilim. Bu, bu uygulama için en iyi izolasyon seviyesi olur mu?

İkincisi, select deyimlerini çağıran işlem üzerinde herhangi bir denetimim yok, ancak T1'i çağıran .NET uygulaması üzerinde denetimim var. Hem select deyimlerinde hem de T1'de herhangi bir yalıtım düzeyi değişikliği gerekli olacak mı, yoksa yalnızca T1'i farklı bir yalıtım seviyesine sahip olarak işaretlemek yeterli mi?

Yanıtlar:


8

İdeal bir dünyada iki seçeneğiniz olur, SNAPSHOT ve OKU TAAHHÜŞ SNAPSHOT (RCSI). Hangisinin iş yükünüz için uygun olduğuna karar vermeden önce işlem yalıtım düzeylerinin temellerini anladığınızdan emin olun . Özellikle farklı sonuçların farkında sen RCSI taşınıyor sonucu görebilirsiniz.

Select deyimlerini üreten uygulama üzerinde herhangi bir kontrole sahip olmadığınız için bu ideal bir dünya gibi görünmüyor. Bu durumda, tek seçeneğiniz söz konusu veritabanı için RCSI'yi etkinleştirmektir, böylece seçimler READ COMMITTED yerine otomatik olarak RCSI kullanır.


6

Doğru, işlem başlamadan önce tutarlı, taahhüt edilen verileri almak için SNAPSHOT yalıtımını kullanın.

UNCOMMITTED izolasyonunu (NOLOCK ipucu olarak da bilinir) dirtz, tutarsız veriler okuyacak

SNAPSHOT yalıtımını etkinleştirdiğinizde, ilerideki tüm SELECT'ler için geçerli olur. Kaçacak ALTER DATABASEbu durumda READ_COMMITTED_SNAPSHOT ile

Düzenleme: eklenen bağlantı + alıntı ALTER DATABASE (kalın)

Veritabanı düzeyinde Okunan Taahhütlü Anlık Görüntü seçeneğini etkinleştirir. Etkinleştirildiğinde, hiçbir işlem Anlık Görüntü Yalıtımı kullanmadığında bile satır sürümleri oluşturmaya başlar. Bu seçenek etkinleştirildikten sonra , okunan yalıtım düzeyini belirten işlemler kilitlemek yerine satır sürümünü kullanır. Bir işlem okunan yalıtım düzeyinde çalıştırıldığında, tüm ifadeler ifadenin başında var olan verilerin anlık bir görüntüsünü görür.

Ve aralarından Anlık İzolasyon kullanma (benim kalın)

READ_COMMITTED_SNAPSHOT veritabanı seçeneği, veritabanında anlık görüntü yalıtımı etkinleştirildiğinde varsayılan READ COMMITTED yalıtım düzeyinin davranışını belirler . READ_COMMITTED_SNAPSHOT ON özelliğini açıkça belirtmezseniz, tüm örtülü işlemlere READ COMMITTED uygulanır. Bu, READ_COMMITTED_SNAPSHOT OFF (varsayılan) ayarıyla aynı davranışı üretir. READ_COMMITTED_SNAPSHOT OFF etkin olduğunda, Veritabanı Altyapısı varsayılan yalıtım düzeyini zorlamak için paylaşılan kilitleri kullanır. READ_COMMITTED_SNAPSHOT veritabanı seçeneğini AÇIK olarak ayarlarsanız, veritabanı motoru verileri korumak için kilitleri kullanmak yerine varsayılan olarak satır sürümlendirme ve anlık görüntü yalıtımı kullanır.

Yani evet.

RCSI'nın etkinleştirilmesi, okumaların tutarlı veriler elde etmesini sağlar ve Okuma Taahhüt kullanmaya devam edecek yazarlar tarafından engellenmez


4

Aşağıdaki soruyu ve cevaplarını okumanızı öneririm: Veritabanı kilitleme sorunları? .

Db düzeyinde kullanılacak doğru yalıtım düzeyini bulmak, bu sorunu gidermenize yardımcı olmak için şu anda yapabileceğiniz en hızlı şeydir, çünkü veritabanına dokunan ve kodlarını değiştiren tüm uygulamaları değiştirmek zordur. "Select deyimlerini çağıran işlem üzerinde herhangi bir denetimim yok" dediğinden, en hızlı yanıt db'yi Taahhüt Edilen Anlık Görüntü yalıtım düzeyine geçirmek olacaktır, böylece okuma sorgularına dokunmazsınız. Aksi takdirde, büyük işlemleriniz sırasında veri okuyan oturumlar için Anlık Görüntü yalıtım düzeyini kullanmanız gerekir.

Doğru olanı seçme hakkında daha fazla ayrıntı: Satır Sürüm Oluşturma Tabanlı Yalıtım Düzeylerini Seçme .

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.