SQL存储过程执行时间之谜

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毫秒?

Ada*_*Dev 5

这是检查个人时间的粗略方式.更好的方法是在SQL事件探查器中运行跟踪并监视SP:已完成SP:StmtCompleted事件.

SP:完成时,在sproc完成时记录,给出总时间.
SP:当sproc中的每个语句完成时,将记录StmtCompleted.因此,这将为您提供每个部分的时间.

值得使用这种方法,重新检查数字,然后从那里开始.