Aracılığıyla paylaş


Anahtar aralık kilitleme

aralık anahtar kilitleri korunmasına dolaylı olarak bir kayıtta bulunan satır aralık küme tarafından okunan birTransact-SQLdeyim kullanırken seri hale getirilebilir hareket yalıtım düzeyne.İşlem sırasında çalıştırılan herhangi bir sorgu aynı elde seri hale getirilebilir yalıtım düzey gerektiren küme hareket sırasında yürütülecek olan her satır.anahtar aralık kilidi seri hale getirilebilir hareketin okuma anahtarları aralığında, tuşları denk yeni satır ekleme gelen diğer hareketleri engelleyerek bu gereksinimi korur.

Anahtar aralık kilitleme hayalet okuma engeller.Anahtar satırlar arasındaki aralık koruyarak, ayrıca bir işlem tarafından erişilen kayıt kümesi içinde hayalet eklemeler engeller.

Belirleyen bir başlangıç ve bitiş anahtar değeri bir dizin, anahtar aralık kilit yerleştirilir.Bu kilit ekleme, güncelleştirme veya bu işlemleri ilk dizin üzerinde kilit almak zorunda kalacağından, aralıktaki anahtar değeri olan bir satırı silmek için herhangi bir girişim engeller.Örneğin, seri hale getirilebilir bir işlem sorun anahtar değerleri olan arasındaki tüm satırlar okuyan bir deyim**'AAA'** and 'CZZ'.Anahtar aralık kilit aralığından anahtar değerleri hakkında**'**AAA ' için ' CZZ ' gibi bu aralıktaki herhangi bir önemli değerlere sahip satırlar ekleme gelen diğer hareketlerini engelleyen ' ADG ' , ' BBD ' veya ' CAL ' .

Anahtar aralık kilit modu

aralık anahtar kilitleri aralık hem de satır aralık satır biçiminde belirtilen bileşen içerir:

  • Aralık, aralık iki ardışık dizin girişleri arasında koruma kilit modu gösterir.

  • Satır dizin girdisi koruma kilit modu gösterir.

  • Mod, kullanılan birleşik kilit modu gösterir.Anahtar aralık kilit modu iki bölümden oluşur.İlk dizin aralığı kilitlemek için kilitleme türünü gösteren (aralık T) ve saniye ( K) belirli anahtar kilitlemek için Kilit türü.İki parça aralık gibi bir tire (-) ile bağlıT-K.

    Aralık

    Row

    Modu

    Açıklama

    Aralıkları

    S

    Aralık-S

    Paylaşılan aralık, paylaşılan kaynağa kilit; tarama aralık seri hale getirilebilir.

    Aralıkları

    U

    Aralık-U

    Paylaşılan aralık, güncelleştirmenin kaynak kilit; seri hale getirilebilir güncelleştirmesi taraması.

    RangeI

    null

    RangeI-N

    null kaynak kilit aralık ekler; yeni bir anahtar dizini eklemeden önce aralıkları sınamak için kullanılır.

    RangeX

    X

    RangeX-X

    Özel aralık, özel kaynak kilit; bir aralıktaki anahtar güncellenirken kullanılır.

Not

İç null kilit modu, uyumlu tüm diğer kilit modu.

Anahtar aralık kilitleme modu gösteren hangi kilit çakışan anahtarları ve aralıkları diğer kilit uyumlu uyumluluk matrisi vardır.Tam matrisi, kilit uyumluluğu için bkz:Kilit uyumluluğu.

 

Mod izni var

 

 

 

 

 

 

İstenen mod

S

U

X

Aralık-S

Aralık-U

RangeI-N

RangeX-X

Paylaşılan (S)

Evet

Evet

Hayır

Evet

Evet

Evet

Hayır

Güncelleştirme (U)

Evet

Hayır

Hayır

Evet

Hayır

Evet

Hayır

Özel (X)

Hayır

Hayır

Hayır

Hayır

Hayır

Evet

Hayır

Aralık-S

Evet

Evet

Hayır

Evet

Evet

Hayır

Hayır

Aralık-U

Evet

Hayır

Hayır

Evet

Hayır

Hayır

Hayır

RangeI-N

Evet

Evet

Evet

Hayır

Hayır

Evet

Hayır

RangeX-X

Hayır

Hayır

Hayır

Hayır

Hayır

Hayır

Hayır

Dönüştürme kilitleri

Başka bir kilit anahtar aralık kilitle çakışıyor dönüştürme kilit oluşturulur.

Kilit 1

Kilit 2

Dönüştürme kilit

S

RangeI-N

RangeI-S

U

RangeI-N

RangeI-U

X

RangeI-N

RangeI-X

RangeI-N

Aralık-S

RangeX-S

RangeI-N

Aralık-U

RangeX-U

Bazen eş zamanlı işlemler çalışırken saat farklı karmaşık durumlarda kısa bir saat için dönüştürme kilit gözlenen.

Seri hale getirilebilir aralık tarama Singleton Fetch, Sil, Ekle

Anahtar aralık kilitleme sağlar aşağıdaki işlemleri seri hale getirilebilir:

  • Tarama sorgu aralık

  • Varolmayan bir satırın tek getirme

  • Silme işlemi

  • İşlem Ekle

