Заблокирована ли таблица при выполнении нескольких запросов к индексированному столбцу?

#sql #sql-server #database

Вопрос:

В MS-SQL Server таблица не блокируется, когда запрос на чтение выбирает только одну строку. В многопоточной среде блокируется ли таблица при одновременном выполнении нескольких запросов одного и того же типа? Позвольте мне объяснить это на примере.

Таблица не будет заблокирована, так как мы выбираем только одну запись

 select * from Employees where EmployeeId = 1234
 

Многопоточная среда:

 select * from Employees where EmployeeId = 1234 
select * from Employees where EmployeeId = 5678 
select * from Employees where EmployeeId = 9012 
select * from Employees where EmployeeId = 3456
 

Повлияет ли это на обработку данных, если чтение/запись будут выполняться в одном и том же экземпляре?

Пожалуйста, обратите внимание, что столбец EmployeeID индексируется.

Спасибо.

Комментарии:

1. Насколько я понимаю, в ваших запросах, использующих поиск по индексу в одной строке, блокировки таблиц или страниц не будут приниматься до тех пор, пока не будет превышен порог одновременных блокировок, я полагаю, что он составляет около 5000.

2. @Stu Не забывайте IS о блокировках таблиц, которые используются для последующего обновления до полной блокировки таблицы

Ответ №1:

Нет, весь стол не будет заблокирован. В зависимости от конфигурации и уровня изоляции эти запросы либо вообще не будут блокироваться, либо будут блокироваться общими строками/ключами.

Однако это довольно большая тема, и вам следует прочитать Руководство по блокировке транзакций и управлению версиями строк

Комментарии:

1. Мне бы хотелось знать, как вы вообще не снимаете замки, по крайней мере Sch-S , замок снимается. И наверняка вся таблица может быть заблокирована: строка или страница S также будут IS заблокированы в таблице в случае, если она будет обновлена до полной S блокировки таблицы, что часто случается

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