Sql server 防止由两个不同进程更新数据库时出现SQL死锁

Sql server 防止由两个不同进程更新数据库时出现SQL死锁,sql-server,deadlock,Sql Server,Deadlock,我们有一个系统,它有两个不同的进程来更新相同的sql server表。一个进程的事务量很大,由24 X 7运行的计划任务启动。另一个是由用户卷启动的低事务量进程。第二个进程数据库事务经常由于死锁而被终止。我不知道如何解决这个问题。理想情况下,我希望用户实例化的事务具有优先级,并且计划的任务事务基本上等待数据库空闲 对我们来说,解决方案是将隔离级别从Read Committed更改为Read Comitted Snapshot。这样做的原因是,在执行选择之前,所有选择都会快照表的读数。因此,它可以

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

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

我隐约知道,在sql server 2014中,您可以设置事务优先级您可以为会话分配死锁优先级:但请小心,因为这样肯定会先杀死优先级较低的会话,不管他们做了多少工作,在每个表上使用(NOLOCK)提示的替代方法就是在开始时使用
设置事务隔离级别readuncommitted
一次。。。但是,快照隔离确实是一个优越得多的解决方案。