如何查找SQL Server中的存储过程执行时间



我有如下10个存储过程:SP1, SP2,…,SP10这些存储过程做一些事情。我需要运行这些程序如下:执行SP1;SP2执行;…执行SP10;

当SQL server完成这些过程的执行时,它给出十行显示所有这些存储过程引起的任何行更改。我想做的是,在执行所有存储过程后,SQL Server还在输出窗口中给出每个存储过程的执行时间。我可以这样做吗?我确信,为了实现这个任务,我需要修改存储过程,但我不知道如何做到这一点……请帮帮我。谢谢。

假设管理工作室或其他环境中有输出窗格,您可以;

SET STATISTICS TIME ON
EXEC SP1
EXEC SP2
...
SET STATISTICS TIME OFF

您可以使用Sql Server Profiler用于此目的,它还提供了许多关于每个执行的查询和存储过程的有用信息。

MSDN: SQL Profiler Data Columns

SQL Profiler显示每个事件的执行时间

另一种直接的方式:

  1. DECLARE 2 datetime变量:start/end
  2. SET start = GETDATE()
  3. EXEC SP_NAME
  4. SET end = GETDATE()
  5. 执行时间-结束和开始的时间差
declare @start datetime = getdate()
-- your SQL statements
exec dbo.MyStoredProcedure
declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate())

您根本不需要修改SPs代码。下面的查询提供了有关sp执行时间的一些统计信息。

SELECT 
   DB_NAME(database_id) [database],
   OBJECT_NAME(object_id) [stored_procedure],
   cached_time, 
   last_execution_time, 
   execution_count,
   total_elapsed_time/execution_count [avg_elapsed_time],
   [type_desc]
FROM sys.dm_exec_procedure_stats
--WHERE OBJECT_NAME(object_id) IN ('SP1','SP2','SP3','SP4','SP5')
ORDER BY avg_elapsed_time desc;

使用Sql Server profiler等工具有很多方法可以做到这一点,但最简单的方法是运行每个进程,并以一行打印时间:

print convert(varchar, getdate(), 21)
EXEC PROC SP1
print convert(varchar, getdate(), 21)

捕获并显示执行时间

使用两个datetime类型的参数并在存储过程

tsql启动前使用getdate()设置1

tsql之后使用getdate()设置第二,最后使用datediff函数得到差值

最新更新