Блокировки. Определение, свойства, иерархии, гранулярность и взаимоблокировки, алгоритмы обнаружения взаимоблокировок

Определение

Блокировка — это механизм, с помощью которого компонент Database Engine синхронизирует одновременный доступ нескольких пользователей к одному фрагменту данных.

Database Engine – элемент ядра СУБД (по сути демон, запускается раз в 10-15 секунд).

Свойства

Гранулярность

Ресурс Описание
RID Идентификатор строки, используемый для блокировки одной строки в куче
KEY Блокировка строки в индексе, используемая для защиты диапазонов значений ключа в сериализуемых транзакциях.
PAGE 8-килобайтовая (КБ) страница в базе данных, например страница данных или индекса.
EXTEND Упорядоченная группа из восьми страниц, например страниц данных или индекса.
HOBT Куча или сбалансированное дерево. Блокировка, защищающая индекс или кучу страниц данных в таблице, не имеющей кластеризованного индекса.
TABLE Таблица полностью, включая все данные и индексы.
FILE Файл базы данных.
APPLICATION Определяемый приложением ресурс.
METADATA Блокировки метаданных.
ALLOCATION_UNIT Единица размещения.
DATABASE База данных, полностью.

Режим

Режим блокировки Описание
Совмещаемая блокировка (S) Используется для операций считывания, которые не меняют и не обновляют данные, такие как инструкция SELECT.
Блокировка обновления (U) Применяется к тем ресурсам, которые могут быть обновлены. Предотвращает возникновение распространенной формы взаимоблокировки, возникающей тогда, когда несколько сеансов считывают, блокируют, и затем, возможно, обновляют ресурс.
Монопольная блокировка (X) Используется для операций модификаций данных, таких как инструкции INSERT, UPDATE, DELETE. Гарантирует, что несколько обновлений не будет выполнено одновременно для одного ресурса.
Блокировка с намерением Используется для создания иерархии блокировок. Типы намеренной блокировки: с намерением совмещаемого доступа (IS), с намерением монопольного доступа (IX), а также совмещаемая с намерением монопольного доступа (SIX).
Блокировка схемы Используется во время выполнения операции, зависящей от схемы таблицы. Типы блокировки схем: блокировка изменения схемы (Sch-S) и блокировка стабильности схемы (Sch-M).
Блокировка массового обновления (BU) Используется, если выполняется массовое копирование данных в таблицу и указана подсказка TABLOCK.
Диапазон ключей Защищает диапазон строк, считываемый запросом при использовании уровня изоляции сериализуемой транзакции. Запрещает другим транзакциям вставлять строки, что помогает запросам сериализуемой транзакции уточнять, были ли запросы выпущены повторно.

Совместимость блокировок определяет, могут ли несколько транзакций одновременно получить блокировку одного и того же ресурса. Если ресурс уже блокирован другой транзакцией, новая блокировка может быть предоставлена только в том случае, если режим запрошенной блокировки совместим с режимом существующей.

Untitled

В противном случае транзакция, запросившая новую блокировку, ожидает освобождения ресурса, пока не истечет время ожидания существующей блокировки.

Продолжительность

Блокировки для выполнения инструкций SELECT выполняются только на время чтения ресурса, но не во время запроса.

Блокировки для инструкций INSERT, UPDATE и DELETE сохраняются на все время выполнения запроса. Это помогает гарантировать согласованность данных и позволяет откатывать запросы в случае необходимости. Когда запрос выполняется в рамках транзакции, продолжительность блокировки определяется тремя факторами: