![]() |
1
3
不 要发生死锁,死锁链中的所有参与者必须 等待 对于资源(锁)。如果您的连接处于空闲状态,这意味着它不执行请求,这意味着它不能等待。 至于其他可能导致你的疗程死亡的情况,我至少可以想到三种:
|
![]() |
2
3
回答你的问题:你 可以 如果您没有在事务中执行查询,请成为死锁牺牲品。
这是违反直觉的,但是你可以通过运行一个
如果运行的查询使用索引,则可能发生这种情况:
所以,严格来说,你
可以
当您不在事务中执行查询时,成为死锁牺牲品。另一个人没有执行他的
没有人明确使用事务,但存在死锁。 |
![]() |
3
0
可能的问题:
考虑:
|
![]() |
4
0
交易可能会超时,这就是正在发生的事情。 由于至少取出了一个(或多个)更新锁,并设置了一些读取和表扫描锁,因此可能会杀死您以帮助释放由 其他 交易。SQL Server中的死锁恢复代码不太可能完全没有bug,而且 长时间保持交易不正常 在SQL Server上。但我不希望这种情况经常发生。 有些系统在分离死锁类型问题时,只需开始杀掉未完成匹配工作的__long lived_事务,以释放锁。仅仅因为您不是死锁循环的一部分,就不会停止系统对您的选择。 了解发生了什么事 你的情况 ,您必须使用 SQL Server探查器 收集所有与锁定和死锁相关的事件,以及有关已中止的连接和事务等的事件。很好的缺乏这将需要一段时间,并且对您正在查看的探查器事件有很好的了解… 这类事情的细节在数据库供应商和他们的数据库版本之间是不同的。然而,由于大多数数据库供应商认为事务长时间开放是一种糟糕的设计,因此这样做往往会导致问题,并影响到没有进行最多测试的代码路径。 |
![]() |
5
-1
仅仅因为你没有参与交易并不意味着你没有持有锁。 |