블로그 이미지
Sunny's

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

'WaitForMultipleObjects'에 해당되는 글 1

  1. 2009.03.27 [MSSQL2005] WAITFOR(Transact-SQL)
2009. 3. 27. 01:32 MSSQL

지정된 시간 또는 시간 간격에 도달하거나 지정된 문이 최소 한 행을 수정 또는 반환할 때까지 일괄 처리, 저장 프로시저 또는 트랜잭션의 실행을 차단합니다.

WAITFOR { DELAY 'time_to_pass' | TIME 'time_to_execute' | ( receive_statement ) [ , TIMEOUT timeout ] }

주의)

WAITFOR 문을 실행하는 동안 트랜잭션이 실행되며 같은 트랜잭션에서 다른 요청을 실행할 수 없습니다.

WAITFOR는 쿼리의 기능을 변경하지 않습니다. 쿼리가 행을 반환할 수 없을 경우 WAITFOR는 계속 대기하거나 TIMEOUT(지정된 경우)에 도달할 때까지 대기합니다.

WAITFOR 문에서는 커서를 열 수 없습니다.

WAITFOR 문에서는 뷰를 정의할 수 없습니다.

쿼리가 query wait 옵션을 초과하면 WAITFOR 문 인수를 실행하지 않고 완료할 수 있습니다. 구성 옵션에 대한 자세한 내용은 query wait 옵션을 참조하십시오. 활성 및 대기 프로세스를 보려면 sp_who를 사용합니다.

각 WAITFOR 문에는 연결된 스레드가 있습니다. 같은 서버에 많은 WAITFOR 문이 지정된 경우 많은 스레드가 이러한 문의 실행을 대기하느라 정체될 수 있습니다. SQL Server 는 WAITFOR 문과 연결된 스레드의 수를 모니터링하고 서버에 스레드 부족이 발생하기 시작할 경우 스레드 중 일부를 임의로 선택하여 종료합니다.

WAITFOR 문이 액세스를 시도하는 행 집합에 대한 변경을 방지하는 잠금을 보유한 트랜잭션 내에서 WAITFOR가 있는 쿼리를 실행하면 교착 상태가 발생할 수 있습니다. SQL Server 는 이러한 시나리오를 식별하고 이러한 교착 상태가 존재할 가능성이 있는 경우 빈 결과 집합을 반환합니다.

DELAY

일괄 처리, 저장 프로시저 또는 트랜잭션을 실행하기 전에 대기하도록 지정된 시간으로 최대 24시간이 될 수 있습니다.

'time_to_pass'

대기할 총 시간입니다. time_to_passdatetime 데이터로 사용할 수 있는 형식 중 하나를 사용하여 지정하거나 로컬 변수로 지정할 수 있습니다. 날짜를 지정할 수 없으므로 datetime 값의 날짜 부분은 허용되지 않습니다.

TIME

일괄 처리, 저장 프로시저 또는 트랜잭션을 실행하도록 지정된 시간입니다.

'time_to_execute'

WAITFOR 문이 종료되는 시간입니다. time_to_executedatetime 데이터로 사용할 수 있는 형식 중 하나를 사용하여 지정하거나 로컬 변수로 지정할 수 있습니다. 날짜를 지정할 수 없으므로 datetime 값의 날짜 부분은 허용되지 않습니다.

receive_statement

유효한 RECEIVE 문입니다.

TIMEOUT timeout

메시지가 큐에 도착하기를 대기할 시간(밀리초)을 지정합니다.



1. WAITFOR TIME 사용

 다음 예에서는 sp_update_job 저장 프로시저를 오후 10시 20분(22:20)에 실행합니다.

USE msdb;
EXECUTE sp_add_job @job_name = 'TestJob';
BEGIN
    WAITFOR TIME '22:20';
    EXECUTE sp_update_job @job_name = 'TestJob',
        @new_name = 'UpdatedJob';
END;
GO


 

2. WAITFOR DELAY 사용

다음 예에서는 2시간 지연 후에 저장 프로시저를 실행합니다.

BEGIN WAITFOR DELAY '02:00'; EXECUTE sp_helpdb; END; GO

3. 로컬 변수와 함께 WAITFOR DELAY 사용

다음 예에서는 로컬 변수를 WAITFOR DELAY 옵션과 함께 사용하는 방법을 보여 줍니다. 저장 프로시저는 정해진 시간 동안 변수를 기다린 다음 사용자에게 경과된 시간, 분 및 초 수 정보를 반환하도록 생성됩니다.

USE AdventureWorks; GO IF OBJECT_ID('dbo.time_delay','P') IS NOT NULL DROP PROCEDURE dbo.time_delay; GO CREATE PROCEDURE time_delay @DELAYLENGTH char(9) AS DECLARE @RETURNINFO varchar(255) BEGIN WAITFOR DELAY @DELAYLENGTH SELECT @RETURNINFO = 'A total time of ' + SUBSTRING(@DELAYLENGTH, 1, 2) + ' hours, ' + SUBSTRING(@DELAYLENGTH, 4, 2) + ' minutes, and ' + SUBSTRING(@DELAYLENGTH, 7, 2) + ' seconds ' + 'has elapsed! Your time is up.'; PRINT @RETURNINFO; END; GO -- This next statement executes the time_delay procedure. EXEC time_delay '00:00:10' GO

posted by Sunny's
prev 1 next