Udostępnij za pośrednictwem


Blokowanie zakresu klucza

Zakres klucz blokad Chroń zakres wierszy niejawnie zawarte w zestaw rekordów odczytywany przez Transact-SQL instrukcja podczas używania poziom izolacji transakcji możliwy do serializacji.Poziom izolacji serializować wymaga, że wszelkie kwerendy wykonywane podczas transakcji musi uzyskać ten sam zestaw wierszy każdego czas jest wykonywane podczas transakcji.A blokada zakres kluczy chroni tego wymogu zapobiegając inne transakcje z wstawienie nowych wierszy, którego klucze podlegałyby w zakresie odczytywanie przez serializować transakcji.

Blokowanie zakres klucz uniemożliwia fantomu odczytów.Poprzez ochronę zakresy kluczy między wierszami, uniemożliwia także fantomu wstawienia do zestaw rekordów, dostęp do transakcji.

Zakres klucz blokada jest umieszczony na indeks, określający początkowy i końcowy wartości klucza.blokada blokuje próby wstawiania, aktualizacji lub usuwania dowolnego wiersza z wartości klucz, która znajduje się w zakres , ponieważ te operacje musiałaby najpierw uzyskać blokada w indeksie.Na przykład można serializować transakcji może wydać SELECT instrukcja który czyta wszystkie wiersze, których wartości klucz są między 'AAA' i 'CZZ'.Blokada klucz zakres wartości kluczy w zakresie od 'AAA' do 'CZZ' zapobiega inne transakcje wstawiać wiersze zawierające wartości klucz gdziekolwiek w tym zakresie, takich jak 'ADG', 'BBD', lub 'CAL'.

Tryby Zablokuj zakres klucza

Zakres klucz blokad obejmują zakres i składnik wiersza określonego w formacie zakres wierszy:

  • Zakres reprezentuje blokada tryb ochrony zakresu między dwa kolejne pozycje indeksu.

  • Wiersz reprezentuje blokada tryb ochrony hasło indeksu.

  • Tryb reprezentuje Scalonej blokada tryb używany.Zakres klucz blokada tryby, które składają się z dwóch części.Pierwsza reprezentuje typu blokada używane do blokada zakresu indeksu (zakrest), a druga typu blokada używane do blokada określonego klucz (k).Dwie części są połączone z łącznika (-), takie jak zakrest-k.

    Zakres

    Wiersz

    Tryb

    Opis

    Zakresy

    S

    Zakresy S

    Zakres udostępnionego, blokada zasób udostępnionego; serializować zakres skanowania.

    Zakresy

    U

    Zakresy U

    Zakres udostępnionego, blokada zasób aktualizacji; skanowanie aktualizacji możliwy do serializacji.

    RangeI

    Wartość null

    RangeI N

    Wstaw zakres blokada zasób null; używane do testowania zakresów przed wstawieniem nowego klucz na indeks.

    RangeX

    X

    RangeX-X

    Zakres wyłączności, blokada wyłączności zasób; używane podczas aktualizowania klucz w zakres.

Ostrzeżenie

Wewnętrzny tryb blokada Null jest zgodny z innych trybów blokada.

Zakres klucz blokada tryby mają Matryca kompatybilności, która pokazuje, która blokadas są zgodne z innymi blokadas uzyskane na siebie klucze i zakresy.Pełna macierzy blokada zgodności, zobacz Zgodności blokada.

 

Istniejące przyznane tryb

 

 

 

 

 

 

Żądany tryb

S

U

X

Zakresy S

Zakresy U

RangeI N

RangeX-X

Udostępnione (S)

Tak

Tak

Nie

Tak

Tak

Tak

Nie

Aktualizacja (U)

Tak

Nie

Nie

Tak

Nie

Tak

Nie

Wyłączne (X)

Nie

Nie

Nie

Nie

Nie

Tak

Nie

Zakresy S

Tak

Tak

Nie

Tak

Tak

Nie

Nie

Zakresy U

Tak

Nie

Nie

Tak

Nie

Nie

Nie

RangeI N

Tak

Tak

Tak

Nie

Nie

Tak

Nie

RangeX-X

Nie

Nie

Nie

Nie

Nie

Nie

Nie

Konwersja blokad

Konwersja blokada są tworzone podczas Zablokuj zakres klucz nakłada się na inny blokada.

Zablokuj 1

Zablokuj 2

Konwersjablokada

S

RangeI N

RangeI S

U

RangeI N

RangeI U

X

RangeI N

RangeI-X

RangeI N

Zakresy S

RangeX S

RangeI N

Zakresy U

RangeX U

Blokady konwersji można zaobserwować na krótki okres czas w różnych okolicznościach złożonych niektóreczass podczas uruchamiania procesów równoczesnych.

Serializować zakresu skanowania, Singleton Fetch Delete i Wstaw

Blokowanie zakres klucz zapewnia, że następujące operacje są serializować:

  • Zakres kwerendy skanowania

  • Pobranie Singleton nieistniejącej linii

  • Operacja usuwania

  • Wstawianie operacji

Przed klucz zakres blokowania może wystąpić, muszą być spełnione następujące warunki:

  • Poziom izolacji transakcji musi być zestaw do SERIALIZABLE.

  • Procesor kwerend należy użyć indeksu, aby zaimplementować predykat Filtr zakres.Na przykład klauzula WHERE w instrukcja SELECT może ustanowić warunek zakres z tym predykacie: ColumnX BETWEEN N**'AAA'** N I**'CZZ'**.Zakres klucz blokada mogą być nabyte jedynie, jeśli ColumnX jest objęta kluczy indeksu.

