【发布时间】:2018-08-21 03:32:05
【问题描述】:
我在 .Net(使用 Dapper 的 v4.6)中有一个名为 BulkUpdate 的方法,它将修改多个表,并且可以包含大约 10,000 行或更多行。此操作可能需要几秒钟到几分钟的时间,具体取决于插入的数据数量。由于我将更新多个相关表,因此我必须将所有操作包含在 TransactionScope 中。
我的问题是,当我的 BulkUpdate 方法正在进行时,避免其他读取请求(事务之外)被“锁定”或“等待”的最佳方法是什么。拜托,我不想在每次阅读的开头添加SET ISOLATION LEVEL READ_UNCOMMITTED,也不想添加NO LOCK提示......还有其他解决方案吗?
【问题讨论】:
-
您在事务范围内设置了什么隔离级别?
-
插入 10,000 行应该花费很少的时间.....
-
@NathanSkerl 我正在使用 READ_UNCOMMITTED,也尝试过 SNAPSHOT
-
@MitchWheat 是的,我同意,交给我的代码中有大量逻辑,这些逻辑加起来就是处理时间。我知道我仍然需要优化和修复所有这些问题......但最重要的是,假设我将它减少到几秒钟,有没有办法防止其他用户阻止?
-
请不要使用READ_UNCOMMITTED;而是将您的数据库放入 RCSI / Snapshot Isolation 并在插入中使用默认隔离级别 (READ_COMMITTED)。所涉及数据(行范围)的并发读取器不会被阻塞;作家可能是。
标签: c# asp.net .net sql-server transactions