The*_*oot 145 performance sql-server-2005
我有两个使用SqlServer 2005的t-sql查询.如何测量每个查询运行所需的时间?
使用我的秒表不会削减它.
Mic*_*eyn 235
如果您想要比上述答案更准确的测量:
set statistics time on
-- Query 1 goes here
-- Query 2 goes here
set statistics time off
Run Code Online (Sandbox Code Playgroud)
结果将显示在" 消息"窗口中.
更新(2015-07-29):
根据流行的请求,我编写了一个代码片段,您可以使用它来计算整个存储过程的运行时间,而不是其组件.虽然这只返回上次运行所花费的时间,但还有其他返回的统计信息sys.dm_exec_procedure_stats
也可能有价值:
-- Use the last_elapsed_time from sys.dm_exec_procedure_stats
-- to time an entire stored procedure.
-- Set the following variables to the name of the stored proc
-- for which which you would like run duration info
DECLARE @DbName NVARCHAR(128);
DECLARE @SchemaName SYSNAME;
DECLARE @ProcName SYSNAME=N'TestProc';
SELECT CONVERT(TIME(3),DATEADD(ms,ROUND(last_elapsed_time/1000.0,0),0))
AS LastExecutionTime
FROM sys.dm_exec_procedure_stats
WHERE OBJECT_NAME(object_id,database_id)=@ProcName AND
(OBJECT_SCHEMA_NAME(object_id,database_id)=@SchemaName OR @SchemaName IS NULL) AND
(DB_NAME(database_id)=@DbName OR @DbName IS NULL)
Run Code Online (Sandbox Code Playgroud)
spe*_*593 161
测量事件之间"经过时间"的一种简单方法是获取当前日期和时间.
在SQL Server Management Studio中
SELECT GETDATE();
SELECT /* query one */ 1 ;
SELECT GETDATE();
SELECT /* query two */ 2 ;
SELECT GETDATE();
Run Code Online (Sandbox Code Playgroud)
要计算经过的时间,您可以将这些日期值捕获到变量中,并使用DATEDIFF函数:
DECLARE @t1 DATETIME;
DECLARE @t2 DATETIME;
SET @t1 = GETDATE();
SELECT /* query one */ 1 ;
SET @t2 = GETDATE();
SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;
SET @t1 = GETDATE();
SELECT /* query two */ 2 ;
SET @t2 = GETDATE();
SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;
Run Code Online (Sandbox Code Playgroud)
这只是一种方法.您还可以使用SQL事件探查器获取查询的已用时间.
ati*_*ker 15
DECLARE @StartTime datetime
DECLARE @EndTime datetime
SELECT @StartTime=GETDATE()
-- Write Your Query
SELECT @EndTime=GETDATE()
--This will return execution time of your query
SELECT DATEDIFF(MS,@StartTime,@EndTime) AS [Duration in millisecs]
Run Code Online (Sandbox Code Playgroud)
更好的是,这将测量查询的n次迭代的平均值!非常适合更准确的阅读.
declare @tTOTAL int = 0
declare @i integer = 0
declare @itrs integer = 100
while @i < @itrs
begin
declare @t0 datetime = GETDATE()
--your query here
declare @t1 datetime = GETDATE()
set @tTotal = @tTotal + DATEDIFF(MICROSECOND,@t0,@t1)
set @i = @i + 1
end
select @tTotal/@itrs
Run Code Online (Sandbox Code Playgroud)