【问题标题】:.Net and SQL - Transactions with long running processes.Net 和 SQL - 具有长时间运行进程的事务
【发布时间】: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


【解决方案1】:

请使用前端 C# 中的 TASK 概念,将 100 或 1000 行拆分为每个任务并同时运行。它可能对您已满。我已经用这样的方式提高了我的应用程序性能。

https://www.codeproject.com/Questions/1226752/Csharp-how-to-run-tasks-in-parallel

【讨论】:

  • 3 小时运行过程。我们减少了 10 分钟以下...请尝试让您知道 好的...
猜你喜欢
  • 2023-04-05
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多