Her*_*ill 3 sql sql-server optimization query-optimization
我试图找出为什么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
Run Code Online (Sandbox Code Playgroud)
我得到这样的东西:
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事件探查器中运行跟踪并监视SP:已完成和SP:StmtCompleted事件.
SP:完成时,在sproc完成时记录,给出总时间.
SP:当sproc中的每个语句完成时,将记录StmtCompleted.因此,这将为您提供每个部分的时间.
值得使用这种方法,重新检查数字,然后从那里开始.