我试图弄清楚为什么 SQL Server 存储过程执行缓慢,所以我放入了一些粗略的计时器,如下所示:
Create Procedure DoStuff
As Begin
Declare @Stopwatch datetime
Set @Stopwatch=GetDate()
Print char(13) + 'Task A'
/* Perform Task A */
Print DateDiff(ms, @Stopwatch, GetDate()); Set @Stopwatch = GetDate()
Print char(13) + 'Task B'
/* Perform Task B */
Print DateDiff(ms, @Stopwatch, GetDate()); Set @Stopwatch = GetDate()
Print char(13) + 'Task C'
-- Perform Task C
Print DateDiff(ms, @Stopwatch, GetDate()); Set @Stopwatch = GetDate()
End
Exec DoStuff
我得到了这样的东西:
Task A 0 Task B 80 Task C 100
所以我认为该过程需要 180 毫秒才能执行。但是,该过程需要 3000+ 毫秒才能执行;在客户统计中,我得到
Client processing time: 12 Total execution time: 3105 Wait time on server replies: 3093
额外的 ~2800 毫秒是什么原因?
最佳答案
这是检查各个时间的粗略方法。更好的方法是在 SQL Profiler 中运行跟踪并监视 SP:Completed和 SP:StmtCompleted事件。
SP:Completed 在 sproc 完成时记录,给出总时间。
SP:StmtCompleted 在存储过程中的每个语句完成时记录。因此,这将为您提供存储过程中每个单独部分的时间。
值得使用这种方法,重新检查数字,然后从那里开始。
关于SQL存储过程执行时间之谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2210271/