답변:
이벤트 간 "경과 시간"을 측정하는 간단한 방법 중 하나는 현재 날짜와 시간을 파악하는 것입니다.
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 @t1 = GETDATE();
쿼리 상단에 SET @t2 = GETDATE();SELECT 'NOTE 1',DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;SET @t1 = GETDATE();
붙인 다음 쿼리 내 적절한 지점에 붙여 넣 습니다 ( "NOTE 1"을 적절하게 작성). 선택을 측정 값 대신 중단 점으로 처리하는 것은 의미 적으로 접근 방식과 동일하지만 @ t1에 대한 최종 설정은 의사가 있지만 모든 쿼리를 측정해야한다고 가정합니다. 이는 순전히 정신 / 타이핑 최적화입니다 (쿼리 당 두 개의 페이스트가 아닌 중단 점당 하나의 페이스트).
위의 답변보다 더 정확한 측정을 원할 경우 :
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)
To use SET STATISTICS TIME, users must have the appropriate permissions to execute the Transact-SQL statement. The SHOWPLAN permission is not required.
from : technet.microsoft.com/en-us/library/ms190287.aspx
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
MICROSECOND
에 MILLISECOND
내가 사이에 줄 다음에 삽입 캐시 매번 지우는 begin
과 declare @t0 ...
: CHECKPOINT; DBCC DROPCLEANBUFFERS; DBCC FREEPROCCACHE;
. 매력과 정확히 내가 찾던 것처럼 작동합니다. +1