sql-server - 如何检查sql server中哪个存储过程花费的时间最长

标签 sql-server performance optimization

我想知道有哪些方法可以监控哪些存储过程和 SQL 查询在各个组件上花费的时间(CPU 周期、扫描时间等)比已设置的阈值更多。

我也希望它被记录。 每当任何用户使用我的网站并调用某个程序时,我都想记录所有超过我的阈值的程序。

是否可以使用 SQL 查询或过程来完成此操作。我们有这方面的一些程序吗? 任何 SQL 工具或任何外部工具,都可以付费(试用)或免费。我想在我的数据库上尝试它们。

最佳答案

您应该能够使用Dynamic Management Views来做到这一点(DMV)特别是您可能对 exec_query_stats 最感兴趣 View 维护按执行计划分组的所有查询(CPU 时间、物理/逻辑读取等)的执行统计信息。

另请参阅这篇精彩的文章,其中包含用于查看计划统计信息的示例查询,并详细介绍了该主题:

最后,如果您想要跟踪/记录过度长时间运行的查询,那么您可能需要考虑让 SQL Server Profiler 跟踪始终运行,并将执行时间过滤器设置为某个时间高数字(例如 > 1000 毫秒)。您可以使用 SQL Server Profiler Windows 应用程序,也可以使用 T-SQL 创建跟踪,让它记录到数据库中的表中:

这样做的好处是可以准确地告诉您哪个查询花了多长时间、何时以及该查询的参数是什么(神圣的 SQL bat 侠!)

在加载的数据库上运行此跟踪的性能影响实际上非常小 - 我知道一些令人惊讶的关键应用程序将这些跟踪作为例行程序运行,以便能够快速诊断性能问题(并且它确实有帮助)很多)。关键是选择一个“大”的执行时间,该时间足够大,不会淹没日志,但又足够小,可以获取足够长的运行查询以发挥作用。

过去在遇到性能问题时使用的另一个技巧是让未过滤的 SQL Server 跟踪在已加载的 SQL Server 上运行一小段时间(1 分钟左右)(它确实没有什么影响) ,你就会被日志淹没)

我还衷心推荐Microsoft SQL Server internals关于这个主题的书籍 - 它非常技术性,但是它很精彩,因为它不仅涵盖了这些类型的诊断工具,还涵盖了它们的实际含义

关于sql-server - 如何检查sql server中哪个存储过程花费的时间最长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3456629/

相关文章:

java - 如何使用java启用SQL服务器连接

javascript - 具有静态值的指令

mysql - 如何将 MySQL 查询执行时间从 90 秒减少到 5 秒以内甚至 1 秒

MySQL数据库结构: more columns or more rows

sql - 优化MySQL临时表(内存表)配置?

java - 打印所有 JVM 标志

sql - 更新 sql View 时出现问题

sql-server - SQL Server 2008 - sp_refreshview 对某些 View 的轰炸

sql - 如何从 t-sql 中的 xml 变量获取节点名称和值

c++ - 使用 Opencv C++ 对循环进行矢量化