【问题标题】:why deadlocks cannot be automatically handled by the lock monitor为什么锁监视器不能自动处理死锁
【发布时间】:2011-05-25 20:15:10
【问题描述】:

为什么sql-server锁监控线程不能解决死锁?

对此我没有太多详细信息,但我的朋友抱怨 SQL Server(2005 和 2008)数据库时常发生死锁。

据我所知,Sql Server 死锁检测机制可以很好地处理死锁场景,方法是选择其中一个处理作为受害者并终止/回滚它,因此另一个进程可以完成,因此不会留下任何死锁需要解决。

是否存在 SQL Server 死锁处理可能失败或可能被关闭的情况?

提前致谢

【问题讨论】:

  • 您的朋友如何确定存在死锁而不是正常阻塞。也许来自无限期悬而未决的交易?
  • 是的,好问题,他们检测到持续时间很长的锁,我不知道,如果你能从锁信息中找出它是否导致死锁,可能他们只是假设这些锁是造成的通过死锁:)

标签: sql-server


【解决方案1】:

死锁处理只能导致一个连接被终止。

这是解决死锁情况的唯一方法,当两个进程相互阻塞时会发生这种情况。所以两者都不能继续,必须中止

【讨论】:

  • 那么为什么服务器上会出现死锁? SQL Server 无法解决死锁情况的任何原因?
  • @hazimdikenli:死锁只能通过终止连接来解决。也就是说,SQL Server 通过终止连接解决了死锁。就是这么简单。死锁无法静默解决,并且总是发生在具有 SQL Server 和 Sybase 等锁定机制的 RDBMS 上
  • 我理解连接终止部分,因此,受害者的锁已经消失,并且其他进程的事务完成,不应该有任何剩余的锁,也许他们将锁误解为死锁。
  • @hazimdikenli:SQL Server 将重新使用 SPID 编号,因此即使是全新的连接,相同 SPID 编号的锁仍然存在
猜你喜欢
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2011-08-31
  • 1970-01-01
  • 2010-09-07
  • 2018-08-09
相关资源
最近更新 更多