首页 > 解决方案 > ReadUncommitted 事务创建锁

问题描述

我在 ReadUncommited 模式下使用 .NET 5.0 事务:

MyDbcontext.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)

我的理解是,在这种模式下,数据库上没有锁(当然,用户可能会读取不是最新的记录)。

但我注意到在提交或回滚此事务之前,我确实获得了锁。我可以在提交/回滚之前触发断点并在我的 MS SQL Studio 管理器中执行 SQL 请求时看到它。在事务提交或回滚之前,请求不会返回。

这是它应该工作的方式吗?如果是这样,有没有办法让我的交易完全没有锁定?我不介意阅读未提交的记录,但我仍然需要一个事务来确保所有数据库操作是否运行。

标签: c#.netsql-servertransactions

解决方案


在读取未提交隔离级别下读取时,SQL Server 仍会请求架构稳定性锁。

此外,无论在何种隔离级别下运行,SQL Server 都会在写入时请求独占锁。

我建议您不要使用未提交的读取隔离级别,因为它会产生除未提交读取之外的其他问题,例如读取同一行两次或跳过读取一行。

我建议您使用已提交的快照或快照隔离级别,而不是未提交的读取。这些隔离级别在读取时不请求共享锁,同时保持重要的保证。


推荐阅读