我们有一个系统,它有两个不同的进程来更新相同的sql server表。一个进程具有高事务量,由一个运行24 X 7的计划任务启动。另一个进程是由用户卷启动的低事务量进程。由于死锁,第二个进程数据库事务经常被杀死。我不知道如何解决这个问题。理想情况下,我希望用户实例化的事务具有优先级,并且计划任务事务基本上等待数据库空闲。
答案 0 :(得分:1)
对我们来说,解决方案是将隔离级别从Read Committed更改为Read Comitted Snapshot。这样做会导致所有选择在执行选择之前将表读取其快照。因此,它可以防止选择相互冲突导致死锁。另一种方法是在所有select语句上使用(NOLOCK)查询提示。但是,我们有很多sql,我们正在考虑重写很多代码。更改隔离级别非常简单快捷,并且不需要进行大量的回归测试。