Какая блокировка устанавливается в таблице, когда я запускаю обновление этой таблицы в рамках транзакции?

Предположим, у меня есть следующая транзакция:

BEGIN TRAN
DECLARE @id UNIQUEIDENTIFIER = NEWID()
UPDATE A
WHERE A.id = @id

Какая блокировка будет удерживаться на таблице A до тех пор, пока я не зафиксирую транзакцию? Это X-lock, S-lock или какой-то другой замок?

Почему бы вам не попробовать и посмотреть? Что отображается в sys.dm_tran_locks, пока транзакция выполняется?

AlwaysLearning 04.04.2024 15:48

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

Dan Guzman 04.04.2024 15:48

Я предполагаю, что никаких блокировок нет, потому что ваш оператор не сможет скомпилироваться.

siggemannen 04.04.2024 16:19

@AlwaysLearning Я попробовал - в sys.dm_tran_locks было добавлено несколько разных блокировок, поэтому я не знаю, какая из них соответствует моей таблице

Sergey Dev 04.04.2024 16:20
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это зависит от структуры таблицы... Если столбец идентификатора является ПЕРВИЧНЫМ КЛЮЧОМ, а у первичного ключа нет другого столбца, блокировка будет блокировкой «строки»:

если ПК кластеризован, с помощью «логической» блокировки строки

Если ПК некластеризован, с помощью «физической» блокировки строки.

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

А продолжительность блокировки — это только время обновления плюс освобождение общих блокировок параллелизма при пессимистической блокировке...

Блокировка U совместима с S, но несовместима с U. Цель состоит в том, чтобы не допустить, чтобы два UPDATES находили одну и ту же строку для обновления, а затем оба пытались получить блокировку X для найденной строки. Learn.microsoft.com/en-us/sql/relational-databases/…

David Browne - Microsoft 05.04.2024 00:55

Другие вопросы по теме