Понимание поведения блокировки в SQL Server

Я попытался воспроизвести ситуацию вопроса [1].

В таблице взяты и заполнены данными из вики "Изоляция (системы баз данных)" [2],
в SQL Server 2008 R2 SSMS я выполнил:

1) сначала в первой вкладке (окне) SSMS

-- transaction isolation level in first window does not influence results (?)
-- initially I thought that second transaction in 2) runs at the level set in first window

begin transaction 
INSERT INTO users VALUES ( 3, 'Bob', 27 )
waitfor delay '00:00:22'
rollback

2) сразу после, во втором окне

-- this is what I commented/uncommented

-- set transaction isolation level SERIALIZABLE
-- set transaction isolation level READ REPEATABLE
-- set transaction isolation level READ COMMITTED
-- set transaction isolation level READ UNCOMMITTED

SELECT * FROM users --WITH(NOLOCK)

Обновление:
Извините, результаты были исправлены.

Мои результаты, в зависимости от уровня изоляции, установленного в 2), заключаются в том, что SELECT возвращает:

  • немедленно (чтение незафиксированной вставленной строки)

    • для всех случаев SELECT с NOLOCK
    • для READ UNCOMMITTED (SELECT либо с или без NOLOCK)
  • ожидает завершения транзакции 1) ( ONLY IF SELECT без NOLOCK) и

    • на уровне изоляции транзакции READ COMMITTED и выше (REPEATABLE READ, SERIALIZABLE)

Эти результаты противоречат ситуации, описанной в вопросе (и объясненной в ответах?) [1]
(например, SELECT с NOCHECK ожидает завершения 1)) и т. д.

Как можно объяснить мои результаты и [1]?


Обновление 2:
Этот вопрос на самом деле является подвопросом моих вопросов [3] (или результатом отсутствия на них ответа).

Процитировано:
[1]
Объяснение поведения блокировки в SQL Server
Объяснение поведения блокировки в SQL Server
[2]
«Изоляция (системы баз данных)»
Пожалуйста, добавьте трейлинг) в ссылку. Я не могу сохранить его здесь, по ссылке! http://en.wikipedia.org/wiki/Isolation_ (database_systems)
[3]
Является ли NOLOCK значением по умолчанию для операторов SELECT в SQL Server 2005?
Является ли NOLOCK значением по умолчанию для операторов SELECT в SQL Server 2005?

5
задан Community 23 May 2017 в 09:58
поделиться