存储过程的执行时间不同

时间:2016-12-08 06:30:45

标签: sql sql-server sql-execution-plan

我有一个存储过程和几个语句。以下是程序的执行时间统计:

  

SQL Server解析和编译时间:CPU时间= 0 ms,经过时间=   0毫秒SQL Server解析和编译时间:CPU时间= 0 ms,已过去   时间= 0毫秒。

     

SQL Server执行时间:CPU时间= 0毫秒,已用时间= 1毫秒。

     

(1行受影响)

     

SQL Server执行时间:CPU时间= 11484毫秒,已用时间=   2277毫秒。

     

(29行(s)受影响)

     

SQL Server执行时间:CPU时间= 0毫秒,已用时间= 1毫秒。

     

SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。

     

SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。

     

SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。

     

(1行受影响)

     

SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。

     

(1行受影响)

     

SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。

     

SQL Server执行时间:CPU时间= 11484毫秒,已用时间=   2283毫秒。

正如您所看到的总共4562毫秒。但是当我查看状态栏时,我发现需要2秒钟。我希望它应该是4秒。为什么这两个不同?

enter image description here

1 个答案:

答案 0 :(得分:1)

2277 ms的第一次等待是程序中语句的执行时间。第二个2283毫秒是程序的完整持续时间。所以程序运行时间为2283毫秒而不是(2277 + 2283)毫秒

所以如果我像这样创建一个等待2秒的过程

CREATE PROCEDURE usp_delay AS BEGIN
WAITFOR DELAY '00:00:02'
END
GO

SET STATISTICS IO ON;
SET STATISTICS TIME ON;
GO

EXEC usp_delay;

您可以看到统计信息io和时间如下:

  

SQL Server解析和编译时间:      CPU时间= 0 ms,经过时间= 0 ms。

     

SQL Server解析和编译时间:      CPU时间= 0 ms,经过时间= 9 ms。

     

SQL Server执行时间:      CPU时间= 0 ms,经过时间= 2000 ms。

     

SQL Server执行时间:      CPU时间= 0 ms,已用时间= 2010 ms。

请注意,对于语句WAITFOR DELAY,它有2个经过时间> = 2000ms,对于完整的过程时间,它有一个。这也是你所看到的,并且程序在2010毫秒运行,而不是基于上述总和的4010毫秒。