MSSQLSERVER_1205

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

详细信息

Attribute
产品名称 SQL Server
事件 ID 1205
事件来源 MSSQLSERVER
组件 SQLEngine
符号名称 LK_VICTIM
消息正文 事务(进程 ID %d)与另一个进程被死锁在 %.*ls 资源上,并且已被选作死锁牺牲品。 重新运行该事务。

说明

在单独的事务上以相互冲突的顺序访问资源,从而导致死锁。 例如:

  • Transaction1 更新 Table1.Row1,而 Transaction2 更新 Table2.Row2
  • Transaction1 尝试更新 Table2.Row2 但被阻止,因为 Transaction2 尚未提交并且尚未释放其锁
  • Transaction2 现在尝试更新 Table1.Row1 但被阻止,因为 Transaction1 尚未提交并且尚未释放其锁
  • 发生死锁是因为 Transaction1 正在等待 Transaction2 完成,但 Transaction2 正在等待 Transaction1 完成。

系统检测到此死锁,并选择其中一个事务作为 受害者。 然后,它会发出此错误消息,回滚受害者的事务。 有关详细信息,请参阅 死锁

用户操作

在大多数情况下,死锁与应用程序相关的问题需要应用程序开发人员进行代码更改。 收到错误 1205 时,一种方法是再次执行查询。 有关详细信息,请参阅面向开发人员的 死锁模拟器应用:如何在应用中处理 SQL 死锁问题

您还可以修订应用程序以避免死锁。 选择为受害者的事务可以重试并可能成功,具体取决于正在同时执行的操作。

若要防止或避免发生死锁,请考虑按相同顺序访问所有事务(Table1,然后 Table2)。 这样,尽管可能会发生阻塞,但可以避免死锁。

有关详细信息,请参阅处理死锁和最小化死锁