【问题标题】:Retriving a week old deadlocks in SQL Server在 SQL Server 中检索一周前的死锁
【发布时间】:2018-04-06 13:24:55
【问题描述】:

是否有任何可能的方法来查找上周在 SQL Server 中哪个进程导致了死锁?我检查了仅保留昨晚数据的扩展事件。如果有人可以分享一个脚本来找出答案会很有帮助。

作业已完成,但出现错误 - 数据库服务器名称:################- 事务(进程 ID 279)在锁定资源上与另一个进程死锁并已被选中作为僵局的受害者。重新运行事务。 System.Data.SqlClient.SqlException (0x80131904):事务(进程 ID 279)与另一个进程在锁资源上死锁,并已被选为死锁受害者。重新运行事务。

【问题讨论】:

  • 这就是为什么您要自己设置显式跟踪或事件通知以永久记录所有死锁及其图表 (for example)。默认跟踪是“尽力而为”,并且可能随时被覆盖,具体取决于服务器的繁忙程度。它们只适用于即时故障排除。

标签: sql-server performance deadlock database-deadlocks


【解决方案1】:

可以从Extended Events -> Sessions -> System_health -> 右键单击​​package0.event_file 并选择查看目标数据来检索死锁详细信息,接下来您需要按名称排序以查看XML形式的死锁报告作为图表。但为此,您需要在死锁发生之前启用跟踪 1204 和 1222。

这些是您需要启用的跟踪。

DBCC TRACEON  (1204,-1)
DBCC TRACEON  (1222,-1)

Click here for more details...

【讨论】:

  • 我要求投反对票的人说明投反对票的原因。我希望@stackoverflow 能解决这个问题。发布问题的人需要知道他犯了什么错误导致投票失败。
  • 实际上,有一些不准确的假设,系统 healthtn 默认存储死锁信息,不需要启用标志(但这可能会被覆盖)并且还启用跟踪标志将死锁存储在错误日志中。进一步您显示的屏幕截图适用于扩展事件
猜你喜欢
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多