捕获复杂的实际执行计划

Bil*_*urt 6 ssms execution-plan sql-server-2008-r2

我有一个存储过程,其中包括构建和执行大量动态 SQL 语句。(不要恨我,我没有写。)

我想检索整个过程的实际执行计划,以便我可以在 SQL Sentry 计划资源管理器中对其进行分析。

当我在查询窗口中执行 PROC 时打开实际执行计划只会在我尝试查看它并将其保存时使 Management Studio 崩溃。

如果我打开 SHOW STATISTICS XML,它只会导致每个单独的语句计划 xml 作为单独的结果。那对我没有帮助,因为我需要整个计划作为一个整体。

我的问题是我想从服务器上保存一个 .sqlplan 文件并将其保存到我的本地机器上,我可以在其中在 Plan Explorer 中对其进行分析。原因是我无法直接连接到运行 Plan Explorer 的服务器。通过代理的 RDP 是我唯一的连接方法,因此我只能分析已保存并已检索到本地计算机进行分析的 .sqlplan 文件。

当我检索程序的估计计划时,我可以将返回的图形计划另存为 .sqlplan 文件,该文件具有单个根节点和单个 Batch Sequence 节点。然后我可以将该文件带到我的本地计算机并在 Plan Explorer 中打开它,该软件可以看到构成批处理的所有不同语句。

如果我打开 XML Statistics,则每个语句计划都将作为它自己的独立计划返回,并且具有自己的根节点。我不能把它放在一个文件中,因为那不是有效的 xml。

有任何想法吗?

谢谢,比尔

Ken*_*her 4

我不能肯定地说,因为我从未处理过那么大的存储过程,但你可以尝试这个:

SELECT query_plan
FROM sys.dm_exec_procedure_stats
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
WHERE object_id = object_id('procedure_name')
Run Code Online (Sandbox Code Playgroud)

然后将输出保存到文本文件。