Co to jest eskalacja blokady?

Odpowiedzi:

45

Blokady DB mogą istnieć w wierszach, stronach lub całych tabelach lub indeksach. Gdy transakcja jest w toku, blokady utrzymywane przez transakcję zajmują zasoby. Eskalacja blokad polega na tym, że system konsoliduje wiele blokad na jeden poziom wyższy (na przykład konsoliduje wiele bloków wierszy do strony lub wiele stron do całej tabeli) zazwyczaj w celu odzyskania zasobów zajmowanych przez dużą liczbę blokad drobnoziarnistych.

Zrobi to automatycznie, chociaż możesz ustawić flagi na tabelach (patrz ZMIENIĆ TABELĘ w książkach on-line), aby kontrolować zasady eskalacji blokady w tej konkretnej tabeli. W szczególności przedwczesna lub zbyt chętna eskalacja blokady była problemem w starszych wersjach Sybase i SQL Server, gdy dwa procesy jednocześnie zapisywały osobne wiersze na tej samej stronie. Jeśli cofniesz się wystarczająco daleko (IIRC SQL Server 6.5), SQL Server tak naprawdę nie miał blokowania wierszy, ale mógł blokować tylko tabele lub strony. Tam, gdzie to się stało, można było spierać się o wstawianie rekordów na tej samej stronie; często umieszczasz indeks klastrowany na stole, więc nowe wstawki trafiają na różne strony.

ConcernedOfTunbridgeWells
źródło
3
Należy również zauważyć, że nie mamy kontroli nad eskalacją serwera.
Robimy teraz. To się nazywa T1211.
Jozuego
@Joshua, flaga śledzenia 1211 służy do wyłączania eskalacji blokady. Nie ma sposobu, abyśmy powiedzieli SQL Serverowi eskalację w określonym czasie.
Tylko uczeń
10
Blokady wierszy nie są eskalowane do blokad stron, ale bezpośrednio do blokad tabel.
Manoj Pandey
To prawda, co stwierdził Manoj. Powinieneś poprawić tę część odpowiedzi, aby uniknąć wprowadzania w błąd mniej doświadczonych użytkowników SQL Server
NikolaD
20

Jest to metoda zmniejszania obciążenia systemu poprzez zamianę wielu drobnoziarnistych zamków na mniej gruboziarnistych. Bardziej szczegółowe informacje można znaleźć tutaj i tutaj .

Na przykład, jeśli masz wiele (zwykle setki lub więcej) blokad w określonych wierszach w tabeli, gdy przekroczysz maksymalną dozwoloną liczbę blokad, można je wymienić na blokadę na całym stole.

Bill jaszczurka
źródło
11

Program SQL Server blokuje eskalację w celu zmniejszenia obciążenia pamięci , przekształcając kilka drobnoziarnistych blokad niskiego poziomu w gruboziarniste blokady wysokiego poziomu.

  • Blokady wierszy są zawsze eskalowane do Blokad tabeli i
  • Blokady strony są również eskalowane do Blokad tabeli.

Jest to mit, że zamki są Row nasiliły się blokad stron , same wspomniane wyżej przez @ConcernedOfTunbridgeWells jest źle.

Jeśli tabela zawiera niewiele aktualizacji wierszy, aparat SQL spróbuje przejąć blokady wierszy w tych wierszach lub blokadę strony na tych stronach. Powiedzmy, że zajęło to Row-Lock. Ale jeśli aktualizacje wierszy zwiększają próg (~ 5 tys. Blokad), to zamiast wziąć kilka blokad wierszy, zajmuje to jedną blokadę tabeli. W ten sposób zmniejsza się narzut pamięci, zwalniając kilka blokad wierszy i biorąc jedną blokadę tabeli, ale zwiększając współbieżność. To samo dzieje się z blokadą strony.

Próg blokady Eskalacja jest co najmniej 5000-lock, zależy od kilku czynników, szczegółowe wyjaśnienie od Lock Escalation zostało tutaj wymienione w MSDN BOL: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx

Manoj Pandey
źródło
5

Eskalacja blokady oznacza konwersję blokady w tryb bardziej restrykcyjny. Najczęściej jest to widoczne w bazach danych. Zapytanie może mieć zasób zablokowany dla „udostępnionego” i eskalować go do „wyłącznego”, aby wykonać aktualizację.

Richard T.
źródło