我正在使用 SQL Server 2012,想知道如何分析存储过程
例如,分析器可以捕获存储过程中的每个单独的 SQL 语句,它是什么,运行需要多长时间等?
我正在尝试诊断合并复制存储过程,这必须在合并代理的完整运行中被捕获。似乎不可能抓住有性能问题的存储过程并再次运行它,因为那时它并不慢。
我正在使用 SQL Server 2012,想知道如何分析存储过程
例如,分析器可以捕获存储过程中的每个单独的 SQL 语句,它是什么,运行需要多长时间等?
我正在尝试诊断合并复制存储过程,这必须在合并代理的完整运行中被捕获。似乎不可能抓住有性能问题的存储过程并再次运行它,因为那时它并不慢。
Kevin 的回答描述了要在 SQL Trace/SQL Profiler 中捕获的事件。稍微扩展一下这个答案 -
SP:StmtCompleted
听起来会向您展示正在完成的存储过程中的每个语句。此外,如果您在繁忙的系统上并试图诊断性能问题,您应该小心使用 SQL Profiler。SQL Profiler 比跟踪文件或使用扩展事件慢得多。Jonathan Kehayias 的这篇博客文章显示,使用 SQL Profiler 大约会导致系统性能的 90% 开销和跟踪到文件的大约 10% 开销。扩展事件更少。这就是为什么通常建议不要运行 SQL Profiler 本身,而
虽然此信息可通过扩展事件获得,但我建议仍使用 SQL Trace(SQL Profiler 背后的技术),但改为跟踪文件(如果您想投资于学习和使用扩展事件,这将是可行的方法,在 SQL Server 的未来版本中,SQL 跟踪将消失,我们将拥有的只是扩展事件)。我还建议您通过“列过滤器”按钮过滤掉尽可能多的背景噪音,以确保您只捕获必要的内容。您可以使用 Kevin 在他的好答案中描述的步骤使用 Profiler 工具设置跟踪,然后从同一 GUI 添加过滤器。然后,您可以将跟踪导出为脚本,并在 SQL Server 跟踪到不包含数据库或事务日志文件的文件夹上的文件中运行该脚本。要导出,您只需设置跟踪,运行几秒钟以确保您正在捕获您想要的内容,停止它,然后转到菜单栏
File
->Export
->Script Trace Definition
并保存文件。然后在您要跟踪的服务器上的新查询窗口中打开该文件。您可以通过查看您刚刚创建的脚本中使用的各种存储过程的帮助文章来了解有关您创建的该脚本的选项和定义的更多信息。如果您有时间并想学习,您还可以阅读一些关于扩展事件的文章,并了解如何捕获信息。当您准备好开始博客文章时,Jonathan Kehayias是一个很好的资源。
您可以通过 SQL Server Profiler 捕获存储过程中的各个语句。为此,在您的事件选择选项卡中,单击“显示所有事件”复选框。然后,向下滚动到存储过程类别并选中SP:StmtCompleted旁边的框。如果您还选择了SQL:BatchStarted和SQL:BatchCompleted事件,您可以获得存储过程运行的从头到尾的图片,并通过 SPID 将它们捆绑在一起。
查看计划缓存以查看是否可以为执行缓慢的过程获取查询计划也可能会有所帮助。你可以从这样的事情开始: