另一个 SQL 服务器问题:我有一个简单的查询,它为我提供了自重置计数器以来 CPU 最密集的 SQL:
select top 10
sum(qs.total_worker_time) as total_cpu_time,
sum(qs.execution_count) as total_execution_count,
qs.plan_handle, st.text
from
sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.plan_handle) as st
group by qs.plan_handle, st.text
order by sum(qs.total_worker_time) desc
问题1:究竟是什么plan_handle
?它似乎不是计划的散列,就像在 Oracle 中一样。我问是因为我希望能够检测到语句计划发生变化的情况。
问题 2:一旦有了 plan_handle,我就会对实际的计划感兴趣。所以我这样做,例如:
select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000)
在 query_plan 列中,我得到一个链接,当我单击该链接时会显示一个 XML 文档。如果我将它作为whatever.sqlplan 保存在磁盘上,我可以在Windows 中双击它,它会在Management Studio 中正确显示。肯定有办法避免这一步?!
问题 3:有没有办法将 XML 转换回文本格式,就像过去的 SET SHOWPLAN_TEXT 一样?我希望能够以图形方式查看它们,但也希望以某种有意义的方式自动区分它们。
谢谢!
A1:plan_handle 是一组语句或批处理的哈希。
A2:不,dm_exec_query_plan 以 XML 格式返回查询计划,因此您需要单击它才能看到图表。
A3。尝试这个:
我在 Wrox Press 的 SQL Server 2008 Internals and Troubleshooting 一书中找到了以下提示:
如果您使用连接到 SQL 2005 服务器的 SQL 2008 SSMS,当您单击 XML 查询计划时,它将自动为您加载图形查询计划。
我使用同一本书中的以下查询验证了它是否有效:
此外,如果您还没有看过它,请查看 SQL Sentry 的免费计划资源管理器。您必须首先将 XML 作为 .sqlplan 保存到磁盘,但它提供了一个更易于使用的 SQL 执行计划视图。希望有一天有人会想出一个可视化执行计划差异工具。:D