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
답변
통계 아이콘을 클릭하여 조회를 표시 한 후 실행하여 시간을 확보하고 조회의 효율성을 확인하십시오.