【问题标题】:SQL Server DeadlockSQL Server 死锁
【发布时间】:2017-01-04 11:01:44
【问题描述】:

我预定的工作是一天工作 6 次。 有时它的失败原因是死锁。我试图确定谁阻止了我的会话。

我搜索并发现了 sql profiler,但它没有显示确切的结果。如何用 T-SQL 或其他方式识别历史?

当下图显示失败的作业错误信息时,

transaction (process id) 在锁资源上与另一个进程死锁,并被选为死锁牺牲品。重新运行事务。

【问题讨论】:

    标签: sql-server tsql deadlock jobs sql-server-profiler


    【解决方案1】:

    这应该有助于识别死锁受害者或死锁原因:https://ask.sqlservercentral.com/questions/5982/how-can-i-identify-all-processes-involved-in-a-dea.html

    如果您想降低进程死锁的风险,这里有一些策略...

    • 尝试以相同的顺序插入/更新/删除表。例如。如果一个进程正在这样做:

      BEGIN TRAN; UPDATE TableA; UPDATE TableB; COMMIT;
      

    当另一个进程正在这样做时:

        BEGIN TRAN; UPDATE TableB; UPDATE TableA; COMMIT;
    

    存在一个进程会死锁另一个进程的风险。完成时间越长,死锁的风险就越高。 SQL Server 只会随机选择一个进程作为“死锁受害者”。

    • 尽量减少事务中涉及的代码。 IE。 BEGIN TRANSACTION 和 COMMIT TRANSACTION 语句之间的 INSERT/UPDATE/DELETE 代码行更少
    • 如果可能,处理小批量数据。如果您正在处理大量行,请尝试添加批处理,以便代码在任何给定时间锁定较小批量的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多