Hen*_*sen 7 xml sql-server execution-plan sql-server-2014
如果我有一个返回 query_plan 的查询,例如像这样:
SELECT TOP 1000 st.TEXT
,cp.size_in_bytes
,cp.plan_handle
,QP.query_plan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS QP
WHERE cp.objtype = N'Adhoc'
AND cp.usecounts = 1
Run Code Online (Sandbox Code Playgroud)
然后我可以点击一个 query_plan 并将鼠标悬停在最左边的图标上,提示文本将列出估计的子树成本。
有没有办法将它Estimated Subtree Cost
作为我的查询的单独列?
我知道这个数字是无单位的,是指大约 20 年前的特定开发人员 PC。即便如此,我认为如果统计数据不是太远,它可能会告诉我查询应该花费多长时间。
我真的很努力地在谷歌上搜索这些信息,但即使是 dba.stackexchange.com 也是空的。
我相信您必须做一些 XML 查询工作才能获得估计的成本。
看看这是否是您要找的:
;WITH XMLNAMESPACES
(DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
SELECT TOP 1000 st.text
,cp.size_in_bytes
,cp.plan_handle
,QP.query_plan
,n.value('(@StatementSubTreeCost)[1]', 'VARCHAR(128)') AS StatementSubTreeCost
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS QP
CROSS APPLY query_plan.nodes('/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple') AS qn(n)
WHERE cp.objtype = N'Adhoc'
AND cp.usecounts = 1
OPTION(RECOMPILE);
Run Code Online (Sandbox Code Playgroud)
这将返回批处理中单个语句的成本。如果您需要整个批次的总估计子树成本,您可能需要在某些分组中工作。