Yanıtlar:
Benzerlikler
Bazen analojileri bilgisayarlardan uzak tutmaya yardımcı olur.
Bir topunuz ve iki çocuğunuz olduğunu varsayalım. Herhangi bir anda yalnızca bir çocuk topa sahip olabilir. Bununla birlikte, çocuklardan biri topu alırsa ve dikkatinin dağıldığı için serbest bırakmazsa (örneğin, televizyon izlerken), o zaman diğer çocuk topla oynamayacaktır.
Diğer çocuk bu kaynaktan engelleniyor.
Bunu televizyonla karşılaştırırsak, örneğin, birkaç çocuk herhangi bir noktada TV izleyebilir.
Kilitler
Veritabanı dünyasına geçersek, kaynakları kullanmanın farklı yolları olduğunu görüyoruz (tıpkı yukarıdaki iki örneğimiz gibi). "Okuma" yapabiliriz veya "yazma" yapabiliriz.
Verileri okumak istediğimizde, diğerlerinin de verileri okuyamaması için bir neden yoktur - tıpkı TV izleyen iki kişi gibi. Ancak, verileri yazmak istiyorsak, başka kimsenin bakmadığından emin olmamız gerekir. Biz yazarken okuyorlarsa, "kirli" okurlar. (Anlamı, verileri kısmen yazılmış, geçersiz olacaklarını göreceklerdir.)
Bu kirli okumaların asla gerçekleşmemesini sağlamak için iki ana kilit tipimiz vardır: Okuma Kilitleri ve Özel Kilitler.
Okuma Kilidi
Herhangi bir zamanda aynı veri kaynağından okunan farklı bağlantılara sahip olabilirsiniz. Ancak hiç kimsenin bu verileri okurken değiştirmemesini sağlamak için bir Okuma Kilidi alırlar.
Bir bağlantı verilerinin bir parçası üzerinde bir okuma kilitlendikten sonra onlar önce Okuma Kilidi serbest bırakılıncaya kadar, diğer bütün bağlantıları beklemesi gerektiğini yazma verileri. Ancak diğerleri aynı veri parçası üzerinde kendi Okuma Kilitlerini alabilirler.
Özel Kilit
Bir bağlantı bir veri parçasını güncellemek / eklemek / silmek istiyorsa, özel bir kilitleme yapmaları gerekir. Bu, başka herhangi bir bağlantının da verileri kilitlemesini önler (kilidi bu bağlantıya özel kılar).
Bir bağlantının veriler üzerinde özel bir kilidi varsa, verilerden başka hiçbir bağlantı okunamaz. Bu, yazılan verileri kimsenin okuyamayacağından emin olarak kirli okumaların önlenmesine yardımcı olur.
bloke etme
"Engelleme", başka bir bağlantı okumak veya yazmak istediğinde, bir bağlantının bir kaynak üzerinde bir kilit tuttuğu anlamına gelen bir terimdir. Bu, mutlaka sahibi bağlantısının onu serbest bırakmayacağı anlamına gelmiyor, şu anda elinde tutuyor.
Topu tutan bir çocukla bunu karşılaştırın. Topu tutan çocuk, diğer tüm çocukların topu tutmasını engelliyor.
çıkmaz
Bunu sormadığını biliyorum, ama kilitlenmelere ulaşmak için sadece bir adım daha kaldı (ve doğrudan engelleme ile ilgili).
Kilitlenmeler, her birinin kilidi olan iki bağlantınız olduğunda gerçekleşebilir, ancak birbirlerinin kaynağını ister. Bu senaryoda, her birinin bir topu olduğu, ancak diğerinin topunu istediği iki çocuk gibi.
Çocuklar gibi bu bağlantılar da hiç paylaşmak istemiyor. Devam etmek için her bağlantının her iki kaynağa da erişmesi gerekir. Bununla birlikte, kalıcı bir engelleme durumundalar. Bu durumda, üst (DBMS) içeri girmeli ve bir kaybeden seçmelidir, böylece çocuklardan biri (bağlantılar) her iki kaynağa da erişebilir.
Bu "kazanan" bağlantı yapıldıktan sonra, kaynakları serbest bırakır ve diğer ("kaybeden") bağlantı her iki kaynağa ulaşmak için tekrar deneyebilir.
Yani, kilitlenme kavramı, birbirinizi engelleyen iki kaynağınızın olduğu yerdir.
Burada , SQL Server'ın sunduğu tüm kilitleme kilitleri ve kilitlenmeye / kilitlenmeye neden olabilecek farklı kaynaklar hakkında daha fazla bilgi edinebilirsiniz. Makale eski, ancak yine de SQL Server 2000 ile 2008 R2 için geçerlidir. (SQL Server'ın sonraki sürümlerine eklenen birkaç kilit türü daha vardır, ancak bu size bir başlangıç noktası verecektir.)
Richard tarafından büyük açıklama, ama sadece resmi belgelere bağlantılar eklemek istedim. Bu konular SQL Server 2000 için yazılmıştır, ancak kavramların çoğu bugün aynıdır:
Engellemeyi Anlama ve Engelleme
SQL Server'da Kilitlemeyi Anlama
Düzenle - bazı eklemeler:
Engelleme Video ile Mücadele Beş Yolu - Kendra Little çok taze bir video (bugün yayınlanmıştır)
Dedektif Olarak DBA: Kilitleme ve Engelleme Sorunlarını Giderme - Rodney Landrum
SQL Profiler ile Engelleme Sorunları Nasıl Belirlenir - Brad McGehee
Her üçü de çok iyi bilinen SQL Server yazarları ve / veya MVP'lerdir.