如果我有一个返回 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
然后我可以单击 query_plan 并将鼠标悬停在最左侧的图标上,其中提示文本将列出估计的子树成本。
有没有办法将它Estimated Subtree Cost
作为我的查询的单独列?
我知道这个数字是无单位的,并且是指大约 20 年前的特定开发人员 PC。即便如此,我认为如果统计数据不是太远,它可能会告诉我查询需要多长时间。
我已经非常努力地向 Google 搜索此信息,但即使 dba.stackexchange.com 也是空的。
我相信您必须做一些 XML 查询工作才能获得估计的成本。
看看这是不是你要找的:
这将返回批处理中单个语句的成本。如果您需要整个批次的估计子树总成本,您可能需要在某些分组中工作。
这是我如何使用我的问题的答案。
我是 sp_whoisactive 的忠实粉丝。如果没有,请停止阅读;在这里下载。
因此,我将其设置为每 10 分钟收集一次快照,如下所示:
我已经让它运行了一段时间(最多 3 天)。然后我像这样转换收集到的数据:
最后我得到一个列表,显示与运行时相比,估计成本在哪里小,而工作根本没有被阻止
这是一个非常有趣的列表,但它带有一点噪音。首先,我选择忽略运行时间少于 10 分钟的快速小型作业,但该限制取决于您的情况。
现在,找到计划不佳的工作要容易得多。
非常感谢您的帮助。