War*_* P 5 ssms execution-plan sql-server-2008-r2
我有一个大约需要 3-5 秒的存储过程,我试图理解它,所以我想要一个执行计划。当我在启用了执行计划的 SQL Server Management Studio 中运行它时,它需要超过 15 分钟,然后,我得到一个显示“执行计划”的选项卡,但该选项卡是空的。任何进一步尝试运行任何 SQL(甚至select * from foo)都不再有效。我有一个损坏的 SQL 服务器管理工作室应用程序,我必须将其关闭并重试。我已经做了 3 次,浪费了 45 分钟,现在我准备学习一些替代方案。
首先,是否有一种可靠的命令行方式可以SQLPLAN为特定的 sql 脚本生成文件,可能是从命令行,然后我可以使用 SSMS 以外的其他工具进行调查来生成我的计划。
其次,如果没有内置可靠的命令行方式来生成 SQL 执行计划并将其存储为文本或 XML,那么我想知道是否存在其他一些可以做得很好的第三方工具在非常大的 SQLPlans 上,特别是当它的 GUI 绘图部分不堪重负时不会窒息和死亡。
当 SSMS 不会生成并向您显示执行计划时,您会怎么做?我使用的是 SQL 2008 R2 Standard 及其包含的 SSMS 版本,我没有任何额外的插件。
更新我正在调用一个存储过程,它创建一个游标,它执行子查询,并在循环中做大坏事,生成超过 10K 个单独的子查询语句。看起来我真的需要重构它以减少输出风暴。
Update2它确实看起来像服务器端跟踪(将问题区域归零),然后返回到分析,然后可能需要返回到查询计划。我在大图中放大得太深了,我需要把它放大一点。
你看过SentryOne Plan Explorer吗?它可以处理管理工作室令人窒息的庞大计划。您还可以从该工具中生成实际和估计的计划,因此您甚至不必为 SSMS 烦恼。
SET STATISTICS XML ON在运行查询之前尝试。这将以 XML 格式返回计划,而不会尝试在 SSMS 中呈现它。然后,您可以将文本复制并粘贴到文件中。从那里,您将获得 XML 格式的计划,您可以在SQL Sentry Plan Explorer 之类的工具中打开它。
小智 5
我时常遇到过这种情况。上面提到的 SET STATISTICS XML ON 选项可能是最好的答案(除了使用第三方之外)。但是,我发现在服务器本身上运行 SSMS 会有所帮助。也就是说,如果您在本地机器上使 SSMS 崩溃,那么在服务器上尝试可能不是一个好主意。
您可以做的另一件事是查询计划缓存,以查看该过程的缓存中有哪些执行计划,查询类似于以下内容:
select
querytext.text,executionplan.query_plan , plan_handle
from
sys.dm_exec_cached_plans
outer apply sys.dm_exec_sql_text(plan_handle) as querytext
outer apply sys.dm_exec_query_plan(plan_handle) as executionplan
Where text like 'Create procedure dbo.procname%'
Run Code Online (Sandbox Code Playgroud)
我经常做的另一件事 - 甚至在查看执行计划之前,就是 SET STATISTICS IO ON 然后运行过程/代码。如果我对 SET STATISTICS IO ON 的输出感到满意,那么我很可能有一个我喜欢的计划。 http://msdn.microsoft.com/en-us/library/ms184361.aspx