Aracılığıyla paylaş


Deadlocking

Kalıcı olarak iki veya daha fazla görev olduğunda çıkmaz oluşuyor blok birbirlerine göre her görev diğer görevler kilitlemek için çalıştığınız bir kaynak kilit olması.Örneğin:

  • Hareket bir satır 1 üzerinde bir paylaşım kilit kapsar.

  • b hareket isteklerdir bir paylaşım kilit satır 2.

  • Özel bir hareket a şimdi isteklerini kilit 2 satır, ve bkilitb hareket tamamlandıktan ve paylaşım yayımları kadar ed kilit satır 2 vardır.

  • Şimdi b hareket ister bir özel kullanım kilidi on 1 satır ve bkilita hareket tamamlandıktan ve paylaşım yayımları kadar ed kilit satır 1 vardır.

b işlem tamamlanır, ancak hareket b a. hareket tarafından engellendi kadar hareket a tamamlanamıyorBu durum, döngüsel bağımlılık olarak da adlandırılır: İşlemin a b harekette bir bağımlılık vardır ve hareket b a. harekette bir bağımlılık sağlayarak daire kapanır.

çıkmaz harici bir işlem tarafından kırıldı sürece her iki harekette bir çıkmaz sonsuza kadar bekler.The Microsoft SQL Server Veritabanı Altyapısı deadlock monitor periodically checks for tasks that are in a deadlock.Monitör döngüsel bağımlılık algılarsa, görevlerden birini kurban seçer ve kendi işlem bir hata ile sona erer.Bu, hareketi tamamlamak başka bir görev verir.Uygulama bir hata ile sona erdi hareket ile diğer şüphelenildiği hareket tamamlandıktan sonra genellikle tamamlar hareketi deneyebilir.

Uygulamalarda bazı kodlama kuralları kullanarak uygulamaları kilitlenmeleri neden olacak olasılığını azaltır.Daha fazla bilgi için bkz: Kilitlenmeleri en aza indirme.

Genellikle'yi deadlocking normal engelleme ile karıştırılır.Bir işlem başka bir işlem tarafından kilitli kaynak üzerindeki kilit istediğinde, istekte bulunan işlem kilidi serbest bırakılıncaya kadar bekler.Varsayılan olarak, SQL Server hareketleri yapmak saat aşımına, olmadığı sürece, LOCK_TIMEOUT küme.İstekte bulunan işlem bloked, istekte bulunan işlem için hiçbir şey yapılmadı olduğundan, kilitli değil blok kilit sorumlu hareket.Sahibi olan hareket sonunda, bırakın ve tamamlayacakları kilit, istekte bulunan işlem verileceğini ve kilit ve devam edin.

Kilitlenmeler, bazen 7.800 embrace verilir.

Kilitlenme yalnýzca bir ilişkisel veritabanı yönetim sistemi üzerinde birden çok iş parçacığı ile herhangi bir sistemi ortaya çıkabilir ve veritabanı nesneleri üzerinde kilit farklı kaynaklar için gerçekleştirilebilir bir durumdur.Örneğin, iş parçacığı parçacığında bir çok iş parçacığı parçacıklı işletim sistemi bellek bloklarını gibi bir veya daha çok kaynakları sağlamak.Alınmakta kaynak şu anda başka bir iş parçacığının sahibi, ilk iş parçacığı hedef kaynak serbest bırakmak sahibi olan iş parçacığı için beklemeniz gerekebilir.Bekleyen iş parçacığı barındırıyor, özellikle sahibi olan iş parçacığı üzerinde bir bağımlılık olarak kaynak.İçinde bir örnek , Veritabanı Altyapısı, oturumlar kilitlenmeye, bellek veya gibi nondatabase kaynaklar alınıyoriş parçacıkları.

İşlem kilitlenmesini gösteren diyagram

Şekilde, hareket T2 için bir bağımlılık hareket T1 vardır bölümü tablo kilidi kaynak.Benzer şekilde, hareket T2 üzerinde hareket T1 için bir bağımlılık vardır tedarikçi tablo kilidi kaynak.Bir döngü bu bağımlılıklar oluşturmak için hareketleri arasında T1 ve T2 çıkmaz vardır.

Kilitlenmeleri de oluşabilir olduğunda tablo bölümlendirilir ve LOCK_ESCALATION küme, alter table ting olduğu küme otomatik.LOCK_ESCALATION olduğunda küme için otomatik, eşzamanlılık artış sağlayarak Veritabanı Altyapısı Kilit tablo bölümlere düzeynde HoBT yerine tablo düzey.Ancak, ne zaman ayrı hareketlerinin basılı bölümü kilitler bir tablo ve istediğiniz yerde bölümdeki diğer hareketleri kilit, bu bir çıkmazye neden olur.Bu tür bir çıkmaz TABLOYA LOCK_ESCALATION ayarlayarak önlenebilir; Bu ayarı, büyük güncelleştirmeleri için beklenecek bir bölümü zorlayarak eşzamanlılık azaltır olmasa da bir tablo kilidi.