Совместимость блокировок (компонент Database Engine)

Совместимость блокировок определяет, могут ли несколько транзакций одновременно получить блокировку одного и того же ресурса. Если ресурс уже блокирован другой транзакцией, новая блокировка может быть предоставлена только в том случае, если режим запрошенной блокировки совместим с режимом существующей. В противном случае транзакция, запросившая новую блокировку, ожидает освобождения ресурса, пока не истечет время ожидания существующей блокировки. Например с монопольными блокировками не совместим ни один из режимов блокировки. Пока удерживается монопольная (X) блокировка, больше ни одна из транзакций не может получить блокировку ни одного из типов (разделяемую, обновления или монопольную) на этот ресурс, пока не будет освобождена монопольная (X) блокировка. И наоборот, если к ресурсу применяется разделяемая (S) блокировка, другие транзакции могут получать разделяемую блокировку или блокировку обновления (U) на этот элемент, даже если не завершилась первая транзакция. Тем не менее другие транзакции не могут получить монопольную блокировку до освобождения разделяемой.

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

 

Ранее предоставленный режим

 

 

 

 

 

Запрошенный режим

IS

S

U

IX

SIX

X

Коллективная блокировка намерения (IS)

Да

Да

Да

Да

Да

Нет

Коллективная (S)

Да

Да

Да

Нет

Нет

Нет

Блокировка обновления (U)

Да

Да

Нет

Нет

Нет

Нет

Намеренная монопольная (IX)

Да

Нет

Нет

Да

Нет

Нет

Совмещаемая с намерением монопольного доступа (SIX)

Да

Нет

Нет

Нет

Нет

Нет

Монопольная (Х)

Нет

Нет

Нет

Нет

Нет

Нет

ПримечаниеПримечание

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

Полная матрица совместимости блокировок

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

Диаграмма матрицы совместимости блокировок