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