现状:我们开发了一个程序来管理多个电子商务商店。编辑订单是一项包含许多表的任务,因此需要使用事务。如果最后一个查询失败,则必须恢复之前的所有更改。
我们具有将订单更改为发票的功能。此功能可以一次更改多个订单。每个变更都有自己的事务,并且它们被逐个处理。
现在的问题:如果 2 个用户同时使用此功能 - 在不同的订单上 - 他们会遇到死锁......
DBMS:SQL Server 2008 R2 连接组件:UniDAC v4.5.9 - TUniConnection
我尝试的一种解决方案是将 LockMode 设置为 lmPessimistic。这减少了死锁,但它们仍然会发生......
更新:
通过使用“READ_COMMITTED_SNAPSHOT”作为数据库隔离模式解决了该问题。这对我们来说很好,但不适用于所有死锁情况并且有一些副作用!