Подтвердить что ты не робот

Какой ресурс блокирует блокировку ключей?

Я знаю, что блокировка ключа блокирует ключ в индексе. Однако что означает "ключ"?

Например, если у меня есть некластеризованный индекс в столбце фамилии и попытка обновления, где surname = "Jones", я бы заблокировал каждую строку в таблице, где фамилия "Джонс"? Или индекс будет заблокирован на более высоком уровне, предотвращая доступ строк с именами, отличными от "Jones"?

Причина, по которой я прошу, - это заметка в книге "Книги онлайн о блокировке гранулярности и иерархии":

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

Это говорит о том, что диапазон ключей будет заблокирован, а не только один.

4b9b3361

Ответ 1

Блокировка клавиатуры влияет на все строки, соответствующие указанному предикату (вид) - в вашем примере будут затронуты все строки с surname = 'Jones'.

Используется слово "диапазон", поскольку в зависимости от предиката может влиять диапазон строк, например, если предикат был age > 18, то все строки, в которых возраст больше 18, будут затронуты.


Также важно понимать, что блокировка ключей не просто индивидуально блокирует каждую соответствующую строку в индексе - ваш пример блокировки не только затрагивает все существующие строки в индексе с фамилией "Джонс", но также влияет на любую попытку изменения существующую строку или вставить новую строку с фамилией "Джонс".

Это может помочь немного задуматься о блокировках - блокировки имеют эффект только тогда, когда SQL Server пытается получить еще одну блокировку, которая может быть несовместимой (т.е. не является законным иметь обе блокировки в то же время). Например, если у вас есть эксклюзивная блокировка ключей в строках с помощью age > 18 и попытка вставить или изменить строку с помощью age = 42, тогда SQL-сервер сначала попытается получить блокировки relvant - видя, что существует существующая блокировка ключа для строки с age > 18 SQL Server определяет, что блокировки несовместимы и принимают соответствующие действия.