Zadano mi to pytanie podczas wywiadu i nie miałem odpowiedzi. Czy ktoś może tu wyjaśnić?
Zadano mi to pytanie podczas wywiadu i nie miałem odpowiedzi. Czy ktoś może tu wyjaśnić?
Odpowiedzi:
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.
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.
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.
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
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ę.