2014년 5월 12일 월요일

SQL Server Agent는 약속을 잘 지키나요?

SQL Server의 Agent에 대해서 두가지 의문이 들었습니다.
첫째는, Job을 만들면 즉시 한번 실행이 되는지 아니면 Interval 동안 기다리는지...
둘째는, 10초 간격으로 Interval을 설정하면 1분동안 6번을 실행하는지 입니다.

테스트를 위해 테이블을 하나 만듭니다.
CREATE TABLE TBL1 (COL1 INT IDENTITY(1,1), COL2 DATETIME)
그리고 이 테이블에 Insert하는 프로시저를 만듭니다.
CREATE PROC USP_T_TBL1

AS

INSERT INTO TBL1 (COL2)
SELECT GETDATE()
그리고 10분에 한번씩 실행하는 Job을 만들고 테이블을 조회해봅니다. 1분동안 기다린 후 조회해봐도 데이터는 없네요. 두번째 테스트를 위해서 Job의 Interval을 10초로 설정하고 1분이 지나면 프로시져의 실행 시간이 Interval보다 길어지게 만들기 위하여 20초를 대기하도록 프로시저를 수정합니다.
ALTER PROC USP_T_TBL1

AS

WAITFOR DELAY '00:00:20'

INSERT INTO TBL1 (COL2)
SELECT GETDATE()
그리고 1분간 수행 후 데이터를 조회해봤습니다. 정확한 테스트를 위해 손목시계로 시간을 측정하였습니다. 결과는 다음과 같습니다.
처음 6번째 줄까지는 10초에 한번씩 실행되다가 7번째 부터는 대략 30초마다 실행된것을 확인 할 수 있습니다. 결론은, 1. SQL Agent는 Job을 생성하면 일단 Interval동안 기다린 다음 실행된다. 2. 바쁘면 건너뛴다. PS. 만약 스케줄의 시작 시간이 아직 지나지 않았으면 그 시간에는 한번 수행됩니다.

댓글 1개:

  1. 포스팅 잘 보고 있습니다^^ 특히 이번 내용은 직접 테스트해본적은 없지만 꽤나 궁금했던 부분이였는데, 포스팅 감사합니다~

    답글삭제