发现SQL查询最慢块的最佳方法是什么?

时间:2009-06-05 03:10:48

标签: sql query-optimization

我遇到的问题是,运行存储过程会占用太多资源,这有时会导致服务器超时(特别是当CPU使用率超过90%时)。

任何人都可以建议最好和最快捷的方法来发现占用大量资源的块,并提出解决问题的好方法吗?

  • 我正在使用SQL Server 2005

5 个答案:

答案 0 :(得分:5)

您想使用Query Profiler。 Explained here。这将向您显示查询执行路径的图形表示,以及它占用的时间最多。

答案 1 :(得分:3)

如果您想知道哪个块最慢,请使用以下

SET STATISTICS PROFILE ON

SET STATISTICS IO ON

SET STATISTICS TIME ON

运行SP时,将显示每个查询的统计信息。

答案 2 :(得分:0)

如果您正在使用SQl Server Management工作室,则可以打开执行计划以显示有关sql server将如何执行查询的信息,包括每个子流程将占用整个流程的百分比。

通常在执行此操作时,会有一部分查询明显使用大部分资源。

使用此信息,您可以就如何调整数据库做出明智的决定。 (比如在违规表中添加索引)

答案 3 :(得分:0)

您无需使用SQL事件探查器查看执行计划 - 只需:

SET SHOWPLAN_XML ON

答案 4 :(得分:0)

如果在sproc中有一堆语句,打开SET STATISTICS选项可能会有点麻烦,因为你有很多输出块与输入相关联。

SSMS中查询计划的图形表示非常有用,因为它显示了每个语句相对于整个批处理/派生程的成本的百分比成本。但这是一个单独的值,因此有时运行Profiler并打开语句级输出会更有帮助。如果添加事件SQL,Profiler将为每个语句提供单独的IO和CPU成本:StmtCompleted和列CPU和读取。