我遇到的问题是,运行存储过程会占用太多资源,这有时会导致服务器超时(特别是当CPU使用率超过90%时)。
任何人都可以建议最好和最快捷的方法来发现占用大量资源的块,并提出解决问题的好方法吗?
答案 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和读取。