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.
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.