当数据库被两个不同的进程更新时防止 SQL 死锁

Preventing SQL deadlocks when database is updated by two different processes

我们的系统有两个不同的进程,它们更新相同的 sql 服务器表。一个流程具有高交易量,由 24 X 7 运行的计划任务启动。另一个是由用户量启动的低交易量流程。由于死锁,第二个进程数据库事务经常被终止。我不确定如何解决这个问题。理想情况下,我希望用户实例化的事务具有优先级,而计划任务事务基本上等到数据库空闲。

对我们来说,解决方案是将隔离级别从 Read Committed 更改为 Read Committed Snapshot。这样做会导致所有 Select 在执行 select 之前对 table 的读数进行快照。因此,它可以防止 selects 相互冲突导致死锁另一种方法是对所有 select 语句使用 (NOLOCK) 查询提示。但是,我们有很多 sql 并且我们正在考虑重写很多代码。更改隔离级别简单快捷,不需要大量回归测试。