2012-03-13 3 views
4

실행할 스크립트가 있고 실행 시간이 필요합니다. 어떻게 계산합니까?SQl Server 2008 R2에서 스크립트 실행 기간 가져 오기

나는 이런 식으로 사용할 생각 :

DECLARE @startTime DATETIME 
SET @startTime = GETDATE(); 

--Script 


DECLARE @endTime DATETIME 
SET @endTime = GETDATE(); 

PRINT 'Transfer Duration:'; 
GO 
PRINT CONVERT(varchar,@[email protected],14); 
GO 

을하지만 GO를 사용 (내가가 있습니다) 그래서 오류가 있기 때문에, 그래서 계산 제안 및 스크립트를 실행의 인쇄 기간은 (무엇이다 Go)?

답변

4

테이블을 사용하여 시작 및 종료 시간을 저장하고 프로세스 ID도 함께 입력하십시오. 그런 다음 DATEDIFF()를 사용하여 경과 된 시간을 계산하십시오.

CREATE TABLE Profiling(
      spid   smallint  NOT NULL, 
      StartTime  DATETIME2  NOT NULL, 
      EndTime   DATETIME2 
    ) 

    INSERT INTO Profiling(spid, StartTime) 
    SELECT @@SPID, CURRENT_TIMESTAMP 
    GO 

    -- your queries come here 
    -- ..... 

    UPDATE Profiling 
    SET EndTime = CURRENT_TIMESTAMP 
    WHERE spid = @@SPID 
    GO 

    SELECT DATEDIFF(MS, startTime, EndTime) as MilliSeconds 
    FROM Profiling 
    WHERE spid = @@SPID 

때때로 spid의 충돌을 피하기 위해 테이블을 잘립니다.

+0

구문이 잘못되었습니다. 임시 변수는 'go'라고 쓰면 곧 사라집니다 –

+0

"잘못된 구문"입니까? 어떤 RDBMS에서 얻었습니까? SQL Server 2005에서 완벽하게 작동합니다. "임시 변수"?? 위의 코드에서 사용 된 단일 (임시) 변수는 없습니다! @@ SPID는 변수가 아닌 Tranact-SQL 함수의 빌드입니다. 조업을 중지하십시오. – Wim

+0

나는 appologize, 내가 실패한 비슷한 테스트를했는데, 스크립트가 잘 동작한다. –

4

SET STATISTICS TIME을 확인하십시오.

+0

고맙습니다. 답해 주셔서 감사합니다. 그러나 'STATISTIC Time'은 'GO'로 구분 된 명령 묶음의 시간을 계산합니다. 실제로이 방법으로 스크립트 실행 시간이 두 배가되고 모든 시간에 대해 하나의 지속 시간이 필요합니다. 스크립트. – Saeid

0
Go 
DECLARE @startTime DATETIME 
SET @startTime = GETDATE(); 

-- your sql statement 

DECLARE @endTime DATETIME 
SET @endTime = GETDATE(); 

PRINT 'Transfer Duration:'; 

PRINT cast((@[email protected]) AS TIME); 
Go 

하거나, 구문 분석, 컴파일, 각 문을 실행하는 데 필요한 시간을 밀리 초 단위로 표시합니다 SET STATISTICS TIME을 사용할 수 있습니다 더 정확합니다.

+0

'DATETIME'은 3.33ms의 정확도를 가지고 있기 때문에 이것은 매우 정확하고 매우 유용하지 않을 것입니다. 저는 생각합니다 ..... SQL Server 2008은 100ns의 정확도를 가진'DATETIME2'를 가질 것입니다 - 더 유용 해. (추신 : 내가 추천하지 않은 해결책을 지적했다.) –

+0

@marc_s 이것을 지적 해 주셔서 감사합니다. –

+0

@Viswanathan Iyer 답변 주셔서 감사합니다.하지만 주된 질문에서 나는 GO 명령을 사용해야한다고 강조합니다. – Saeid

관련 문제