【发布时间】:2016-12-14 13:13:43
【问题描述】:
在我们的 C# 应用程序中,我们没有设置隔离级别,所以我假设默认的隔离级别是 Read Committed。但是在死锁期间,我们可以看到应用程序的 lockmode 是
isolationlevel="可序列化(4)"
serializable(4) 是什么意思?隔离级别还会在事务期间自动转换为其他级别吗?
【问题讨论】:
-
死锁期间如何查看应用程序中的事务隔离级别?
-
不,隔离级别不会自行改变。是的,您可以通过显式
SET TRANSACTION ISOLATION LEVEL或通过在FROM子句中应用表提示来更改事务中的隔离级别。但是,意外隔离级别的一个更可能的原因是获得了一个之前具有可序列化事务的池连接:the isolation level is not reset。如果您想确定,请始终明确设置。 -
@RossBush,我们从 DBA 获得了死锁日志,其中列出了处于死锁状态的进程和资源
-
@JeroenMostert,我已经浏览了链接。这几乎回答了意外隔离级别的原因。由于它在 SQL Server 2014 中已修复,唯一的解决方法是使用显式事务
标签: c# sql-server isolation-level database-deadlocks