-
Notifications
You must be signed in to change notification settings - Fork 2
34. Гранулярность блокировок, иерархии блокировок и эскалация блокировок
Компонент SQL Server Database Engine поддерживает многогранулярную блокировку, позволяющую транзакции блокировать различные типы ресурсов. Чтобы уменьшить издержки применения блокировок, компонент Компонент Database Engine автоматически блокирует ресурсы на соответствующем задаче уровне. Блокировка при меньшей гранулярности, например на уровне строк, увеличивает параллелизм, но в то же время увеличивает и накладные расходы на обработку, поскольку при большом количестве блокируемых строк требуется больше блокировок. Блокировки на большем уровне гранулярности, например на уровне таблиц, обходится дорого в отношении параллелизма, поскольку блокировка целой таблицы ограничивает доступ ко всем частям таблицы других транзакций. Однако накладные расходы в этом случае ниже, поскольку меньше количество поддерживаемых блокировок.
Компонент Database Engine часто получает блокировки на нескольких уровнях гранулярности одновременно, чтобы полностью защитить ресурс. Такая группа блокировок на нескольких уровнях гранулярности называется иерархией блокировки.
Ресурс | Блокировка |
---|---|
RID | блокировка одной строки в куче. |
KEY | Блокировка строки в индексе, используемая для защиты диапазонов значений ключа в сериализуемых транзакциях. |
PAGE | 8-килобайтовая страница в базе данных, например страница данных или индекса. |
EXTENT | Упорядоченная группа из восьми страниц, например страниц данных или индекса. |
HoBT | Блокировка, защищающая сбалансированное дерево (индекс) или кучу страниц данных в таблице, не имеющей кластеризованного индекса. |
table | Таблица полностью, включая все данные и индексы. |
FILE | Файл базы данных. |
APPLICATION | Определяемый приложением ресурс. |
METADATA | Блокировки метаданных. |
Блокировка | Описание |
---|---|
Блокировка с намерением совмещаемого доступа (IS) | Защищает запрошенные или полученные совмещаемые блокировки на некоторых (но не на всех) ресурсах на более низком уровне иерархии. |
Блокировка с намерением монопольного доступа (IX) | Режим IX является расширенным режимом IS, кроме того, он защищает запрос на совмещаемые блокировки на ресурсах более низкого уровня. |
Совмещаемая блокировка с намерением монопольного доступа (SIX) | Защищает запрошенные или полученные совмещаемые блокировки на всех ресурсах более низкого уровня иерархии, а также блокировки с намерением на некоторых (но не всех) ресурсах более низкого уровня. На ресурсах верхнего уровня допускаются одновременные блокировки IS. |
Блокировка с намерением обновления (IU) | Защищает запрошенные или полученные блокировки обновления на всех ресурсах более низкого уровня в иерархии. Блокировки IU применяются только на страничных ресурсах. |
Совмещаемая блокировка с намерением обновления (SIU) | Сочетание блокировок S и IU в результате раздельного запрашивания этих блокировок и одновременного удержания их обеих. |
Блокировка обновления с намерением монопольного доступа (UIX) | Сочетание блокировок U и IX в результате раздельного запрашивания этих блокировок и одновременного удержания их обеих. |
Использование блокировок низкого уровня, например блокировок строк, увеличивает параллелизм, поскольку снижается вероятность одновременной блокировки области данных двумя различными транзакциями. Использование блокировок низкого уровня также увеличивает их количество, что приводит к большей загрузке ресурсов. При использовании блокировок страниц и таблиц высокого уровня загруженность снижается, однако при этом уменьшается степень параллелизма.