Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
事务隔离级别-Azure SQL数据库中的表锁定_Sql_Sql Server_Azure_Transactions_Isolation Level - Fatal编程技术网

事务隔离级别-Azure SQL数据库中的表锁定

事务隔离级别-Azure SQL数据库中的表锁定,sql,sql-server,azure,transactions,isolation-level,Sql,Sql Server,Azure,Transactions,Isolation Level,研究隔离级别和阻塞,更具体的读提交快照与读提交快照 在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 第二个查询将阻塞并挂起

研究隔离级别和阻塞,更具体的读提交快照与读提交快照

在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中,隔离级别是读提交快照,它似乎允许从等待TABLOCKX+HOLDLOCK'ed tx的Person.Person进行读取

问题:在读取提交的快照时,如何重现阻塞场景(可能带有提示),强制第一个SELECT完全阻塞表?-因为它在Azure SQL中,无法更改

我试过:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT top 1 * FROM Person.Person WITH (TABLOCKX, HOLDLOCK);
BEGIN TRANSACTION
...


谢谢。

我无法再现您描述的情况。当我在常规(2012非Azure SQL Server DB)中将隔离级别启用为快照时,请执行以下操作: 将允许\u快照\u隔离设置为打开 并创建一个表dbo.x5并填充它。在一个会话中,我运行:

开始交易

使用(TABLOCKX,HOLDLOCK)从dbo.x5中选择top 1*

等待延迟'03:00:00'

回滚事务

另一个我跑

设置事务隔离级别快照

开始交易

使用(readcommitted)从dbo.x5中选择*

第二次会议暂停

如果我不添加“readcommitted”提示,它将读取(没有任何内容会阻止快照隔离读取)

根据文献,Azure和非Azure之间的主要区别在于默认锁定设置,但一旦设置,其行为方式相同

BEGIN TRANSACTION
SELECT top 1 * FROM Person.Person WITH (READCOMMITTED);
...