Przykłady

Poniższej tabela i indeksu są używane jako podstawa przykłady klucz zakres blokowania, występujące.

Tabela bazy danych z ilustracją b-drzewa indeksu

Zakres kwerendy skanowania

Aby zapewnić zakres kwerendy skanowania jest możliwy do serializacji, tej samej kwerendy powinien zwrócić takie same wyniki każdego czas jest wykonywany w ramach tej samej transakcji.Nowe wiersze nie musi znajdować się wewnątrz zakres kwerendy skanowania przez inne transakcje; w przeciwnym wypadku te stają się wstawia fantomów.Na przykład poniższa kwerenda używa tabela i indeksu na poprzedniej ilustracji:

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

Zakres klucz blokady są umieszczane na pozycje indeksu odpowiadających zakresowi wierszy danych, gdzie nazwa jest między wartościami Adam i Dale, zapobieganie nowe wiersze kwalifikujących się w poprzedniej kwerendy dodane lub usunięte.Chociaż imię w tym zakresie jest Adam klucza trybu zakresów S-zakres blokada dla tego indeksu wpis zapewnia, że nie nowe nazwy, począwszy od litery a mogą być dodawane przed Adam, takich jak Abigail.Podobnie blokada klucz zakres zakresów s wpisu indeksu dla Dale zapewnia, że nie nowe nazwy rozpoczynające się literą c mogą być dodawane po Carlos, takich jak Clive.

Ostrzeżenie

Liczba zakresów s blokady utrzymywane jest n+ 1, gdzie n jest liczba wierszy, które spełniają kwerendy.

Pobieranie pojedynczych nieistniejącej danych

Jeśli kwerenda w obrębie transakcji próbuje zaznacz wiersz, który nie istnieje, wydawania kwerendę później w obrębie tej samej transakcji ma zwraca ten sam wynik.Nie inne transakcje można zezwolić na wstawianie tego nieistniejącej linii.Na przykład podane tej kwerendy:

SELECT name
    FROM mytable
    WHERE name = 'Bill';

Zakres klucz blokada znajduje się wpis indeksu, odpowiadających zakresowi nazwę z Ben do Bing ponieważ nazwa Bill będą wstawiane między tych dwóch wpisów indeksu sąsiadujących.Klucz trybu zakresów S-zakres blokada znajduje się wpis indeksu Bing.Zapobiega to innych transakcji z wstawianiu wartooci, takich jak Bill, między pozycje indeksu Ben i Bing.

Operacja usuwania

Podczas usuwania wartości w obrębie transakcji, zakres podzielić wartość na nie ma zablokowany na czas trwania transakcji, do wykonywania operacji usuwania.Blokowanie usuniętych wartości klucz do momentu zakończenia transakcji jest wystarczający do utrzymania uszeregowieniem.Na przykład podane tej instrukcja DELETE:

DELETE mytable
    WHERE name = 'Bob';

Blokada wyłączności (X) jest umieszczany na wpis indeksu, odpowiadającego nazwie Bob.Inne transakcje można wstawić lub usunąć wartości przed lub po usuniętych wartości Bob.Jednakże każdą transakcję, która próbuje odczytywać, Wstaw lub usuń wartość Bob będą zablokowane, dopóki usuwanie transakcji zatwierdza lub toczy się wstecz.

Usuń zakres mogą być wykonywane przy użyciu trzy tryby blokada podstawowe: wiersz, strona, lub blokada tabela.Wiersz, strona lub tabela strategii blokowania postanowiła przez optymalizator kwerendy lub może być określony przez użytkownika za pośrednictwem wskazówek dotyczących optymalizacji, takich jak ROWLOCK, PAGLOCK lub TABLOCK.Gdy używana jest PAGLOCK lub TABLOCK, Aparat baz danych natychmiast zwalnia strona indeksu, jeśli wszystkie wiersze są usuwane z tej strony.Natomiast w przypadku ROWLOCK wszystkie usunięte wiersze są oznaczane tylko jako usunięte; są usuwane ze strona indeksu później przy użyciu zadania w tle.

Wstawianie operacji

Podczas wstawiania wartości w obrębie transakcji, zakres podzielić wartość na nie ma zablokowany na czas trwania operacji wstawiania transakcji.Blokowanie wstawionego wartości klucz do momentu zakończenia transakcji jest wystarczający do utrzymania uszeregowieniem.Na przykład podane tej WSTAWKI instrukcja:

INSERT mytable VALUES ('Dan');

Klucz trybu RangeI N-zakres blokada jest umieszczony na pozycję indeksu odpowiadającą nazwie David, aby przetestować zakres.W przypadku przyznania blokady Dan dodaje się i blokada wyłączności (X) jest umieszczany na wartość Dan.Klucz trybu RangeI N-zakres blokada jest konieczne tylko przetestować zakres i nie jest przechowywana na czas trwania operacji wstawiania transakcji.Inne transakcje można wstawić lub usunąć wartości przed lub po wstawionych wartość Dan.Jednakże każdą transakcję próby odczytu, wstawiania lub usuwania wartości Dan zostanie zablokowana, dopóki Wstawianie transakcji zatwierdza lub toczy się wstecz.