从计划缓存中检索大型计划的 XML

squ*_*man 5 execution-plan sql-server-2008-r2

我正在尝试(以图形方式)查看计划缓存中的大型查询计划,但遇到了 XML 在查询结果中被截断的问题。这是我正在使用的查询:

SELECT TOP 1
    size_in_bytes,
    query_plan
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) qp
ORDER BY size_in_bytes DESC
Run Code Online (Sandbox Code Playgroud)

我已经在 SSMS 中尝试过,当我点击结果网格中的 XML 时,我得到Unable to show XML. Unexpected end of file when parsing Name has occurred. Line 1, position 2097154.如果我复制并粘贴 XML,它确实被截断了。

我试过手动使用SET TEXTSIZE 2147483647只是因为,并没有做任何事情。(我知道这是 SQL Native Client 提供程序的默认值,只是试图强制解决这个问题)。

我试过SQLCMD从 .sql 文件运行语句并输出到文本文件,但这给我的更少。

我尝试以SQLCMD交互方式使用,:XML ON并收到此错误:

<?MSSQLError HResult="0x80004005" Source="Microsoft XML Extensions to SQL Server" Description="No description provided"?>
Run Code Online (Sandbox Code Playgroud)

该计划是 157 MB。

有什么办法可以把完整的计划拿出来让我看到吗?

Mar*_*ith 9

对于 157MB 的Tools -> Options -> Query Results -> SQL Server -> Results to Grid屏幕,您需要设置Maximum Characters Retrieved -> XML data为无限制,如下所示。

截屏

  • 不需要重新启动 SSMS;您将不得不打开一个新的查询窗口。 (6认同)
  • IIRC,您可能需要创建一个新的查询窗口。您不必重新启动 SSMS,尽管这也应该有效。 (2认同)