在 SQL Server 中检索一周前的死锁

Posted

技术标签:

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

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

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

【问题讨论】:

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

【讨论】:

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

以上是关于在 SQL Server 中检索一周前的死锁的主要内容,如果未能解决你的问题,请参考以下文章

PHP MySQL:获取一周前的所有MySQL行

MySQL:获取所有一周前的MySQL行

“gcloud app logs tail”显示一周前的数据

Mayi_windows下 删除指定文件夹里面一周前的所有文件和文件夹的bat

thinkphp5 runtime\log怎么读取,是用来存储啥的

卡尔曼滤波