Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Co to są blokady wierszy, stron i tabel? A kiedy zostaną nabyte?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Alerty agenta serwera SQL

  2. Skonfiguruj Lucene.Net z SQL Server

  3. Co to jest serwer SQL?

  4. Jaka jest różnica między VARCHAR i NVARCHAR w serwerze SQL - SQL Server / T-SQL Tutorial Część 32

  5. Wyodrębnij numer tygodnia z daty w SQL Server (T-SQL)