如何在死锁图中捕获实际执行计划?

Posted

技术标签:

【中文标题】如何在死锁图中捕获实际执行计划?【英文标题】:How to capture actual execution plan in a deadlock graph? 【发布时间】:2011-08-15 13:49:45 【问题描述】:

SQL Server 是否可以通过任何选项或设置转储死锁中涉及的存储过程的实际执行计划(在该实例中)?

这是在 SQL Server 2008 的上下文中。

【问题讨论】:

【参考方案1】:

捕获 SQL 和计划句柄,然后您可能会从计划缓存中获取查询执行计划。

这是在死锁图发生之前捕获它的方法。

    启动 SQL Server Profiler。在“文件”菜单上,单击“新建跟踪”,然后连接到 SQL Server 实例。为跟踪命名并选择其中一个跟踪模板。

    执行以下操作之一:

    选中保存到文件复选框以将跟踪捕获到文件中。为设置最大文件大小指定一个值。或者,选择启用文件翻转和服务器进程跟踪数据。

    选中保存到表复选框以将跟踪捕获到数据库表。或者,单击设置最大行数,然后指定一个值。

    (可选)选中启用跟踪停止时间复选框,并指定停止日期和时间。

    选择“事件选择”选项卡。选中显示所有事件。在事件数据列中,展开锁事件类别,然后选中死锁图复选框。

    “事件提取设置”选项卡已添加到“跟踪属性”对话框中。

    在事件提取设置选项卡上,单击单独保存死锁 XML 事件。在“另存为”对话框中,输入要存储死锁图事件的文件的名称。

    单击单个文件中的所有死锁 XML 批处理以将所有死锁图事件保存在单个 XML 文件中,或单击不同文件中的每个死锁 XML 批处理为每个死锁图创建一个新的 XML 文件。

保存死锁文件后,您可以在 SQL Server Management Studio 中打开该文件。

How to: Open, View, and Print a Deadlock File (SSMS)

Analyzing Deadlocks with SQL Server Profiler

How to: Save Deadlock Graphs (SQL Server Profiler)

Deadlock Graph Event Class

【讨论】:

以上是关于如何在死锁图中捕获实际执行计划?的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER执行计划和索引优化基础

在 Oracle 11g 中获取实际执行计划

[Postgres] 如何读懂执行计划:参数解释

Linux 进程和计划任务管理

谁教我怎么在PLSQL看执行计划还有看执行效率

SQL 执行计划 - 估计计划似乎比实际计划更准确