Blokada wiersza
Blokada wiersza to najniższy poziom szczegółowości blokowania możliwy w SQL Server. Oznacza to, że co najmniej jeden określony wiersz zostanie zablokowany, a sąsiednie wiersze będą nadal dostępne do blokowania przez współbieżne zapytania.
Blokada strony
Blokada strony w SQL Server blokuje dane o wartości 8K, nawet jeśli zapytanie wymaga tylko 10 bajtów strony. Twoje zapytanie zablokuje więc dodatkowe dane, których nie żądasz w zapytaniu.
Blokada Hobta
Kiedy tabela jest partycjonowana za pomocą „partycjonowania tabeli SQL Server”, możliwe jest, że pojedyncza partycja zostanie zablokowana (Hobt oznacza Heap lub B-Tree)
Uwaga: Eskalacja blokady do zamków HOBT jest domyślnie wyłączona. uruchom ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO)
aby włączyć eskalację blokady HOBT.
Blokada stołu
Blokada stołu zablokuje cały stół.
Co to są strony danych
Microsoft SQL Server organizuje wszystkie swoje dane w „stronach danych”, które mogą przechowywać dane o wartości 8K. Oznacza to, że dla każdego dostępu do danych w SQL Server 8K zostaną odczytane informacje.
Strony danych mogą zawierać informacje tylko z jednej tabeli, a układ strony jest dobrze udokumentowany w MSDN
Fakt, że SQL Server zawsze odczyta całą stronę danych, daje również wyobrażenie, dlaczego woli używać blokad na poziomie strony. Konsekwencją blokad na poziomie strony jest to, że możesz zablokować znacznie więcej danych, niż myślisz.
Załóżmy na przykład, że mamy tabelę o łącznym rozmiarze rekordu 1024 bajtów z indeksem klastrowym w polu ID
. Kiedy uruchamiamy następujące zapytanie:SELECT * from MyTable (xlock) where ID = 123
nie tylko ten rekord zostanie zablokowany, ale (w zależności od wypełnienia strony) maksymalnie 3 dodatkowe rekordy również zostaną zablokowane.
Kiedy nabywa się te blokady
Zapytanie zostanie przeanalizowane przez zarządcę zapytań, a wymagane blokady zostaną określone i zażądane od menedżera blokad. SQL Server spróbuje znaleźć równowagę między wydajnością a rywalizacją, aby określić strategię blokowania.
SQL Server działa również zgodnie z systemem „eskalacji blokad”, który zmniejszy szczegółowość blokowania, gdy pozyskiwanych jest ponad 5000 blokad określonego typu. Zobacz ten artykuł na temat eskalacji blokady, aby uzyskać więcej informacji.
To zachowanie można poprawić za pomocą wskazówek dotyczących blokowania z naciskiem na wskazówki , w zapytaniu możesz określić dla tabeli, jaki rodzaj blokad wolisz. SQL Server spróbuje spełnić Twoje żądanie, ale nadal zastosuje eskalację blokady.