在SQL Server中设置读取提交的快照时,如何避免死锁?

时间:2017-02-09 05:13:44

标签: sql-server database-deadlocks read-committed-snapshot

对于测试场景,我需要在SQL Server实例上设置read committed snapshot off。测试后我需要恢复更改。我使用IF语句来确定要执行的操作。这是我使用的脚本:

USE [master]
GO

IF 'Mycondition'
BEGIN
    ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    ALTER DATABASE [MyDB] SET READ_COMMITTED_SNAPSHOT OFF WITH NO_WAIT
    ALTER DATABASE [MyDB] SET MULTI_USER WITH NO_WAIT
END
ELSE
BEGIN
    ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    ALTER DATABASE [MyDB] SET READ_COMMITTED_SNAPSHOT ON WITH NO_WAIT
    ALTER DATABASE [MyDB] SET MULTI_USER WITH NO_WAIT
END
GO

然而,在运行此脚本时,似乎间​​歇性地出现死锁。有时操作会通过,而有些时候会发生死锁,我的数据库会陷入单用户模式。无论如何我能确保不会发生吗?我考虑删除WITH NO_WAIT条款但似乎没有帮助。

1 个答案:

答案 0 :(得分:0)

当我删除WITH NO_WAIT子句时,看起来我错过了什么。我删除它时工作正常。