ReadUncommitted 事务创建锁

ReadUncommitted transaction creating locks

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

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

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

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

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

SQL 服务器在读未提交隔离级别下读取时仍然请求模式稳定性锁。

此外 SQL 服务器在写入时请求独占锁,无论它运行在何种隔离级别下。

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

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