[MSSQL] 성능 측정을 위한 Elapsetime 체크 함수
2014. 5. 30. 09:28ㆍCoders
오래간만에 MSSQL 관련 포스팅을 합니다.
간혹 가다가, 프로시저나 쿼리의 성능 테스트를 할 때, SSMS 의 예상 실행 게획 표시 등을 이용하기도 하지만, 실제 데이터를 가지고 쿼리를 이리저리 바꿔 가면서 성능 테스트를 할 때가 있습니다.
그런 경우, 데이터가 명확하게 나오는 지가 점검해야 할 1순위이겠지만, 데이터 확인이 다 된 상태에서 그 다음으로 가장 중요한 건 속도 문제겠지요. 이 때, PRINT, GETDATE() 등을 이용하여 시작시간, 종료시간을 기록하고는 합니다. 닷넷 등에는 StopWatch 라는 유용한 클래스가 있어서, 경과 시간에 대한 측정이 용이한데요.(사실, Stopwatch 도 멀티스레드 환경에서는 제대로 된 측정치를 보장하진 않습니다.) SQL 에서는 이러한 기능이 없어 그냥 시간을 보고 시간 차를 계산합니다.
그래서, 간단한 함수를 만들었습니다.
리턴받은 문자열에서 H, M, S 를 다른 문자로 치환(REPLACE 함수)하여 총 경과 시간을 뽑을 수 있는 함수 입니다. (숫자로 받으면 좋겠지만, 그럴 경우 테이블리턴 함수를 써야겠죠.)
또, 이 함수를 응용하면, 시작시간만 파라메터로 받는 함수로 만들어서, 종료 시간은 함수 내부에서 GETDATE() 시스템 함수를 사용하여 측정도 가능하겠습니다.
네, (언제나 그런 거지만) 제가 다음번에 또 써 먹으려고 포스팅 하는 겁니다.
IF OBJECT_ID('DBO.UFN_ELAPSETIME', 'FN') IS NOT NULL DROP FUNCTION DBO.UFN_ELAPSETIME; GO CREATE FUNCTION DBO.UFN_ELAPSETIME ( @DT_START DATETIME, @DT_END DATETIME ) RETURNS VARCHAR(100) AS BEGIN DECLARE @ELAPSE_DT DATETIME, @ELAPSE_TIME VARCHAR(100); SET @ELAPSE_DT = @DT_END - @DT_START; SET @ELAPSE_TIME = CONVERT(VARCHAR, DATEPART(HH, @ELAPSE_DT)) + 'H' + RIGHT('0' + CONVERT(VARCHAR, DATEPART(MI, @ELAPSE_DT)), 2) + 'M' + RIGHT('0' + CONVERT(VARCHAR, DATEPART(SS, @ELAPSE_DT)), 2) + 'S'; RETURN @ELAPSE_TIME; END GO -- 테스트 DECLARE @DT_START DATETIME, @DT_END DATETIME; SET @DT_START = '2014-05-29 21:43:55'; SET @DT_END = GETDATE(); SELECT REPLACE( REPLACE( REPLACE( DBO.UFN_ELAPSETIME(@DT_START, @DT_END), 'H', '시간'), 'M', '분'), 'S', '초 경과') AS RESULT
'Coders' 카테고리의 다른 글
[C#] Class 의 string 프로퍼티 값의 NULL 문자열 제거 (0) | 2014.06.20 |
---|---|
[C#] Unicode 포함 문자열을 변환하는 방법 (0) | 2014.05.21 |
Visual Studio 몇 가지 옵션 설정 팁 (0) | 2014.05.15 |