SQL 服务器死锁
SQL Server Deadlock
我预定的工作是一天工作 6 次。
有时它会导致死锁失败。我试图确定是谁阻止了我的会话。
我搜索并发现了 sql 探查器,但它没有显示准确的结果。如何使用 T-SQL 或任何其他方式识别历史?
当出现如下所示的失败作业错误消息时,
transaction (process id ) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. rerun the transaction.
这应该有助于识别死锁受害者或死锁的原因:https://ask.sqlservercentral.com/questions/5982/how-can-i-identify-all-processes-involved-in-a-dea.html
如果您想降低进程死锁的风险,这里有一些策略...
尝试以相同顺序 INSERT/UPDATE/DELETE 表。例如。如果一个进程正在执行此操作:
BEGIN TRAN; UPDATE TableA; UPDATE TableB; COMMIT;
当另一个进程正在执行此操作时:
BEGIN TRAN; UPDATE TableB; UPDATE TableA; COMMIT;
一个进程可能会使另一个进程死锁。完成时间越长,死锁的风险就越高。 SQL服务器会随机选择一个进程作为"Deadlock Victim"。
- 尽量减少事务中涉及的代码。 IE。 BEGIN TRANSACTION 和 COMMIT TRANSACTION 语句之间的 INSERT/UPDATE/DELETE 代码行更少
- 如果可能,处理小批量数据。如果您正在处理大量行,请尝试添加批处理,以便代码在任何给定时间锁定较小批次的数据。
我预定的工作是一天工作 6 次。 有时它会导致死锁失败。我试图确定是谁阻止了我的会话。
我搜索并发现了 sql 探查器,但它没有显示准确的结果。如何使用 T-SQL 或任何其他方式识别历史?
当出现如下所示的失败作业错误消息时,
transaction (process id ) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. rerun the transaction.
这应该有助于识别死锁受害者或死锁的原因:https://ask.sqlservercentral.com/questions/5982/how-can-i-identify-all-processes-involved-in-a-dea.html
如果您想降低进程死锁的风险,这里有一些策略...
尝试以相同顺序 INSERT/UPDATE/DELETE 表。例如。如果一个进程正在执行此操作:
BEGIN TRAN; UPDATE TableA; UPDATE TableB; COMMIT;
当另一个进程正在执行此操作时:
BEGIN TRAN; UPDATE TableB; UPDATE TableA; COMMIT;
一个进程可能会使另一个进程死锁。完成时间越长,死锁的风险就越高。 SQL服务器会随机选择一个进程作为"Deadlock Victim"。
- 尽量减少事务中涉及的代码。 IE。 BEGIN TRANSACTION 和 COMMIT TRANSACTION 语句之间的 INSERT/UPDATE/DELETE 代码行更少
- 如果可能,处理小批量数据。如果您正在处理大量行,请尝试添加批处理,以便代码在任何给定时间锁定较小批次的数据。