[performance] t-sql 쿼리를 실행하는 데 걸리는 시간 측정

SqlServer 2005를 사용하는 두 개의 t-sql 쿼리가 있습니다. 각 쿼리를 실행하는 데 걸리는 시간을 어떻게 측정 할 수 있습니까?

스톱워치를 사용해도 잘리지 않습니다.



답변

이벤트 간 “경과 시간”을 측정하는 간단한 방법 중 하나는 현재 날짜와 시간을 파악하는 것입니다.

SQL Server Management Studio에서

SELECT GETDATE();
SELECT /* query one */ 1 ;
SELECT GETDATE();
SELECT /* query two */ 2 ; 
SELECT GETDATE(); 

경과 시간을 계산하기 위해 해당 날짜 값을 변수로 가져 와서 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;

그것은 하나의 접근 방식입니다. SQL 프로파일 러를 사용하여 쿼리의 경과 시간을 얻을 수도 있습니다.


답변

위의 답변보다 더 정확한 측정을 원할 경우 :

set statistics time on 

-- Query 1 goes here

-- Query 2 goes here

set statistics time off

결과는 메시지 창에 나타납니다.

업데이트 (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)


답변

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]

이 솔루션을 볼 수도 있습니다


답변

또 다른 방법은 메뉴> 쿼리> 클라이언트 통계 포함을Client Statistics 통해 액세스 할 수 있는 SQL Server 내장 기능을 사용 하는 것입니다 .

개별 쿼리 창에서 각 쿼리를 실행하고 Client Statistics탭 바로 옆의 Messages탭 에 제공된 결과를 비교할 수 있습니다 .

예를 들어 아래 이미지에서 내 쿼리 중 하나에 대한 서버 응답을 얻는 데 걸린 평균 시간은 39 밀리 초입니다.

결과

여기 에서 실행 시간을 얻는 세 가지 방법을 모두 읽을 수 있습니다 . Estimated Execution Plan ctrlL쿼리에 대한 추가 조사 를 위해 표시해야 할 수도 있습니다.


답변

더 좋은 방법은 쿼리의 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


답변

통계 아이콘을 클릭하여 조회를 표시 한 후 실행하여 시간을 확보하고 조회의 효율성을 확인하십시오.


답변