研究隔離級別和阻塞,更具體的READ COMMITTED與READ COMMITTED SNAPSHOT。事務隔離級別 - Azure SQL數據庫中的表鎖定
在SQL Server 2014默認的隔離級別讀取已提交,如果我跑
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);
...
謝謝。