Блокировка – это информация о том, что тот или иной ресурс занят конкретной транзакцией. Если уровень изоляции – это степень защиты, то блокировки – это инструмент СУБД для реализации защиты данных.
СУБД может блокировать как отдельные записи таблицы, так и таблицу целиком, а так же возможно всей базы данных. Это зависит от многих факторов, включая сами действия, которые мы производим над данными.
Типы блокировок
Типов блокировок СУБД очень много, но нас интересуют только 3:

S – блокировка (Shared)
Разделяемая, т.е. при такой блокировке любая другая транзакция может читать данные из заблокированного ресурса (ставить свою S-блокировку), но не может их изменять. Если транзакции требуется изменить данные под S-блокировкой, то она будет установлена в очередь, и будет ждать до тех пор, пока данные не освободятся.
Для одного ресурса может быть установлено несколько S-блокировок, поэтому она и называется Разделяемая.
X – блокировка (Exclusive).
Исключительная, т.е. при такой блокировке любая другая транзакция не может даже прочитать данные. Если кому-то требуется прочитать данные под X, то он будет ждать до тех пор, пока текущая не снимется.
Для одного ресурса (таблицы, строк) невозможно установить более одной X-блокировки. Только 1 транзакция может захватить ресурс и установить X. Поэтому она и называется Исключительная.
U – блокировка (Update).
Обновление — это разделяемая с целью в дальнейшем изменить данные, т.е. перейти в Исключтельную. Отличительная особенность U от X – это то, что пока стоит U, другие транзакции могут читать данные, но не могут установить свою U или X блокировку.
Для одного ресурса (строк или таблиц) невозможно установить более одной U. Только 1 транзакция может захватить ресурс и установить U, потому что она имеет цель перейти в Исключительную.

Механизм блокировок СУБД
Механизм блокировок СУБД реализован через отдельные таблицы, где хранится информация о заблокированных ресурсах: какие ресурсы заблокированы, кем и с каким типом блокировки. Отдельное задание постоянно пробегается по таблице и выполняет проверку, не освободились ли данные ресурсы: зафиксировалась или отменилась ли транзакция, которая их блокировала. Если транзакция уже не активна, то информация удаляется.
Просмотреть текущие блокировки в MS SQL можно в таблице sys.dm_tran_locks.
SELECT * FROM (
SELECT
CASE resource_type
WHEN N'OBJECT' THEN OBJECT_NAME(resource_associated_entity_id)
WHEN N'KEY'THEN (SELECT OBJECT_NAME(object_id) FROM sys.partitions WHERE hobt_id = resource_associated_entity_id)
WHEN N'PAGE' THEN (SELECT OBJECT_NAME(object_id) FROM sys.partitions WHERE hobt_id = resource_associated_entity_id)
WHEN N'HOBT' THEN (SELECT OBJECT_NAME(object_id) FROM sys.partitions WHERE hobt_id = resource_associated_entity_id)
WHEN N'RID' THEN (SELECT OBJECT_NAME(object_id) FROM sys.partitions WHERE hobt_id = resource_associated_entity_id)
ELSE N'Unknown'
END AS objectName,
CASE resource_type
WHEN N'KEY' THEN (SELECT indexes.name
FROM sys.partitions JOIN sys.indexes
ON partitions.object_id = indexes.object_id AND partitions.index_id = indexes.index_id
WHERE partitions.hobt_id = resource_associated_entity_id)
ELSE N'Unknown'
END AS IndexName,
resource_type,
DB_NAME(resource_database_id) AS database_name,
resource_description,
resource_associated_entity_id,
request_mode,
request_session_id
FROM sys.dm_tran_locks AS dm_tran_locks
WHERE resource_database_id = DB_ID(N'ИМЯ_БД')) t_Result
WHERE NOT objectName = N'Unknown' AND request_mode = N'X'
Данная тема подробнее рассматривается в пакете видео-курса «Секреты 1С: Эксперта» Шаг 3. Занятие 09-01 Знакомство с блокировками.