【问题标题】:Which SQL Transaction Isolation Level to be used?要使用哪个 SQL 事务隔离级别?
【发布时间】:2021-04-05 12:51:45
【问题描述】:

我们开发了以 VB.NET 作为前端,SQL Server 作为后端的应用程序。当一个事务正在运行(保存)“表 1”中的数据时,该表在未提交运行的事务之前是不可读的。

我们应该使用哪个事务锁来避免脏读/数据垃圾?

【问题讨论】:

  • 每个隔离级别可防止不同类型的异常,这取决于您对所需级别的谨慎程度。
  • 谢谢查理。但是你能根据我的要求推荐合适的锁吗
  • 不,我不能推荐一个合适的:正如我所说,这完全取决于你没有提到的事情。我可以建议使用哪个 READ UNCOMMITED aka NOLOCK,由于各种原因,这很糟糕。大多数人只使用READ COMMITTED。但是READ COMMITTED SNAPSHOT 很好,但是在进行更新和删除时您必须注意它。 SERIALIZABLE 是一个目标,但它在锁定方面可能非常繁重,并导致很多死锁,如果你没有很多并发访问,这是一个可以使用的。
  • 谢谢。我想使用 READ COMMITTED SNAPSHOT

标签: sql-server ado.net


【解决方案1】:

默认隔离级别为READ COMMITTED,使用默认隔离级别即可。如果您想要更悲观的隔离级别,请尝试使用SERIALIZABLE

更多关于SERIALIZABLE隔离级别的信息在这里:https://www.red-gate.com/simple-talk/sql/t-sql-programming/questions-about-t-sql-transaction-isolation-levels-you-were-too-shy-to-ask/

【讨论】:

  • 你好,艾敏。我们已经在使用默认锁,但其他用户必须等到现有事务完成。等待时间超过5分钟。因为事务是一个考勤登记。有 200 名员工,每天的考勤由 5 个不同的用户填写。序列化我们不能使用,因为它会锁定表。请建议
  • @MaheshPatel 然后看看 SNAPSHOT 隔离级别,但对于该隔离级别,您必须进行一些数据库更改,因为它需要 TempDB。
  • 谢谢。我想使用 READ COMMITTED SNAPSHOT
猜你喜欢
  • 2011-09-30
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多