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
)。 这样,尽管可能会发生阻塞,但可以避免死锁。