c# - ReadUncommitted 事务创建锁
问题描述
我在 ReadUncommited 模式下使用 .NET 5.0 事务:
MyDbcontext.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)
我的理解是,在这种模式下,数据库上没有锁(当然,用户可能会读取不是最新的记录)。
但我注意到在提交或回滚此事务之前,我确实获得了锁。我可以在提交/回滚之前触发断点并在我的 MS SQL Studio 管理器中执行 SQL 请求时看到它。在事务提交或回滚之前,请求不会返回。
这是它应该工作的方式吗?如果是这样,有没有办法让我的交易完全没有锁定?我不介意阅读未提交的记录,但我仍然需要一个事务来确保所有数据库操作是否运行。
解决方案
在读取未提交隔离级别下读取时,SQL Server 仍会请求架构稳定性锁。
此外,无论在何种隔离级别下运行,SQL Server 都会在写入时请求独占锁。
我建议您不要使用未提交的读取隔离级别,因为它会产生除未提交读取之外的其他问题,例如读取同一行两次或跳过读取一行。
我建议您使用已提交的快照或快照隔离级别,而不是未提交的读取。这些隔离级别在读取时不请求共享锁,同时保持重要的保证。
推荐阅读
- c++ - cmake:ExternalProject_Add() 不应用 cmake 参数
- c++ - 0:1(10):错误:不支持 GLSL 3.30。Ubuntu 18.04 C++
- javascript - sendKeys(index) 中值的量角器循环
- php - 如何在 ubuntu for PHP 上设置没有域的 sendmail
- r - R igraph:边缘介数中心性的估计仅适用于小截止值
- c# - 使用 AngleSharp 在 C# 中使用 Captcha 进行 Web 抓取
- javascript - Brain.js 是否在我的神经网络训练数据之上添加了它自己的随机层?
- javascript - 如何获取对象数据和仅匹配的子数组数据
- three.js - OBJLoader 不是构造函数
- c - 在 C 中对整数 3D 数组进行排序