Изучение уровней изоляции и блокировки, более конкретно READ COMMITTED vs. READ COMMITTED SNAPSHOT.Уровни изоляции транзакций - блокировка таблиц в базе данных Azure SQL
В SQL Server 2014, уровень изоляции по умолчанию READ COMMITTED, и если я бегу
BEGIN TRANSACTION
SELECT top 1 * FROM Person.Person WITH (TABLOCKX, HOLDLOCK);
WAITFOR DELAY '03:00:00'
ROLLBACK TRANSACTION
, а затем в новом соединении
SELECT * FROM Person.Person
второй запрос будет блокировать и повесить.
В Azure SQL, однако, уровень изоляции READ COMMITTED SNAPSHOT, который, кажется, позволяет читать данные Person.Person с TABLOCKX + HOLDLOCK'ed tx в ожидании.
Вопрос: Как воспроизвести сценарий блокировки, возможно, с помощью подсказок, заставляя первый SELECT полностью блокировать таблицу, а на READ COMMITTED SNAPSHOT? - как и в Azure SQL, и не может быть изменен.
Я попытался:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT top 1 * FROM Person.Person WITH (TABLOCKX, HOLDLOCK);
BEGIN TRANSACTION
...
и
BEGIN TRANSACTION
SELECT top 1 * FROM Person.Person WITH (READCOMMITTED);
...
Спасибо.