XML 显示计划

在 Microsoft SQL Server 中,可以通过多种方法以 XML 格式生成显示计划执行计划输出。可以在计算机之间移动 XML 格式的显示计划输出,因此这些输出就可以呈现在任何一台计算机(甚至没有安装 SQL Server 的计算机)上。还可以使用 XML 技术(例如 XPath、XQuery、XSLT、SAX 及 DOM 等)以编程方式处理 XML 格式的显示计划输出。SQL Server(包含支持 XPath 和 XQuery 的内置查询求值引擎)中支持 XML 显示计划处理功能。

您可以使用以下方法生成 XML 显示计划输出:

  • 从 SQL Server Management Studio 中的查询编辑器工具栏中选择**“显示估计的执行计划”“包括实际的执行计划”**

  • 使用 Transact-SQL 显示计划的 SET 语句选项 SHOWPLAN_XML 和 STATISTICS XML

  • 选择用于跟踪的 SQL Server Profiler 事件类 Showplan XMLShowplan XML for Query CompileShowplan XML Statistics Profile

  • 使用 sys.dm_exec_query_plan 动态管理函数

除非您使用 sys.dm_exec_query_plan,否则对于所有这些方法都将以 nvarchar(max) 数据类型返回 XML 显示计划。使用此动态管理视图时,以 xml 数据类型返回 XML 显示计划。

SQL Server 安装文件随附的显示计划的 XML 架构位于下面的位置:

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd

注意注意

如果查询优化器过早终止了查询优化,XML 显示计划输出中将返回 StmtSimple 元素的 StatementOptmEarlyAbortReason 属性。此属性可以显示的值包括 TimeOutGoodEnoughPlanFoundMemoryLimitExceeded。如果为此属性返回的是 TimeOutGoodEnoughPlanFound,则无需执行任何操作。返回的显示计划包含正确的结果。

如果为 StatementOptmEarlyAbortReason 属性返回的是 MemoryLimitExceeded,则生成的 XML 显示计划将仍是正确的,但可能不是最佳的。尝试以下方法之一来增加可用内存:1) 减少服务器上的负载。2) 增加 SQL Server 的可用内存。有关详细信息,请参阅管理大型数据库的内存。3) 检查用 sp_configure 设置的 max server memory 选项,如果其值过低,则增加该值。有关详细信息,请参阅服务器内存选项

关于显示计划 XML 架构

显示计划 XML 架构的版本号包括两个部分,例如 m.n,其中 m 是主版本号,n 是次版本号。例如,“版本 2.5”。此版本号位于显示计划 XML 架构文档根元素中。例如:version="0.5"

显示计划 XML 架构的后向兼容性

主版本号增加后,新的 XML 显示计划输出可能无法按旧的架构进行验证。但次版本号增加没有影响。例如,如果使用 XML 架构 0.5 版生成 XML 显示计划输出,则该输出可以按显示计划 XML 架构 0.6 版进行验证。

XML 显示计划的编码

SQL Server 以 Unicode 格式(发送的每个字符都以两个字节表示)将 XML 显示计划输出发送到客户端。编码规则如下:

  • If (char >= 0x0020 && char <= 0xD7FF) 或 (char == 0x0009) 或 

    (char == 0x000A) 或 (char == 0x000D) 或 (char >= 0xE000 && char <= 0xFFFD)

    then 以两个字节发送字符,else 发送“?”

  • 制表符、换行符和回车符编码方式如下:

    • \t 编码为“&#x9;”

    • \n 编码为“&#xa;”

    • \r 编码为“&#xd;”

将 XML 显示计划输出保存到文件

使用 SHOWPLAN_XML 或 STATISTICS XML Transact-SQL SET 语句生成显示计划输出后,可以将输出保存到扩展名为 .sqlplan 的文件。例如,MyXMLShowplan.sqlplan。然后就可以在 SQL Server Management Studio 中打开并查看这些 .sqlplan 文件。有关详细信息,请参阅如何以 XML 格式保存执行计划