【发布时间】:2015-05-03 01:25:03
【问题描述】:
研究隔离级别和阻塞,更具体的 READ COMMITTED 与 READ COMMITTED SNAPSHOT。
在 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);
...
谢谢。
【问题讨论】:
标签: sql sql-server azure transactions isolation-level