Anahtar aralık kilitleme oluşabilir önce aşağıdaki koşullar sağlanmalıdır:

  • İşlem yalıtım düzey SERIALIZABLE için küme olması gerekir.

  • Query processor aralığa filtre koşulunu uygulamak için bir dizin kullanmanız gerekir.Örneğin, bir deyim içindeki WHERE yan tümce bu karşılaştırma belirtimi ile aralık koşul Başaran: ColumnX BETWEEN N**'AAA'** AND N**'CZZ'.Anahtar aralık kilit yalnızca alınanColumnX** üzeri bir dizin anahtarı.

Örnekler

Aşağıdaki tablo ve dizin olarak izleyen anahtar aralık kilitleme örnekler için kullanılır.

Database table with index b-tree illustration

Tarama sorgu aralık

Tarama aralık sorgu seri hale getirilebilir olduğundan emin olmak için aynı sorguyu, aynı işlem içinde gerçekleştirildiği her seferinde aynı sonuçlar döndürmesi gerekir.Yeni satır aralık tarama sorgu diğer hareketler tarafından eklenmelidir değil; aksi halde, bu gölge ekler haline gelir.Örneğin, aşağıdaki sorgu, tablo ve dizin önceki resimde kullanır:

SELECT name
    FROM mytable
    WHERE name BETWEEN 'A' AND 'C';

Adı Gamze ve Dale değerleri arasında olduğu veri satırlarını aralığına karşılık gelen, yeni satır önceki sorguda eklenen veya silinen uygun önleme dizin girişlerini anahtar aralık kilidi yerleştirilir.Bu aralıktaki adı Gamze, aralık-S modu anahtar aralık olsa kilit A harfi ile başlayan yeni adlar Gamze Abigail gibi önce eklenebilir, bu dizin girişi sağlar.Benzer şekilde, Dale için dizin girişi aralık-S anahtar aralık kilitlendiğinde, Carlos Clive, sonra C eklenebilir harfi ile başlayan yeni adlar sağlar.

Not

Aralık-S kilit sayısı tutulurnn sorgu. karşılayan satır olduğu + 1,

Var olmayan verileri, tek getirme

Varolmayan bir satır seçmek sorgu bir işlem içinde çalışır, aynı sonuca dönmek aynı işlem içinde daha sonra bir noktada sorgu verme bulunur.Başka bir işlem, varolmayan bir satır eklemek için verilir.Örneğin, bu sorgu verilir:

SELECT name
    FROM mytable
    WHERE name = 'Bill';

Anahtar aralık kilit ad aralığından karşılık gelen dizin girişi yerBentoBingiçin adıBilleklenen arasında bu iki bitişik dizin girişleri.Aralık-S modu anahtar aralık kilit üzerinde dizin girdisi yerBing.Herhangi bir hareket, değerleri ekleme gibi gelen bu engellerBill, dizin girişleri arasındaBenveBing.

Silme işlemi

Bir işlem içinde bir değer silerken, silme işlemi işlem süresince kilitlenmesine değeri içine düşen aralık.Silinen anahtar değeri serializability sürdürmek için yeterli işlem sonuna kadar kilitlemek.Örneğin, bu DELETE deyim verilir:

DELETE mytable
    WHERE name = 'Bob';

Bir özel (X) kilit adına karşılık gelen dizin girişi yerBob.Diğer hareketler ekleyebilir veya değerleri önce veya sonra silinen değeri silmeBob.Ancak, herhangi bir hareket, denediği okuma, ekleme veya değer silmeBobengellenmiş kadar silme hareketi tamamlar veya toplar geri.

aralık silmek yürütülen üç temel kilit modu kullanarak: Satır, sayfa veya tablo kilit. Satır, sayfa veya tablo kilitleme stratejisini sorgu iyileştiricisi tarafından belirlenir veya ROWLOCK, PAGLOCK veya TABLOCK gibi en iyi hale getirme ipuçları ile kullanıcı tarafından belirlenebilir., PAGLOCK veya TABLOCK kullanılır,Database EngineDizin sayfa, bu sayfanın. tüm satırlar silinir hemen kaldırırBuna karşılık, ROWLOCK kullanıldığında, tüm silinmiş satırlar yalnızca silinmiş olarak işaretlenir; bunları daha sonra arka plan görevi kullanarak dizin sayfasından kaldırılır.

İşlem Ekle

Bir işlem içinde bir değer eklerken, değeri içine düşen aralık ekleme işlemi işlem süresi için kilitlenmesi yok.Serializability sürdürmek için yeterli işlem sonuna kadar eklenen anahtar değeri kilitleme.Örneğin, bu INSERT deyim verilir:

INSERT mytable VALUES ('Dan');

RangeI-N mod anahtar aralık kilit aralık sınamak için David adına karşılık gelen dizin girişi eklenir.Kilidi izni,Daneklenir ve bir özel (X) kilit değerini yerleştirilirDan.RangeI-N mod anahtar aralık kilit aralık yalnızca sınama gereklidir ve hareket ekleme işlemi süresince tutulur.Diğer hareketler ekleyebilir veya değerleri önce veya sonra eklenen değer silmeDan.Ancak, okumak, çalışırken bir hareket ekleme, veya değer silmeDanKilitli kadar ekleme hareketi tamamlar veya toplar geri.