Kilit modu
The Microsoft SQL Server Database Engine locks resources using different lock modes that determine how the resources can be accessed by concurrent transactions.
Aşağıdaki tablo, kaynak kilit modu gösterir Database Engine kullanır.
Kilit modu |
Açıklama |
---|---|
Paylaşılan (S) |
Okuma işlemleri değiştirmek veya bir deyim gibi verileri güncelleştirmek için kullanılır. |
Güncelleştirme (U) |
Güncelleştirilebilir kaynaklardaki kullanılır.Genel biçimi birden çok oturum okuma kilitleme ve olası kaynaklarını daha sonra güncelleştirme olduğunda oluşan çıkmaz engeller. |
Özel (X) |
INSERT, UPDATE veya DELETE gibi veri değiştirme işlemleri için kullanılır.Birden çok güncelleştirmeyi aynı yapılamaz, sağlar kaynak aynı anda. |
Hedefi |
kilit sıradüzeni oluşturmak için kullanılır.Hedefi kilitlerin türleri şunlardır: Paylaşılan hedefi (IS) hedefi özel (IX) ve hedefi ile özel (SIX). |
Şema |
Bir işlem şemada bağımlı kullanılan bir tablo yürütülüyor.Şema kilitlerin türleri şunlardır: şema değiştirme (Sch-M) ve şema kararlılık (Sch-S). |
Toplu güncelleştirme (BU) |
Kullanılan zaman toplu kopyalama verileri tabloya ve tablock ipucu belirtildi. |
Anahtar aralık |
Seri hale getirilebilir işlem yalıtım düzey kullandığınızda sorgunun okuma satır aralık korur.Diğer hareketler yeniden sorgular çalıştırın, seri hale getirilebilir hareket sorguları için geçerli satır ekleyemiyor sağlar. |
Paylaşılan kilitleri
Paylaşılan (S) kilitler (SELECT) Kötümser eşzamanlılık altında bir kaynak denetimi okuma eş zamanlı hareketlerin izin verir.Daha fazla bilgi için bkz:Eşzamanlılık Denetim türleri.Paylaşılan (S) kilitleri kaynağı var, ancak hiçbir işlem verileri değiştirebilirsiniz.(S) kilitler, üzerinde paylaşılan bir kaynak en kısa zamanda işlem yalıtım düzey yinelenebilir okuma veya daha yüksek olarak ayarlanmadığı sürece okuma işlemi tamamlanır gibi veya bir kilitleme ipucu paylaşılan (S) kilitler, işlem süresince korumak için kullanılan olarak yayımlanır.
Kilit Güncelleştir
Güncelleştirme (U) kilitlerin çıkmaz Ortak biçimi engeller.Yinelenebilir okuma veya seri hale getirilebilir bir hareket içinde hareket üzerindeki bir paylaşılan (S) kilidi alınıyor, verileri okur. kaynak (sayfa veya satır) ve sonra da bir Özel (X) kilit kilit dönüştürme gerekir verileri değiştirir.Iki hareket, üzerinde paylaşılan moddaki kilit almak, bir kaynak ve verileri aynı anda güncelleştirmek daha sonra denemek için bir işlem bir Özel (X) kilit kilit dönüştürmeye çalışır.özel kullanım kilidi bir hareketin diğer hareket paylaşılan moddaki kilit ile uyumlu olmadığı için paylaşılan modda-için-özel kullanım kilidi dönüştürme beklemeniz gerekir; kilit bekleme oluşur.Ikinci hareketi, güncelleştirme için bir Özel (X) kilit almak çalışır.Her iki hareket, (X) kilitlerin özel kullanım için dönüştürme ve bunların her bekliyor, paylaşılan moddaki kilit açmak diğer hareket tarihleri, çıkmaz oluşur.
Bu olası bir çıkmaz sorunun oluşmaması için , güncelleştirme (U) kilitlerin kullanılır.Tek bir işlem kaynağı için bir güncelleştirme (U) kilit edinebileceği bir saat.Bir hareket değiştirir, bir kaynak, güncelleştirme (U) kilit, bir Özel (X) kilit dönüştürülür.
Özel kilit
Özel (X) kilitler, eşzamanlı işlemler tarafından bir kaynağa erişimi engelliyor.Bir Özel (X) kilit hiç bir işlem verileri değiştirebilirsiniz; okuma işlemleri gerçekleştirebileceğiniz yalnızca NOLOCK ipucunu kullanımıyla yerleştirin veya kaydedilmemiş yalıtım düzey okunamıyor.
INSERT, UPDATE ve DELETE gibi veri değişiklik deyimleri, her iki değişiklik birleştirmek ve okuma işlemleri.deyim, önce gerekli değişikliği işlemleri gerçekleştirilmeden önce verileri almak için okuma işlemleri gerçekleştirir.Veri değişikliği deyimleri, bu nedenle, genellikle her iki isteği kilitler ve özel kilit paylaşılan.Örneğin, bir UPDATE deyim, bir satır değiştirebilirsiniz tablo ile başka bir birleştirmeki temel tablo.Bu durumda, UPDATE deyimi, paylaşılan kilitlerin satırda, birleştirmek okuma istekleri tablo yanında güncelleştirilmiş satırları üzerinde özel kilit isteniyor.
Hedefi kilitleri
The Database Engine uses intent locks to protect placing a shared (S) kilit or exclusive (X) kilit on a kaynak lower in the kilit hierarchy. En düşük kilit önce alınmış olduğundan hedefi kilitlerin hedefi kilitlerin adlandırıldığı düzey ve bu nedenle, kilitlerin altında bir alt yerleştirmek için hedefi sinyal düzey.
Hedefi kilitlerin iki amaca hizmet eder:
Yüksek değiştirme gelen diğer hareketleri engellemek için-düzey kaynak en düşük kilidi kılacak biçimde düzey.
Verimliliğini artırmak için Database Engine en yüksek kilit çakışması algılama, düzey, taneciklik.
Örneğin, paylaşılan bir hedefi kilit tabloya istenen düzey sayfaları veya satırları bu tabloda, kilitlerin paylaşılan (S) önce istenir.Tabloya bir hedefi kilit ayarını düzey daha sonra da Özel (X) bir sayfa içeren tabloyu kilitlendiğinde alınıyor'den başka bir işlem engeller.Hedefi kilitrin performansı için Database Engine yalnızca en amaçlı kilit inceler düzey bir hareket güvenli bir tabloyu kilit, belirlenemiyor. Bu, her satır veya sayfa kilit incelemek için gereksinimin kaldırır tablo bir hareketin tüm kilitleyebilirsiniz belirlemek için tablo.
Hedefi kilitler ve amacı ile özel (SIX) paylaşılan paylaşılan hedefi (IS) hedefi özel (IX)'nı içerir.
Kilit modu |
Açıklama |
---|---|
Paylaşılan hedefi (IS) |
Istenen veya alınan kaynaklardaki bazı (ancak tümü) hiyerarşisinde daha düşük paylaşılan kilitlerin korur. |
Özel kullanım amacını (IX) |
Istenen veya alınan kaynaklardaki bazı (ancak tümü) hiyerarşisinde daha düşük özel kilit korur.IX IS kümesidir ve alt düzey kaynaklardaki paylaşılan kilitlerin isteyen da korur. |
Amacı ile özel (SIX) paylaşılan |
Paylaşılan istenen veya alınan kilitlerin alt sıradüzeni ve hedefi özel kilit bazı (ancak tüm) içinde tüm kaynakları koruyan daha düşük düzey kaynakların.En üst düzey kaynak eşzamanlı IS kilitlerin izin verilir.Örneğin, bir tabloda SIX kilidi alınıyor de hedefi, değiştirilen sayfa üzerinde özel kilit ve değiştirilen satırları üzerinde özel kilit edinme.Olabilir yalnızca SIX bir kaynak aynı anda, diğer hareketleri kaynakları düşük hiyerarşik olarak Tablo düzeyinde IS kilitlerin'nı edinme okuyabilirsiniz ancak diğer işlemler tarafından yapılan kaynak güncelleştirmelerini engelleme kilitlenemedi. |
Hedefi güncelleştirme (IU) |
Istenen veya alınan kilitlerin hierachy içinde alt tüm kaynaklardaki korur.IU kilitleri sayfasını kaynaklardaki kullanılır.Bir güncelleştirme işlemi gerçekleştikten, IU kilitlerin IX kilitlerin için dönüştürülür. |
Paylaşılan hedefi güncelleştirme (SIU) |
Ayrı olarak ve aynı anda her iki kilit tutan bu kilidi alınıyor sonucunda, S, IU kilitlerin birleşimi.Örneğin, bir işlem PAGLOCK ipucu bir sorgu yürütür ve sonra bir güncelleştirme işlemi yürütür.S kilit PAGLOCK ipucu sorgusuyla edinme ve güncelleştirme işlemi IU kilit edinme. |
Güncelleştirme hedefi özel (UIX) |
Ayrı olarak ve aynı anda her iki kilit tutan bu kilidi alınıyor sonucunda, U ve IX kilitlerin birleşimi. |
Şema kilitleri
The Database Engine uses schema modification (Sch-M) locks during a tablo veri tanımı language (DDL) operation, such as adding a sütun or dropping a tablo. Bunu tutulduğu saat içinde Sch-M kilit eşzamanlı erişimi engeller tablo.Bu kilit yayımlanıncaya kadar Sch-M kilit tüm dış işlemleri engellediği anlamına gelir.
Tablo kesme gibi bazı veri işleme dili (DML) işlemleri Sch-M kilitlerin eşzamanlı operasyonlar tarafından etkilenen tablolara engellemek için kullanın.
The Database Engine uses schema stability (Sch-S) locks when compiling and executing queries.Sch-S kilitler, Özel (X) kilitleri dahil olmak üzere herhangi bir işlem kilit engellemeyin.Bu nedenle, tablo üzerinde kilitleri X olanlar da dahil olmak üzere, diğer hareketleri sorguda derleniyor sırasında çalışmaya devam eder.Ancak, tablo üzerinde eşzamanlı DDL) işlemlerini ve Sch-M kilitlerinin Sunucusu'ndan eşzamanlı DML işlemi gerçekleştirilemez.
Toplu güncelleştirme kilitleri
The Database Engine uses bulk update (BU) locks when bulk copying data into a tablo, and either the TABLOCK hint is specified or the tablo kilit on toplu yükleme tablo option is küme using sp_tableoption.Toplu güncelleştirme (BU) kilitler, yük verileri aynı anda aynı tabloya veri tablo erişimini yükleme bulk olmayan diğer işlemleri engelleyen sırasında toplu olarak birden çok iş parçacığı sağlar.
Anahtar-aralık kilitleri
Anahtar aralık kilitlerin örtülü bir kayıtta bulunan satır aralık koruma küme tarafından okunan bir Transact-SQL seri hale getirilebilir hareket yalıtım düzeyne kullanırken deyim'ı tıklatın. Anahtar aralık kilitleme hayali okuma engeller.Anahtarlarının satırlar arasındaki aralık koruyarak, ayrıca hayali eklemeleri veya silmeleri bir kayıt defterine engeller küme bir işlem tarafından erişilebilir.