Среда: SQL SERVER 2008 R2, Windows.
СОЕДИНЕНИЕ-1: выполнение следующего
BEGIN TRANSACTION
UPDATE Check_lock with (rowlock)
set LayoutType = 98
where USERID between 1 and 7;
WAITFOR DELAY '000:10:00';
COMMIT TRANSACTION;
СОЕДИНЕНИЕ-2: выполнение следующего
BEGIN TRANSACTION
UPDATE Check_lock with (rowlock)
set LayoutType = 98
where USERID between 15 and 20;
COMMIT TRANSACTION;
Постановка проблемы: я выполняю вышеуказанные транзакции через SQL Server Management Studio, создавая два соединения с одним и тем же сервером/базой данных на одном компьютере в одно и то же время. Хотя таблица одна и та же, и транзакции выполняются одновременно (не на 100% одновременно, потому что выполняются вручную), но обновляют разные строки (блокировка на уровне строк), тогда почему транзакция «Connection-2» не была немедленно зафиксирована и идет в подождите, пока первая транзакция не будет зафиксирована/завершена. ??
Пожалуйста, дайте мне знать, если я не ясно описал свой сценарий.
USERID
? Используется ли индекс в плане выполнения? В противном случае сканирование для поиска строк, соответствующихUSERID between 15 and 20
, будет заблокировано в ожидании чтения строк, заблокированных исключительно первой транзакцией. - person Martin Smith   schedule 09.07.2013