我面临一个问题,即运行存储过程占用过多资源,这有时会导致服务器超时(尤其是当 CPU 使用率超过 90% 时)。
谁能建议最好和最快的方法是发现占用大量资源的块,并提出解决它的好方法,好吗?
- 我正在使用 SQL Server 2005
我面临一个问题,即运行存储过程占用过多资源,这有时会导致服务器超时(尤其是当 CPU 使用率超过 90% 时)。
谁能建议最好和最快的方法是发现占用大量资源的块,并提出解决它的好方法,好吗?
您想使用查询分析器。 在这里解释。它将向您显示查询执行路径的图形表示,以及其中哪些部分花费的时间最多。
如果您想知道哪个块最慢,请使用以下命令
设置统计资料
设置统计 IO 开启
设置统计时间
当您运行 SP 时,这将显示每个查询的统计信息。
You don't need to use SQL Profiler to view an execution plan - just:
SET SHOWPLAN_XML ON
如果您使用的是 SQl Server Management Studio,您可以打开执行计划以显示有关 sql server 将如何执行查询的信息,包括每个子进程将占用整个进程的百分比。
通常在执行此操作时,查询的一部分显然会使用大部分资源。
使用此信息,您可以就如何调整数据库做出明智的决定。(例如向有问题的表添加索引)
如果存储过程中有一堆语句,打开 SET STATISTICS 选项可能有点复杂,因为您有很多输出块与输入相关联。
SSMS 中查询计划的图形表示非常有用,因为它显示了每个语句相对于整个批处理/存储过程的成本的百分比成本。但这是一个单一值,因此有时仅运行 Profiler 并打开语句级输出会更有帮助。如果添加事件 SQL:StmtCompleted 和列 CPU 和读取,Profiler 将为每个语句提供单独的 IO 和 CPU 成本。