【问题标题】:Will isolation level change during a database transaction?数据库事务期间隔离级别会改变吗?
【发布时间】: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


【解决方案1】:

为了帮助他人,我发布了我们找到的解决方案。我们在 TransactionScope 及其默认构造函数的帮助下使用事务。它的默认隔离级别是serializable,这造成了混乱。现在更正它以明确使用 Read Committed 作为隔离级别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2015-08-02
    • 2011-09-30
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多