Блокировки в Microsoft SQL Server – что это такое и для чего нужны

Приветствую Вас на сайте Info-Comp.ru! Сегодня мы с Вами поговорим о блокировках в Microsoft SQL Server, узнаем, что это такое, для чего они нужны, какие типы блокировок существуют, рассмотрим гранулярность блокировок, т.е. уровни блокировки ресурсов, а также немного поговорим о совместимости блокировок в SQL Server.

Блокировки в Microsoft SQL Server – что это такое и для чего нужны

Интересные статьи по Microsoft SQL Server

Что такое блокировка в Microsoft SQL Server

Как Вы знаете, транзакция в SQL Server изолирует данные, с которыми она работает, для того чтобы другие транзакции получали только согласованные данные.

Иными словами, транзакция прежде, чем взять данные и выполнить с ними определенные действия, должна защититься от изменений этих данных другой транзакцией, т.е. по факту изолировать эти данные.

Изоляция данных – это одно из обязательных свойств транзакции. Всего у транзакции 4 обязательных свойства, их называют свойства ACID.

Свойства ACID
Atomicity – Атомарность
Consistency – Согласованность
Isolation – Изоляция
Durability – Надежность (долговечность)

Заметка! Более подробно про транзакции можете почитать в статье – Транзакции в T-SQL – основы для новичков с примерами.

В SQL Server для изоляции данных, т.е. чтобы транзакция удовлетворяла свойству «изоляция», предусмотрен механизм блокирования ресурсов.

Таким образом, когда транзакция в SQL Server изолирует данные, она определенным образом блокирует эти данные, т.е. накладывает блокировку.

Отсюда следует, что

Блокировка – это механизм, с помощью которого SQL Server организовывает одновременный доступ нескольких пользователей к одному участку данных.

За управление блокировками в Microsoft SQL Server отвечает компонент «Диспетчер блокировок» (Lock Manager).

Гранулярность блокировок

Как Вы знаете, данные в SQL Server хранятся определённым образом, например, строки относятся к таблицам, таблицы к базам данных, а данные в таблицах физически хранятся на страницах, которые сгруппированы в экстенты и т.д.

SQL Server может накладывать блокировки на разные уровни ресурсов, иными словами, если рассматривать механизм хранения данных с точки зрения гранулярности, то SQL Server может накладывать блокировки на разные типы ресурсов, например, на таблицу, на страницу, на строку, и даже на всю базу данных.

В следующей таблице представлен перечень ресурсов, которые могут блокироваться в SQL Server, т.е. на них может накладываться блокировка.

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

Заметка! Статистика в Microsoft SQL Server – что это такое и для чего она нужна.

Типы блокировок

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

В следующей таблице представлены типы блокировок в SQL Server.

Блокировка Описание
Shared (S) Совмещаемая блокировка
Exclusive (X) Эксклюзивная блокировка
Update (U) Блокировка обновления
Intent shared (IS) Блокировка с намерением совмещаемого доступа
Intent exclusive (IX) Блокировка с намерением эксклюзивного доступа
Intent update (IU) Блокировка с намерением обновления
Shared with intent exclusive (SIX) Совмещаемая блокировка с намерением эксклюзивного доступа
Shared intent update (SIU) Совмещаемая блокировка с намерением обновления
Update intent exclusive (UIX) Блокировка обновления с намерением эксклюзивного доступа
Schema modification (Sch-M) Блокировка изменения схемы
Schema stability (Sch-S) Блокировка стабильности схемы
Bulk Update (BU) Массовое обновление
Key-range Блокировка диапазона строк

Заметка! Более подробно каждый тип блокировки рассмотрен в статье – Типы блокировок в Microsoft SQL Server.

Совместимость блокировок в SQL Server

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

Например, с эксклюзивными блокировками не совместим ни один из режимов блокировки, таким образом, пока удерживается эксклюзивная (X) блокировка, никто не сможет получить любую другую блокировку.

И наоборот, если к ресурсу применяется совмещаемая (S) блокировка, другие транзакции могут получать совмещаемую блокировку или блокировку обновления (U) на этот ресурс, даже если не завершилась первая транзакция.

Следующая таблица показывает совместимости для распространенных типов блокировки.

Запрашиваемый режим \ Полученный ранее режим IS S U IX SIX X
Блокировка с намерением совмещаемого доступа (IS) Да Да Да Да Да Нет
Совмещаемая блокировка (S) Да Да Да Нет Нет Нет
Блокировка обновления (U) Да Да Нет Нет Нет Нет
Эксклюзивная блокировка намерения (IX) Да Нет Нет Да Нет Нет
Совмещаемая блокировка с намерением эксклюзивного доступа (SIX) Да Нет Нет Нет Нет Нет
Эксклюзивная (Х) Нет Нет Нет Нет Нет Нет

На следующей картинке представлены совместимости всех типов блокировок, доступных в SQL Server.

Скриншот 1

Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.

На сегодня это все, надеюсь, материал был Вам полезен!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.