Belirtiler
Aşağıdaki senaryoyu inceleyin:
-
Microsoft SQL Server 2008 R2'de Seçenekler ALLOW_SNAPSHOT_ISOLATION ve READ_COMMITTED_SNAPSHOT etkinleştirilmiş bir veritabanınız var.
-
Veritabanında bir tabloya yönelik tablock ve UPDLOCK ipuçlarını içeren bir Select deyimi çalıştırırsınız.
-
Select deyimi açık BIR BEGIN TRANIle PAKETLENIR, ancak COMMIT Tran yürütülmez.
-
Aynı sorgu ipuçlarıyla başlatılan aynı sorguların iki daha fazlası, açık hareketlerdir.
Bu senaryoda, ilk sorgu tamamlandığında, diğer sorgulardan biri kilitlenmeyecektir.
Neden
Sorun oluşur çünkü SQL Server aşağıdaki senaryolardan birinde kilitlenmeyi yanlış bildiriyor:
-
Bir veritabanı için ALLOW_SNAPSHOT_ISOLATION ve READ_COMMITTED_SNAPSHOT etkinleştirildiğinde, aynı hareketle ilgili birden çok sorgu, biri tamamlandığında yanlış kilitlenmiş olarak bildirilebilir.
-
ALLOW_SNAPSHOT_ISOTION etkinleştirildiğinde ve Ipuçları TABLOCK ve UPDLOCK kullanıldığında, ikinci ve üçüncü Select deyimi x 'e dönüştürme amacını teklerle alır. X 'e dönüştürme girişimi yapıldığında, IX kilitleniyor.
-
ALLOW_SNAPSHOT_ISOLATION devre dışı bırakıldığında, ikinci ve üçüncü sorgular altı kilit alır. Bu durumda, altı kilit X biçimine dönüştürüldüğünde, kilitlenme değil yalnızca engelleyici bir senaryodur.
Çözüm
Sorun ilk olarak SQL Server 'ın aşağıdaki toplu güncelleştirmesinde giderilmiştir. Düzeltmeyi uyguladıktan sonra, veritabanı ve sorgu için bir okuma işlemi Ipucu veya nolock IPUCUNA rastlana kadar SQL Server sorunu çözerek sorunu çözer. Bu bilgiler, yanlış rapor kilitlenmeleri yerine, durumu doğru şekilde işleyebilmek için doğru kilit türlerini seçmek için kullanılır.
SQL Server 2008 R2 SP2 için toplu güncelleştirme 11 /en-us/help/2926028
Her bir SQL Server toplu güncelleştirmesi, önceki toplu güncelleştirmeyle birlikte gelen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. En son SQL Server güncelleştirmelerini gözden geçirin:
Durum
Microsoft bu sorunun "Uygulandığı öğe" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.