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