Key-Range Locking
Zakres klawiszy blokad ochrony zakres wierszy niejawnie zawartych zestaw rekordów odczytywany przez Transact-SQL Instrukcja podczas korzystania z poziom izolacji transakcji możliwy do serializacji. Poziom izolacji możliwy do serializacji wymaga, że dowolny typ kwerendy wykonywane podczas transakcji musi uzyskać ten sam zestaw wierszy przy każdym jest wykonywane podczas transakcji.Blokada klucz zakres chroni to wymaganie zapobieganie inne transakcje wstawiać nowe wiersze, których klawiszy czy mieszczą się w zakresie transakcji można odczytać kluczy.
Blokowanie zakres klucz chroni fantomu odczytów.Przez ochronę zakresów kluczy między wierszami, również zapobiega fantomu wstawienia zestaw rekordów dostępne dla transakcji.
Blokada klucz zakres jest umieszczany na indeks, określający początkowy i końcowy wartości klucz.Ta blokada blokuje każda próba wstawienia, zaktualizować lub usunąć dowolnego wiersza o wartości klucz, która znajduje się w zakresie, ponieważ te operacje najpierw musi uzyskać blokady w indeksie.Na przykład można transakcji może wydać instrukcję SELECT, który czyta wszystkie wiersze, których wartości klucz są między "AAA" and "CZZ".Zakres klucz blokada na wartości kluczy w zakresie od "AAA" to "CZZ" zapobiega inne transakcje wstawiać wiersze, dla których wartości kluczy w dowolne miejsce w tym zakresie, takie jak "ADG", "BBD", lub "CAL".
Tryby Zablokuj zakres klucz
Zakres klawiszy blokad obejmują zarówno zakresu, jak i składnik wierszy określona w formacie wiersza zakresu:
Zakres reprezentuje trybu blokada, ochrona zakresu między dwa wpisy numer kolejny.
Wiersz reprezentuje trybu blokada, ochrony hasło indeksu.
Tryb reprezentuje tryb blokada Scalonej używany.Tryby Blokada klucz zakres składają się z dwóch części.Pierwsza reprezentuje typ blokada używane do blokada indeksu zakres (Range)T) a drugi reprezentuje typu blokada, używane do blokada klucz (K).Dwie części są związane z łącznika (-), takie jak zakresT-K.
Zakres
Wiersz
Tryb
Description
Zakresy
S
Zakresy S
Zakres udostępnionego, blokada zasób udostępnionych, skanowanie możliwy zakres.
Zakresy
U
Zakresy U
Zakres udostępnionego, blokada zasób aktualizacji; skanowanie aktualizacji możliwy do serializacji.
RangeI
Wartości null
N RangeI
Wstaw zakres blokada zasób null, używanych 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 aktualizacji klucz w zakresie.
Uwaga
Wewnętrzny trybu blokada null jest zgodny z innych trybów blokada.
Tryby Blokada klucz zakres ma macierzy zgodności, która pokazuje blokady, które są zgodne z innymi blokad na klucze zachodzących na siebie i zakresów.Pełne macierzy blokady zgodności zobacz Blokada zgodności.
|
Istniejące przyznane trybu |
|
|
|
|
|
|
|---|---|---|---|---|---|---|---|
Żądany tryb |
S |
U |
X |
Zakresy S |
Zakresy U |
N RangeI |
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 |
N RangeI |
Tak |
Tak |
Tak |
Nie |
Nie |
Tak |
Nie |
RangeX-X |
Nie |
Nie |
Nie |
Nie |
Nie |
Nie |
Nie |
Blokowanie konwersji
Konwersja blokady są tworzone podczas Blokada klucz zakres nakłada się na inne blokady.
Blokada 1 |
Blokada 2 |
Konwersja blokada |
|---|---|---|
S |
N RangeI |
RangeI-S |
U |
N RangeI |
RangeI-U |
X |
N RangeI |
RangeI-X |
N RangeI |
Zakresy S |
RangeX-S |
N RangeI |
Zakresy U |
RangeX-U |
Konwersja blokad można zaobserwować przez krótki okres czas w różnych okolicznościach złożonych, czasami po uruchomieniu równoczesnych procesów.
Możliwy do serializacji skanowanie zakres, Singleton pobierania, DELETE i Wstaw
klucz-zakres blokowania zapewnia, że następujące operacje są można:
Zakres kwerendy skanowania
Pobieranie pojedynczych nieistniejącego wiersza.
Usuwanie operacji
Wstawianie operacji
Zanim klucz zakres blokowania może wystąpić, muszą być spełnione następujące warunki:
Poziom izolacji transakcji musi być równa SERIALIZABLE.
Procesor kwerend muszą używać indeks do implementacji predykat Filtr zakres.Na przykład klauzula WHERE w instrukcja SELECT można ustanowić warunek zakres o tym predykacie: N BETWEEN ColumnX "AAA" I N**"CZZ"**.Tylko może można pobrać blokada klucz zakres, jeśli ColumnX jest objęty klawisza indeksu.
Przykłady
Następującą tabela i indeksu są używane jako podstawa dla przykładów blokowania zakres klucz, w których należy postępować zgodnie z.
.gif)
Zakres kwerendy skanowania
W celu zapewnienia zakres kwerendy skanowania jest możliwy do serializacji, tej samej kwerendy powinien zwracać te same wyniki, jest wykonywana w obrębie tej samej transakcji.Nowe wiersze nie muszą być wstawione w obrębie 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 klawiszy blokad są umieszczane na pozycji indeksu odpowiadającą liczbie wierszy danych, gdzie nazwa jest między wartościami ADAM oraz Dale, zapobieganie nowe wiersze kwalifikujących się w poprzedniej kwerendy są dodawane lub usuwane.Imię w tym zakresie jest ADAM, blokada zakresów S trybu zakres klucz tego wpisu indeksu zapewnia, że nowa nazwa zaczyna się od litery A mogą być dodawane przed ADAM, takie jak Abigail.Podobnie blokadę klucz zakres zakresów S wpisu indeksu dla Dale zapewnia, że nowa nazwa zaczyna się od litery C mogą być dodawane po Carlos, takie jak Clive.
Uwaga
Liczba zakresów S blokady przechowywane jest n+1, where n to liczba wierszy, które spełniają kwerendy.
Pojedyncza pobierania z braku danych
Jeśli kwerendy w obrębie transakcji będzie próbował zaznacz wiersz, który nie istnieje, wydawania kwerendę później w obrębie tej samej transakcji musi zwracać taki sam wynik.Nie inne transakcje można może wstawić tego nieistniejącego wiersza.Na przykład biorąc pod uwagę tę kwerendę:
SELECT name
FROM mytable
WHERE name = 'Bill';
Blokada klucz zakres znajduje się na pozycję indeksu odpowiadającą zakresu nazw z Ben Aby Bing ponieważ nazwy Bill Czy można wstawić między te dwa wpisy indeksu sąsiadujących ze sobą. Blokada klucz zakres trybu zakresów S znajduje się na pozycji indeksu Bing. Dzięki temu inne transakcje wstawiać wartości, takie jak Bill, między pozycji indeksu Ben i Bing.
Usuwanie operacji
Podczas usuwania wartości w obrębie transakcji, wartość mieści się w zakresie nie ma być zablokowane przez cały czas trwania operacji usuwania transakcji.Blokowanie usuniętych wartości klucz do momentu zakończenia transakcji jest wystarczająca, aby zachować uszeregowieniem.Na przykład biorąc pod uwagę tej instrukcja DELETE:
DELETE mytable
WHERE name = 'Bob';
Blokada wyłączności (X) jest umieszczany na pozycję indeksu odpowiadającą nazwę Bob. Inne transakcje będą mogli wstawiać lub usuwać wartości, przed lub po usuniętych wartości Bob. Jednak każdą transakcję, która próbuje do odczytu, wstawiania lub usunąć wartość Bob będą zablokowane aż do usuwania transakcji zatwierdza lub toczy się ponownie.
Usuwanie zakres mogą być wykonywane przy użyciu trzech trybach blokada podstawowe: wiersz, strona lub blokadę tabela. Wiersz, strona lub tabela strategii blokowania jest ustalona przez optymalizator kwerendy lub może być określony przez użytkownika za pośrednictwem wskazówek dotyczących optymalizacji, takie jak ROWLOCK, PAGLOCK lub TABLOCK.Użyto PAGLOCK lub TABLOCK Database Engine zwalnia bezpośrednio strona indeksu, usunięcie wszystkich wierszy z tej strony. Z drugiej strony użyto ROWLOCK wszystkie usunięte wiersze są oznaczone jako usunięte tylko; są one usuwane z strona indeksu później za pomocą zadania w tle.
Wstawianie operacji
Podczas wstawiania wartości w obrębie transakcji, wartość mieści się w zakresie nie ma być zablokowane przez cały czas trwania operacji wstawiania transakcji.Blokowanie wstawianych wartości klucz do momentu zakończenia transakcji jest wystarczająca, aby zachować uszeregowieniem.Na przykład biorąc pod uwagę tej instrukcja INSERT:
INSERT mytable VALUES ('Dan');
Blokada klucz zakres trybu RangeI-N, jest umieszczony na hasło indeksu, odpowiadający nazwie David, aby sprawdzić zakres.W przypadku przyznania blokady Dan dodaje się i blokada wyłączności (X) jest umieszczany na wartość Dan. Blokada klucz zakres trybu RangeI-N, jest konieczne tylko po to sprawdzić zakres i nie jest używana przez cały czas trwania operacji wstawiania transakcji.Inne transakcje będą mogli wstawiać lub usuwać wartości, przed lub po wstawionych wartości Dan. Jednak każdą transakcję, próba odczytania, wstawianie lub usuwanie wartości Dan zostanie zablokowana aż do chwili, kiedy Wstawianie transakcji zatwierdza lub toczy się ponownie.