데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

DMV를 이용한 SQL Server 대기 상태 확인

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

사용자가 나에게 와서 "데이터베이스가 느려요" 라고 말해주었다. 나는 어디에서부터 시작 할까? SQL Server의 성능을 확인하기 위해서는 성능 카운터, 프로파일러 등다양한 방법이 있다. 하지만 이것으로는 왠지 부족 한것 같다. DMV를 통하여 현재 SQL Server의 실행중인 대기 스레드 상태를 확인해 보자.

 

Sys.dm_os_wait_stats는 실행 중인 모든 스레드로 인해 발생한 대기 정보를 반환한다. 이 DMV를 사용하면 SQL Server와 관련된 문제와 특정 쿼리 및 일괄 처리와 관련된 성능 문제도 확인 할 수 있다.

Sys.dm_os_wait_stats를 사용하려면 서버에 대한 VIEW SERVER STATE 권한이 필요하다.

 

select * from sys.dm_os_wait_stats

 

 

열 이름

데이터 형식

설명

wait_type

nvarchar(60)

대기 유형의 이름

waiting_tasks_count

bigint

대기 수. 대기가 시작 될 때 카운터 증가

wait_time_ms

bigint

총 대기 시간(밀리초). 이 시간은 signal_wait_time_ms 포함

max_wait_time_ms

bigint

최대 대기 시간

signal_wait_time_ms

Bigint

대기 스레드가 신호를 받은 시간과 실행을 시작한 시간의 차이

 

 

다음 스크립트는 백분율 형태로 대기 상태를 보여준다. 대기 목록을 보고 관련이 없는 대기 유형을 필터링 할 수 있다.

WITH Waits AS

(

SELECT

wait_type ,

wait_time_ms / 1000. AS wait_time_s ,

100. * wait_time_ms / SUM ( wait_time_ms ) OVER () AS pct ,

ROW_NUMBER () OVER ( ORDER BY wait_time_ms DESC ) AS rn

FROM sys.dm_os_wait_stats

WHERE wait_type

NOT IN

( 'CLR_SEMAPHORE' , 'LAZYWRITER_SLEEP' , 'RESOURCE_QUEUE' ,

'SLEEP_TASK' , 'SLEEP_SYSTEMTASK' , 'SQLTRACE_BUFFER_FLUSH' , 'WAITFOR' ,

'CLR_AUTO_EVENT' , 'CLR_MANUAL_EVENT' )

) -- filter out additional irrelevant waits

 

SELECT W1.wait_type ,

CAST ( W1.wait_time_s AS DECIMAL ( 12 , 2 )) AS wait_time_s ,

CAST ( W1.pct AS DECIMAL ( 12 , 2 )) AS pct ,

CAST ( SUM ( W2.pct ) AS DECIMAL ( 12 , 2 )) AS running_pct

FROM Waits AS W1

INNER JOIN Waits AS W2 ON W2.rn <= W1.rn

GROUP BY W1.rn ,

W1.wait_type ,

W1.wait_time_s ,

W1.pct

HAVING SUM ( W2.pct ) - W1.pct < 95 ; -- percentage threshold;

 

 

위 결과에서 보면 ASYNC_NEWORK_IO의 경우에는 태스크가 네트워크 뒤에서 차단되는 경우로 네트워크 쓰기 중에 발생 한다. 이때는 클라이언트가 서버의 데이터를 처리하고 있는지 확인 해야 한다. CXPACKET의 경우에는 병렬 처리로 인하여 발생한 문제로 이 대기 유형에 대한 경합이 발생 하면 병렬 처리 수준을 낮추는 것을 고려해야 한다.

 

 

Sys.dm_os_wait_stats 정보를 주기적으로 테이블에 저장하면 좋은 모니터링 정보가 된다.

SQL Server Agent 등을 통해서 주기적으로 테이블에 DMV정보를 저장 할 수 있도록 하자.

CREATE TABLE tbl_dm_os_wait_stats

(

[wait_type] [nvarchar] ( 60 ) NOT NULL,

[waiting_tasks_count] [bigint] NOT NULL,

[wait_time_ms] [bigint] NOT NULL,

[max_wait_time_ms] [bigint] NOT NULL,

[signal_wait_time_ms] [bigint] NOT NULL,

[capture_time] [datetime] NOT NULL,

[increment_id] [int] NOT NULL

);

 

ALTER TABLE tbl_dm_os_wait_stats

ADD DEFAULT ( GETDATE ()) FOR [capture_time] ;

 

--Insert wait stats info in a datestamped format for later querying:

DECLARE @DT DATETIME ;

SET @DT = GETDATE () ;

DECLARE @increment_id INT ;

 

SELECT @increment_id = MAX ( increment_id ) + 1 FROM tbl_dm_os_wait_stats

SELECT @increment_id = ISNULL ( @increment_id, 1 )

 

 

INSERT INTO tbl_dm_os_wait_stats

( [wait_type] , [waiting_tasks_count] , [wait_time_ms] , [max_wait_time_ms] ,

[signal_wait_time_ms] , [capture_time] , [increment_id] )

SELECT [wait_type] , [waiting_tasks_count] , [wait_time_ms] , [max_wait_time_ms] ,

[signal_wait_time_ms] , @DT , @increment_id

FROM sys.dm_os_wait_stats ;

 

 

 

 

다음 쿼리를 통하여 대기가 발생한 횟수와 대기 시간, 최대 대기 시간 등 통계 정보를 확인 할 수 있다.

DECLARE @max_increment_id INT

 

SELECT @max_increment_id = MAX ( increment_id )

FROM tbl_dm_os_wait_stats

 

SELECT DOWS1.wait_type ,

( DOWS1.waiting_tasks_count - DOWS2.waiting_tasks_count ) AS [waiting_tasks_count] ,

( DOWS1.wait_time_ms - DOWS2.wait_time_ms ) AS [wait_time_ms] ,

DOWS1.max_wait_time_ms ,

( DOWS1.signal_wait_time_ms - DOWS2.signal_wait_time_ms ) AS [signal_wait_time_ms] ,

DATEDIFF ( ms , DOWS2.capture_time , DOWS1.capture_time ) AS [elapsed_time_ms] ,

DOWS1.capture_time AS [last_time_stamp] , DOWS2.capture_time AS [previous_time_stamp]

FROM

(

SELECT wait_type , waiting_tasks_count , wait_time_ms , max_wait_time_ms ,

signal_wait_time_ms , capture_time , increment_id

FROM tbl_dm_os_wait_stats

WHERE increment_id = @max_increment_id

) AS DOWS1

INNER JOIN

(

SELECT wait_type , waiting_tasks_count , wait_time_ms , max_wait_time_ms ,

signal_wait_time_ms , capture_time , increment_id

FROM tbl_dm_os_wait_stats

WHERE increment_id = ( @max_increment_id - 1 )

) AS DOWS2 ON DOWS1.wait_type = DOWS2.wait_type

WHERE ( DOWS1.wait_time_ms - DOWS2.wait_time_ms ) > 0

/*

This can technically be eliminated because we're not persisting these waits:

AND DOWS1.wait_type NOT IN

('CLR_SEMAPHORE', 'LAZYWRITER_SLEEP', 'RESOURCE_QUEUE',

'SLEEP_TASK', 'SLEEP_SYSTEMTASK', 'SQLTRACE_BUFFER_FLUSH', 'WAITFOR',

'CLR_AUTO_EVENT', 'CLR_MANUAL_EVENT')

*/

ORDER BY ( DOWS1.wait_time_ms - DOWS2.wait_time_ms ) DESC ;

 

 

아래 스크립트는 대기 정보가 저장된 테이블에서 최근의 정보를 비율로 나타낸다.

DECLARE @max_increment_id INT

 

SELECT @max_increment_id = MAX ( increment_id )

FROM tbl_dm_os_wait_stats ;

 

WITH Waits AS

(

SELECT DOWS1.wait_type ,

(( DOWS1.wait_time_ms - DOWS2.wait_time_ms )/ 1000 ) AS [wait_time_s] ,

100. * ( DOWS1.wait_time_ms - DOWS2.wait_time_ms ) / SUM ( DOWS1.wait_time_ms - DOWS2.wait_time_ms ) OVER () AS pct ,

ROW_NUMBER () OVER ( ORDER BY ( DOWS1.wait_time_ms - DOWS2.wait_time_ms ) DESC ) AS rn

FROM

(

SELECT wait_type , waiting_tasks_count , wait_time_ms , max_wait_time_ms ,

signal_wait_time_ms , capture_time , increment_id

FROM tbl_dm_os_wait_stats

WHERE increment_id = @max_increment_id

) AS DOWS1

INNER JOIN

(

SELECT wait_type , waiting_tasks_count , wait_time_ms , max_wait_time_ms ,

signal_wait_time_ms , capture_time , increment_id

FROM tbl_dm_os_wait_stats

WHERE increment_id = ( @max_increment_id - 1 )

) AS DOWS2 ON DOWS1.wait_type = DOWS2.wait_type

WHERE ( DOWS1.wait_time_ms - DOWS2.wait_time_ms ) > 0

)

 

SELECT W1.wait_type ,

CAST ( W1.wait_time_s AS DECIMAL ( 12 , 2 )) AS wait_time_s ,

CAST ( W1.pct AS DECIMAL ( 12 , 2 )) AS pct ,

CAST ( SUM ( W2.pct ) AS DECIMAL ( 12 , 2 )) AS running_pct

FROM Waits AS W1

INNER JOIN Waits AS W2 ON W2.rn <= W1.rn

GROUP BY W1.rn ,

W1.wait_type ,

W1.wait_time_s ,

W1.pct

HAVING SUM ( W2.pct ) - W1.pct < 95 ; -- percentage threshold;

 

 

 

대기 유형

설명

ABR

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

ASSEMBLY_LOAD

어셈블리 로드에 대한 단독 액세스 중에 발생합니다.

ASYNC_DISKPOOL_LOCK

파일 만들기 또는 초기화 같은 태스크를 수행하고 있는 병렬 스레드를 동기화하려고 하는 경우에 발생합니다.

ASYNC_IO_COMPLETION

태스크가 I/O가 완료될 때까지 대기하는 경우에 발생합니다.

ASYNC_NETWORK_IO

태스크가 네트워크 뒤에서 차단되는 경우에 네트워크 쓰기 중에 발생합니다. 클라이언트가 서버의 데이터를 처리하고 있는지 확인합니다.

AUDIT_GROUPCACHE_LOCK

특수 캐시에 대한 액세스를 제어하는 잠금을 기다리는 경우에 발생합니다. 캐시에는 각 감사 동작 그룹을 감사하는 데 사용되는 감사에 대한 정보가 포함되어 있습니다.

AUDIT_LOGINCACHE_LOCK

특수 캐시에 대한 액세스를 제어하는 잠금을 기다리는 경우에 발생합니다. 캐시에는 로그인 감사 동작 그룹을 감사하는 데 사용되는 감사에 대한 정보가 포함되어 있습니다.

AUDIT_ON_DEMAND_TARGET_LOCK

감사와 관련된 확장 이벤트 대상의 단일 초기화를 위한 잠금을 기다리는 경우에 발생합니다.

AUDIT_XE_SESSION_MGR

감사와 관련된 확장 이벤트 세션의 시작 및 중지를 동기화하는 데 사용되는 잠금을 기다리는 경우에 발생합니다.

BACKUP

태스크가 백업 처리의 일부로 차단되는 경우에 발생합니다.

BACKUP_OPERATOR

태스크가 테이프 탑재를 대기하는 경우에 발생합니다. 테이프 상태를 확인하려면 sys.dm_io_backup_tapes를 쿼리합니다. 탑재 작업이 보류된 상태가 아니라면 이 대기 유형이 테이프 드라이브의 하드웨어 문제를 나타낼 수 있습니다.

BACKUPBUFFER

백업 태스크가 데이터를 기다리거나 데이터를 저장할 버퍼를 기다리는 경우에 발생합니다. 이 유형은 태스크가 테이프 탑재를 기다리는 경우 외에는 일반적이지 않습니다.

BACKUPIO

백업 태스크가 데이터를 기다리거나 데이터를 저장할 버퍼를 기다리는 경우에 발생합니다. 이 유형은 태스크가 테이프 탑재를 기다리는 경우 외에는 일반적이지 않습니다.

BACKUPTHREAD

태스크가 백업 작업이 완료될 때까지 대기하는 경우에 발생합니다. 대기 시간은 몇 분에서 몇 시간까지 걸릴 수 있습니다. 대기 중인 태스크가 I/O 프로세스에 위치하면 문제가 있는 것이 아닙니다.

BAD_PAGE_PROCESS

백그라운드의 주의 대상 페이지 로거가 5초보다 긴 간격으로 실행되는 것을 방지하려는 경우에 발생합니다. 주의 대상 페이지가 너무 많으면 로거가 자주 실행됩니다.

BROKER_CONNECTION_RECEIVE_TASK

연결 끝점에서 메시지를 받기 위한 액세스를 대기하는 경우에 발생합니다. 끝점에 대한 수신 액세스는 직렬화됩니다.

BROKER_ENDPOINT_STATE_MUTEX

Service Broker 연결 끝점의 상태에 액세스하려는 경합이 있는 경우에 발생합니다. 변경 내용의 상태에 대한 액세스는 직렬화됩니다.

BROKER_EVENTHANDLER

태스크가 Service Broker의 기본 이벤트 처리기에서 대기하는 경우에 발생합니다. 매우 짧게 발생해야 합니다.

BROKER_INIT

각 활성 데이터베이스에서 Service Broker를 초기화하는 경우에 발생합니다. 자주 발생하면 안 됩니다.

BROKER_MASTERSTART

태스크가 Service Broker의 기본 이벤트 처리기가 시작될 때까지 대기하는 경우에 발생합니다. 매우 짧게 발생해야 합니다.

BROKER_RECEIVE_WAITFOR

RECEIVE WAITFOR가 대기 중인 경우에 발생합니다. 받을 준비가 된 메시지가 없는 경우에 주로 발생합니다.

BROKER_REGISTERALLENDPOINTS

Service Broker 연결 끝점의 초기화 중에 발생합니다. 매우 짧게 발생해야 합니다.

BROKER_SERVICE

대상 서비스와 연결된 Service Broker 대상 목록이 업데이트되거나 우선 순위가 다시 매겨지는 경우에 발생합니다.

BROKER_SHUTDOWN

계획된 Service Broker 종료 시 발생합니다. 가능하면 매우 짧게 발생해야 합니다.

BROKER_TASK_STOP

Service Broker 큐 태스크 처리기가 태스크를 종료하려고 하는 경우에 발생합니다. 상태 검사가 직렬화되고 먼저 실행 상태에 있어야 합니다.

BROKER_TO_FLUSH

Service Broker 지연 플러셔가 메모리 내 전송 개체를 작업 테이블에 플러시하는 경우에 발생합니다.

BROKER_TRANSMITTER

Service Broker 전송기가 작동될 때까지 대기하는 경우에 발생합니다.

BUILTIN_HASHKEY_MUTEX

내부 데이터 구조를 초기화하는 동안 인스턴스 시작 후 발생할 수 있습니다. 데이터 구조가 초기화되면 되풀이되지 않습니다.

CHECK_PRINT_RECORD

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

CHECKPOINT_QUEUE

검사점 태스크가 다음 검사점 요청을 대기하는 동안 발생합니다.

CHKPT

검사점 스레드에 시작할 수 있음을 알리기 위해 서버 시작 시 발생합니다.

CLEAR_DB

데이터베이스를 열거나 닫는 등과 같이 데이터베이스의 상태를 변경하는 작업 중에 발생합니다.

CLR_AUTO_EVENT

태스크가 현재 CLR(공용 언어 런타임) 실행 중이며 특정 자동 이벤트가 시작될 때까지 대기하는 경우에 발생합니다. 긴 대기는 일반적인 것이며 문제가 있는 것은 아닙니다.

CLR_CRST

태스크가 현재 CLR 실행 중이며 현재 다른 작업에서 사용 중인 중요한 섹션을 시작하기 위해 대기하는 경우에 발생합니다.

CLR_JOIN

태스크가 현재 CLR 실행 중이며 다른 작업이 끝날 때까지 대기하는 경우에 발생합니다. 이 대기 상태는 태스크 간에 조인이 있는 경우에 발생합니다.

CLR_MANUAL_EVENT

태스크가 현재 CLR 실행 중이며 특정 수동 이벤트가 시작될 때까지 대기하는 경우에 발생합니다.

CLR_MEMORY_SPY

CLR에서 발생하는 모든 가상 메모리 할당을 기록하는 데 사용되는 데이터 구조에 대한 잠금 획득 대기 중에 발생합니다. 병렬 액세스가 있는 경우 무결성이 유지되도록 데이터 구조가 잠깁니다.

CLR_MONITOR

태스크가 현재 CLR 실행 중이며 모니터 잠금을 획득하려고 대기하는 경우에 발생합니다.

CLR_RWLOCK_READER

태스크가 현재 CLR 실행 중이며 판독기 잠금으로 인해 대기하는 경우에 발생합니다.

CLR_RWLOCK_WRITER

태스크가 현재 CLR 실행 중이며 기록기 잠금으로 인해 대기하는 경우에 발생합니다.

CLR_SEMAPHORE

태스크가 현재 CLR 실행 중이며 세마포를 기다리는 경우에 발생합니다.

CLR_TASK_START

CLR 태스크 시작이 완료될 때까지 대기하는 동안 발생합니다.

CLRHOST_STATE_ACCESS

CLR 호스팅 데이터 구조를 단독으로 사용하려고 대기하는 경우에 발생합니다. 이 대기 유형은 CLR 런타임을 설정 또는 중지하는 동안 발생합니다.

CMEMTHREAD

태스크가 스레드로부터 안전한 메모리 개체를 기다리는 경우에 발생합니다. 여러 태스크가 같은 메모리 개체의 메모리를 할당하려고 하여 경합이 발생할 때 대기 시간이 증가할 수 있습니다.

CXPACKET

쿼리 프로세서 교환 반복기를 동기화하려고 하는 경우에 발생합니다. 이 대기 유형에 대한 경합이 문제가 되면 병렬 처리 수준을 낮출 것을 고려할 수 있습니다.

CXROWSET_SYNC

병렬 범위 검색 중에 발생합니다.

DAC_INIT

관리자 전용 연결이 초기화되는 동안 발생합니다.

DBMIRROR_DBM_EVENT

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

DBMIRROR_DBM_MUTEX

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

DBMIRROR_EVENTS_QUEUE

데이터베이스 미러링이 이벤트가 처리될 때까지 대기하는 경우에 발생합니다.

DBMIRROR_SEND

태스크가 네트워크 계층의 통신 백로그가 지워져서 메시지를 보낼 수 있을 때까지 대기하는 경우에 발생합니다. 통신 계층의 로드가 많아져 데이터베이스 미러링 데이터 처리량에 영향을 미치기 시작했음을 나타냅니다.

DBMIRROR_WORKER_QUEUE

데이터베이스 미러링 작업자 태스크가 추가 작업을 대기하는 경우를 나타냅니다.

DBMIRRORING_CMD

태스크가 로그 레코드가 디스크로 플러시될 때까지 대기하는 경우에 발생합니다. 이 대기 상태는 오랜 시간 동안 유지됩니다.

DEADLOCK_ENUM_MUTEX

교착 상태 모니터와 sys.dm_os_waiting_tasks가 SQL Server에서 동시에 여러 개의 교착 상태 검색을 실행하고 있지 않도록 하려고 하는 경우에 발생합니다.

DEADLOCK_TASK_SEARCH

이 리소스의 대기 시간이 길면 서버가 sys.dm_os_waiting_tasks 위에서 쿼리를 실행하고 있으며 이러한 쿼리가 교착 상태 모니터의 교착 상태 검색을 차단하고 있음을 나타냅니다. 이 대기 유형은 교착 상태 모니터에만 사용됩니다. sys.dm_os_waiting_tasks 위의 쿼리는 DEADLOCK_ENUM_MUTEX를 사용합니다.

DEBUG

내부 동기화에 대한 Transact-SQL 및 CLR 디버깅 작업 중에 발생합니다.

DISABLE_VERSIONING

SQL Server에서 가장 오래된 활성 트랜잭션의 타임스탬프가 상태 변경이 시작될 때의 타임스탬프보다 나중인지 확인하기 위해 버전 트랜잭션 관리자를 폴링하는 경우에 발생합니다. 이 경우 ALTER DATABASE 문이 실행되기 전에 시작된 모든 스냅숏 트랜잭션은 완료되었습니다. 이 대기 상태는 ALTER DATABASE 문을 사용하여 SQL Server에서 버전 관리를 해제하는 경우에 사용됩니다.

DISKIO_SUSPEND

외부 백업이 활성 상태일 때 태스크가 파일에 액세스하려고 대기하는 경우에 발생합니다. 대기 중인 모든 사용자 프로세스에 대해 보고됩니다. 사용자 프로세스당 값이 5보다 크면 외부 백업을 완료하는 데 걸리는 시간이 너무 긴 것일 수 있습니다.

DISPATCHER_QUEUE_SEMAPHORE

발송자 풀의 스레드가 처리할 추가 작업을 기다리는 경우에 발생합니다. 이 대기 유형의 대기 시간은 발송자가 유휴 상태일 때 증가됩니다.

DLL_LOADING_MUTEX

XML 파서 DLL이 로드될 때까지 대기하는 동안 한 번 발생합니다.

DROPTEMP

이전 시도가 실패한 경우 임시 개체 삭제를 다시 시도하기 전에 발생합니다. 삭제 시도가 실패할 때마다 대기 시간이 기하급수적으로 증가합니다.

DTC

태스크가 상태 전환 관리에 사용되는 이벤트를 기다리는 경우에 발생합니다. 이 상태는 SQL Server에서 MS DTC(Microsoft Distributed Transaction Coordinator) 서비스가 사용할 수 없게 되었다는 알림을 받은 후 MS DTC 트랜잭션 복구가 발생할 때 제어됩니다.

또한 이 상태는 SQL Server에서 MS DTC 트랜잭션 커밋이 시작되고 SQL Server에서 MS DTC 커밋이 완료되기를 기다릴 때 대기 태스크를 정의합니다.

DTC_ABORT_REQUEST

MS DTC 작업자 세션이 MS DTC 트랜잭션의 소유권을 획득하려고 대기하는 경우에 MS DTC 작업자 세션에서 발생합니다. MS DTC가 트랜잭션의 소유권을 획득한 후에는 세션이 트랜잭션을 롤백할 수 있습니다. 일반적으로 세션은 트랜잭션을 사용하고 있는 다른 세션을 기다립니다.

DTC_RESOLVE

복구 태스크가 트랜잭션의 결과물을 쿼리할 수 있도록 데이터베이스 간 트랜잭션에서 master 데이터베이스를 대기하는 경우에 발생합니다.

DTC_STATE

태스크가 내부 MS DTC 전역 상태 개체의 변경을 방지하는 이벤트를 기다리는 경우에 발생합니다. 이 상태는 매우 짧은 시간 동안 유지되어야 합니다.

DTC_TMDOWN_REQUEST

SQL Server에서 MS DTC 서비스가 사용할 수 없게 되었다는 알림을 받는 경우에 MS DTC 작업자 세션에서 발생합니다. 먼저 작업자는 MS DTC 복구 프로세스가 시작될 때까지 기다렸다가 작업자가 작업하고 있는 분산 트랜잭션의 결과물을 획득하기 위해 대기합니다. 이것은 MS DTC 서비스와의 연결이 다시 설정될 때까지 계속될 수 있습니다.

DTC_WAITFOR_OUTCOME

복구 태스크가 MS DTC가 활성화되어 준비된 트랜잭션을 해결할 수 있을 때까지 대기하는 경우에 발생합니다.

DUMP_LOG_COORDINATOR

주 태스크가 하위 작업이 데이터를 생성할 때까지 대기하는 경우에 발생합니다. 일반적으로 이 상태는 발생하지 않습니다. 대기 시간이 길면 예상하지 못했던 차단이 발생한 것일 수 있으므로 하위 태스크를 조사해야 합니다.

DUMPTRIGGER

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

EC

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

EE_PMOLOCK

문 실행 중 특정 유형의 메모리 할당을 동기화하는 경우에 발생합니다.

EE_SPECPROC_MAP_INIT

내부 프로시저 해시 테이블 생성을 동기화하는 경우에 발생합니다. 이 대기는 SQL Server 인스턴스가 시작된 후 해시 테이블에 처음 액세스하는 경우에만 발생합니다.

ENABLE_VERSIONING

SQL Server에서 데이터베이스를 스냅숏 격리 허용 상태로 전환할 준비가 되었다고 선언하기 전에 이 데이터베이스의 모든 업데이트 트랜잭션이 완료될 때까지 대기하는 경우에 발생합니다. 이 상태는 ALTER DATABASE 문을 사용하여 SQL Server에서 스냅숏 격리를 설정하는 경우에 사용됩니다.

ERROR_REPORTING_MANAGER

여러 개의 동시 오류 로그 초기화를 동기화하는 경우에 발생합니다.

EXCHANGE

병렬 쿼리 중 쿼리 프로세서 교환 반복기에서 동기화 중에 발생합니다.

EXECSYNC

병렬 쿼리 중 쿼리 프로세서 교환 반복기와 관련되지 않은 영역에서 동기화 중에 발생합니다. 이러한 영역의 예에는 비트맵, LOB(Large Binary Object) 및 스풀 반복기가 있습니다. LOB는 이 대기 상태를 자주 사용할 수 있습니다.

EXECUTION_PIPE_EVENT_INTERNAL

연결 컨텍스트를 통해 전송되는 일괄 처리 실행의 제작자 부분과 소비자 부분 동기화 중에 발생합니다.

FAILPOINT

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

FCB_REPLICA_READ

스냅숏이나 DBCC에서 만든 임시 스냅숏 스파스 파일의 읽기가 동기화되는 경우에 발생합니다.

FCB_REPLICA_WRITE

스냅숏이나 DBCC에서 만든 임시 스냅숏 스파스 파일에 대한 페이지 밀어넣기 또는 끌어오기가 동기화되는 경우에 발생합니다.

FS_FC_RWLOCK

다음 중 하나를 수행하기 위해 FILESTREAM 가비지 수집기가 대기하는 경우에 발생합니다.

  • 백업 및 복원에 사용되는 가비지 수집 사용 안 함
  • FILESTREAM 가비지 수집기의 한 주기 실행

FS_GARBAGE_COLLECTOR_SHUTDOWN

FILESTREAM 가비지 수집기가 정리 태스크 완료를 기다리는 경우에 발생합니다.

FS_HEADER_RWLOCK

FILESTREAM 헤더 파일(Filestream.hdr)에서 내용을 읽거나 업데이트하기 위해 FILESTREAM 데이터 컨테이너의 FILESTREAM 헤더에 대한 액세스를 얻으려고 대기하는 경우에 발생합니다.

FS_LOGTRUNC_RWLOCK

다음 중 하나를 수행하기 위해 FILESTREAM 로그 잘림에 대한 액세스를 얻으려고 대기하는 경우에 발생합니다.

  • 백업 및 복원에 사용되는 FSLOG(FILESTREAM 로그) 잘림 일시적으로 사용 안 함
  • FSLOG 잘림의 한 주기 실행

FSA_FORCE_OWN_XACT

FILESTREAM 파일 I/O 작업을 관련 트랜잭션에 바인딩해야 하지만 현재 다른 세션에서 해당 트랜잭션을 소유하고 있는 경우에 발생합니다.

FSAGENT

FILESTREAM 파일 I/O 작업이 다른 파일 I/O 작업에 사용되는 FILESTREAM 에이전트 리소스를 기다리는 경우에 발생합니다.

FSTR_CONFIG_MUTEX

다른 FILESTREAM 기능 다시 구성 작업이 완료될 때까지 대기하는 경우에 발생합니다.

FSTR_CONFIG_RWLOCK

FILESTREAM 구성 매개 변수에 대한 액세스 직렬화를 대기하는 경우에 발생합니다.

FT_METADATA_MUTEX

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

FT_RESTART_CRAWL

임시 오류로부터 복구하기 위해 마지막으로 알려진 양호 지점부터 전체 텍스트 탐색을 다시 시작해야 하는 경우에 발생합니다. 이 대기를 사용하면 해당 채우기에서 현재 작동 중인 작업자 태스크가 현재 단계를 완료하거나 종료할 수 있습니다.

FULLTEXT GATHERER

전체 텍스트 작업을 동기화하는 경우에 발생합니다.

GUARDIAN

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

HTTP_ENUMERATION

시스템 시작 시에 HTTP를 시작할 HTTP 끝점을 열거하기 위해 발생합니다.

HTTP_START

연결이 HTTP 초기화가 완료될 때까지 대기하는 경우에 발생합니다.

IMPPROV_IOWAIT

SQL Server에서 대량 로드 I/O가 완료될 때까지 대기하는 경우에 발생합니다.

INTERNAL_TESTING

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

IO_AUDIT_MUTEX

추적 이벤트 버퍼 동기화 중에 발생합니다.

IO_COMPLETION

I/O 작업이 완료될 때까지 대기하는 동안 발생합니다. 이 대기 유형은 일반적으로 비데이터 페이지 I/O를 나타냅니다. 데이터 페이지 I/O 완료 대기는 PAGEIOLATCH_* 대기로 표시됩니다.

IO_RETRY

리소스 부족으로 인해 읽기 또는 쓰기와 같은 디스크 I/O 작업이 실패하여 다시 시도되는 경우에 발생합니다.

IOAFF_RANGE_QUEUE

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

KSOURCE_WAKEUP

서비스 제어 관리자의 요청을 대기하는 동안 서비스 제어 태스크에 사용됩니다. 긴 대기가 예상되며 문제가 있는 것은 아닙니다.

KTM_ENLISTMENT

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

KTM_RECOVERY_MANAGER

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

KTM_RECOVERY_RESOLUTION

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

LATCH_DT

DT(삭제) 래치를 대기하는 경우에 발생합니다. 버퍼 래치 또는 트랜잭션 표시 래치를 포함하지 않습니다. sys.dm_os_latch_stats에서 LATCH_* 대기 목록을 사용할 수 있습니다. sys.dm_os_latch_stats는 LATCH_NL, LATCH_SH, LATCH_UP, LATCH_EX 및 LATCH_DT 대기를 그룹화합니다.

LATCH_EX

EX(배타) 래치를 대기하는 경우에 발생합니다. 버퍼 래치 또는 트랜잭션 표시 래치를 포함하지 않습니다. sys.dm_os_latch_stats에서 LATCH_* 대기 목록을 사용할 수 있습니다. sys.dm_os_latch_stats는 LATCH_NL, LATCH_SH, LATCH_UP, LATCH_EX 및 LATCH_DT 대기를 그룹화합니다.

LATCH_KP

KP(유지) 래치를 대기하는 경우에 발생합니다. 버퍼 래치 또는 트랜잭션 표시 래치를 포함하지 않습니다. sys.dm_os_latch_stats에서 LATCH_* 대기 목록을 사용할 수 있습니다. sys.dm_os_latch_stats는 LATCH_NL, LATCH_SH, LATCH_UP, LATCH_EX 및 LATCH_DT 대기를 그룹화합니다.

LATCH_NL

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

LATCH_SH

SH(공유) 래치를 대기하는 경우에 발생합니다. 버퍼 래치 또는 트랜잭션 표시 래치를 포함하지 않습니다. sys.dm_os_latch_stats에서 LATCH_* 대기 목록을 사용할 수 있습니다. sys.dm_os_latch_stats는 LATCH_NL, LATCH_SH, LATCH_UP, LATCH_EX 및 LATCH_DT 대기를 그룹화합니다.

LATCH_UP

UP(업데이트) 래치를 대기하는 경우에 발생합니다. 버퍼 래치 또는 트랜잭션 표시 래치를 포함하지 않습니다. sys.dm_os_latch_stats에서 LATCH_* 대기 목록을 사용할 수 있습니다. sys.dm_os_latch_stats는 LATCH_NL, LATCH_SH, LATCH_UP, LATCH_EX 및 LATCH_DT 대기를 그룹화합니다.

LAZYWRITER_SLEEP

지연 기록기 태스크가 일시 중지되는 경우에 발생합니다. 대기 중인 백그라운드 태스크에서 사용한 시간을 측정한 것입니다. 사용자 대기를 찾을 때 이 상태는 고려하지 마십시오.

LCK_M_BU

태스크가 대량 업데이트(BU) 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_IS

태스크가 내재된 공유(IS) 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_IU

태스크가 의도 업데이트(IU) 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_IX

태스크가 의도 배타(IX) 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_RIn_NL

태스크가 현재 키 값의 NULL 잠금 및 현재 키와 이전 키 간의 삽입 범위 잠금을 획득하려고 대기하는 경우에 발생합니다. 키의 NULL 잠금은 즉시 해제 잠금입니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_RIn_S

태스크가 현재 키 값의 공유 잠금 및 현재 키와 이전 키 간의 삽입 범위 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_RIn_U

태스크가 현재 키 값의 업데이트 잠금 및 현재 키와 이전 키 간의 삽입 범위 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_RIn_X

태스크가 현재 키 값의 배타 잠금 및 현재 키와 이전 키 간의 삽입 범위 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_RS_S

태스크가 현재 키 값의 공유 잠금 및 현재 키와 이전 키 간의 공유 범위 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_RS_U

태스크가 현재 키 값의 업데이트 잠금 및 현재 키와 이전 키 간의 업데이트 범위 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_RX_S

태스크가 현재 키 값의 공유 잠금 및 현재 키와 이전 키 간의 배타 범위 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_RX_U

태스크가 현재 키 값의 업데이트 잠금 및 현재 키와 이전 키 간의 배타 범위 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_RX_X

태스크가 현재 키 값의 배타 잠금 및 현재 키와 이전 키 간의 배타 범위 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_S

태스크가 공유 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_SCH_M

태스크가 스키마 수정 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_SCH_S

태스크가 스키마 공유 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_SIU

태스크가 의도 업데이트 공유 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_SIX

태스크가 의도 배타 공유 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_U

태스크가 업데이트 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_UIX

태스크가 의도 배타 업데이트 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LCK_M_X

태스크가 배타 잠금을 획득하려고 대기하는 경우에 발생합니다. 잠금 호환성 표는 sys.dm_tran_locks(Transact-SQL)를 참조하십시오.

LOGBUFFER

태스크가 로그 버퍼의 공간에 로그 레코드가 저장될 때까지 대기하는 경우에 발생합니다. 값이 계속 높게 나타나면 로그 장치가 서버에서 생성하는 로그의 양을 따라갈 수 없는 것일 수 있습니다.

LOGGENERATION

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

LOGMGR

데이터베이스를 닫는 동안 태스크가 로그 종료 전에 처리 중인 로그 I/O가 완료될 때까지 대기하는 경우에 발생합니다.

LOGMGR_FLUSH

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

LOGMGR_QUEUE

로그 쓰기 태스크가 작업 요청을 대기하는 동안 발생합니다.

LOGMGR_RESERVE_APPEND

태스크가 로그 잘림으로 인해 로그 공간이 확보되어 작업이 새 로그 레코드를 쓸 수 있는지 확인하려고 대기하는 경우에 발생합니다. 이 대기를 줄이려면 영향을 받는 데이터베이스의 로그 파일 크기를 늘리십시오.

LOWFAIL_MEMMGR_QUEUE

메모리를 사용할 수 있을 때까지 대기하는 동안 발생합니다.

MISCELLANEOUS

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

MSQL_DQ

분산 쿼리 작업이 완료될 때까지 태스크가 대기하는 경우에 발생합니다. 발생 가능한 MARS(Multiple Active Result Set) 응용 프로그램 교착 상태를 감지하는 데 사용됩니다. 대기는 분산 쿼리 호출이 완료될 때 끝납니다.

MSQL_XACT_MGR_MUTEX

태스크가 세션 트랜잭션 관리자의 소유권을 획득하여 세션 수준 트랜잭션 작업을 수행하려고 대기하는 경우에 발생합니다.

MSQL_XACT_MUTEX

트랜잭션 사용 동기화 중에 발생합니다. 요청에서 트랜잭션을 사용하려면 먼저 뮤텍스를 획득해야 합니다.

MSQL_XP

태스크가 확장 저장 프로시저가 끝날 때까지 대기하는 경우에 발생합니다. SQL Server에서는 이 대기 상태를 사용하여 잠재적 MARS 응용 프로그램 교착 상태를 감지합니다. 대기는 확장 저장 프로시저 호출이 끝날 때 중지됩니다.

MSSEARCH

전체 텍스트 검색 호출 중에 발생합니다. 이 대기는 전체 텍스트 작업이 완료될 때 끝나며 경합이 아니라 전체 텍스트 작업 기간을 나타냅니다.

NET_WAITFOR_PACKET

네트워크 읽기 중 연결이 네트워크 패킷을 대기하는 경우에 발생합니다.

OLEDB

SQL Server가 SQL Server Native Client OLE DB 공급자를 호출할 때 발생합니다. 이 대기 유형은 동기화에 사용되지 않습니다. 대신 OLE DB 공급자에 대한 호출 기간을 나타냅니다.

ONDEMAND_TASK_QUEUE

백그라운드 태스크가 우선 순위가 높은 시스템 작업 요청을 대기하는 동안 발생합니다. 대기 시간이 길면 우선 순위가 높은 처리할 요청이 없는 것이므로 염려할 필요가 없습니다.

PAGEIOLATCH_DT

태스크가 I/O 요청에 있는 버퍼를 래치에서 기다리는 경우에 발생합니다. 래치 요청이 삭제 모드에 있습니다. 대기 수가 많으면 디스크 하위 시스템에 문제가 있을 수 있습니다.

PAGEIOLATCH_EX

태스크가 I/O 요청에 있는 버퍼를 래치에서 기다리는 경우에 발생합니다. 래치 요청이 배타 모드에 있습니다. 대기 수가 많으면 디스크 하위 시스템에 문제가 있을 수 있습니다.

PAGEIOLATCH_KP

태스크가 I/O 요청에 있는 버퍼를 래치에서 기다리는 경우에 발생합니다. 래치 요청이 유지 모드에 있습니다. 대기 수가 많으면 디스크 하위 시스템에 문제가 있을 수 있습니다.

PAGEIOLATCH_NL

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

PAGEIOLATCH_SH

태스크가 I/O 요청에 있는 버퍼를 래치에서 기다리는 경우에 발생합니다. 래치 요청이 공유 모드에 있습니다. 대기 수가 많으면 디스크 하위 시스템에 문제가 있을 수 있습니다.

PAGEIOLATCH_UP

태스크가 I/O 요청에 있는 버퍼를 래치에서 기다리는 경우에 발생합니다. 래치 요청이 업데이트 모드에 있습니다. 대기 수가 많으면 디스크 하위 시스템에 문제가 있을 수 있습니다.

PAGELATCH_DT

태스크가 I/O 요청에 없는 버퍼를 래치에서 대기하는 경우에 발생합니다. 래치 요청이 삭제 모드에 있습니다.

PAGELATCH_EX

태스크가 I/O 요청에 없는 버퍼를 래치에서 기다리는 경우에 발생합니다. 래치 요청이 배타 모드에 있습니다.

PAGELATCH_KP

태스크가 I/O 요청에 없는 버퍼를 래치에서 대기하는 경우에 발생합니다. 래치 요청이 유지 모드에 있습니다.

PAGELATCH_NL

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

PAGELATCH_SH

태스크가 I/O 요청에 없는 버퍼를 래치에서 대기하는 경우에 발생합니다. 래치 요청이 공유 모드에 있습니다.

PAGELATCH_UP

태스크가 I/O 요청에 없는 버퍼를 래치에서 대기하는 경우에 발생합니다. 래치 요청이 업데이트 모드에 있습니다.

PARALLEL_BACKUP_QUEUE

RESTORE HEADERONLY, RESTORE FILELISTONLY 또는 RESTORE LABELONLY에서 직렬화 출력이 생성되는 경우에 발생합니다.

PREEMPTIVE_ABR

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

PREEMPTIVE_AUDIT_ACCESS_EVENTLOG

Windows 이벤트 로그에 감사 이벤트를 기록하기 위해 SQLOS(SQL Server 운영 체제) 스케줄러가 우선 모드로 전환된 경우에 발생합니다.

PREEMPTIVE_AUDIT_ACCESS_SECLOG

Windows 보안 로그에 감사 이벤트를 기록하기 위해 SQLOS 스케줄러가 우선 모드로 전환된 경우에 발생합니다.

PREEMPTIVE_CLOSEBACKUPMEDIA

백업 미디어를 닫기 위해 SQLOS 스케줄러가 우선 모드로 전환된 경우에 발생합니다.

PREEMPTIVE_CLOSEBACKUPTAPE

테이프 백업 장치를 닫기 위해 SQLOS 스케줄러가 우선 모드로 전환된 경우에 발생합니다.

PREEMPTIVE_CLOSEBACKUPVDIDEVICE

가상 백업 장치를 닫기 위해 SQLOS 스케줄러가 우선 모드로 전환된 경우에 발생합니다.

PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL

Windows 장애 조치(Failover) 클러스터 작업을 수행하기 위해 SQLOS 스케줄러가 우선 모드로 전환된 경우에 발생합니다.

PREEMPTIVE_COM_COCREATEINSTANCE

COM 개체를 만들기 위해 SQLOS 스케줄러가 우선 모드로 전환된 경우에 발생합니다.

PREEMPTIVE_SOSTESTING

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

PREEMPTIVE_STRESSDRIVER

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

PREEMPTIVE_TESTING

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

PREEMPTIVE_XETESTING

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

PRINT_ROLLBACK_PROGRESS

ALTER DATABASE termination 절을 사용하여 전환된 데이터베이스에서 사용자 프로세스가 끝나기를 기다리는 데 사용됩니다. 자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하십시오.

QPJOB_KILL

업데이트가 실행되기 시작할 때 KILL 호출을 통해 비동기 자동 통계 업데이트가 취소되었음을 나타냅니다. 종료하는 스레드는 일시 중지 상태로, KILL 명령을 수신하기 시작할 때까지 대기합니다. 1초보다 작은 값이 좋습니다.

QPJOB_WAITFOR_ABORT

실행되고 있을 때 KILL 호출을 통해 비동기 자동 통계 업데이트가 취소되었음을 나타냅니다. 업데이트는 이제 완료되었지만 종료하는 스레드 메시지 조정이 완료될 때까지 일시 중지됩니다. 이 상태는 일반적이지만 거의 발생하지 않으며 매우 짧아야 합니다. 1초보다 작은 값이 좋습니다.

QRY_MEM_GRANT_INFO_MUTEX

쿼리 실행 메모리 관리 기능이 정적 권한 부여 정보 목록에 대한 액세스를 제어하려고 하는 경우에 발생합니다. 이 상태는 현재 권한이 부여된 메모리 요청과 대기 중인 메모리 요청에 대한 정보를 나열합니다. 이 상태는 단순 액세스 제어 상태입니다. 이 상태에 대한 긴 대기가 있으면 안 됩니다. 이 뮤텍스가 해제되지 않으면 새로운 메모리 사용 쿼리의 응답이 모두 중지됩니다.

QUERY_ERRHDL_SERVICE_DONE

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

QUERY_EXECUTION_INDEX_SORT_EVENT_OPEN

오프라인 인덱스 빌드 생성이 병렬로 실행되고 정렬되는 여러 작업자 스레드가 정렬 파일에 대한 액세스를 동기화하는 특정 경우에 발생합니다.

QUERY_NOTIFICATION_MGR_MUTEX

쿼리 알림 관리자에서 가비지 수집 큐 동기화 중에 발생합니다.

QUERY_NOTIFICATION_SUBSCRIPTION_MUTEX

쿼리 알림의 트랜잭션 상태 동기화 중에 발생합니다.

QUERY_NOTIFICATION_TABLE_MGR_MUTEX

쿼리 알림 관리자의 내부 동기화 중에 발생합니다.

QUERY_NOTIFICATION_UNITTEST_MUTEX

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

QUERY_OPTIMIZER_PRINT_MUTEX

쿼리 최적화 프로그램의 진단 출력 생성 동기화 중에 발생합니다. 이 대기 유형은 진단 설정이 Microsoft 기술 지원 서비스의 지시대로 설정된 경우에만 발생합니다.

QUERY_TRACEOUT

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

QUERY_WAIT_ERRHDL_SERVICE

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

RECOVER_CHANGEDB

웜 대기 데이터베이스의 데이터베이스 상태 동기화 중에 발생합니다.

REPL_CACHE_ACCESS

복제 아티클 캐시 동기화 중에 발생합니다. 이 대기 중에는 복제 로그 판독기가 정지되고 게시된 테이블에 대한 DDL(데이터 정의 언어) 문이 차단됩니다.

REPL_SCHEMA_ACCESS

복제 스키마 버전 정보 동기화 중에 발생합니다. 복제된 개체에 대해 DDL 문을 실행하고 로그 판독기가 DDL 발생을 기반으로 버전이 지정된 스키마를 작성하거나 사용할 때 이 상태가 됩니다.

REPLICA_WRITES

태스크가 데이터베이스 스냅숏 또는 DBCC 복제본에 대한 페이지 쓰기가 완료될 때까지 대기하는 동안 발생합니다.

REQUEST_DISPENSER_PAUSE

스냅숏 백업을 위해 파일 I/O를 고정할 수 있도록 태스크가 처리 중인 모든 I/O가 완료될 때까지 대기하는 경우에 발생합니다.

REQUEST_FOR_DEADLOCK_SEARCH

교착 상태 모니터가 다음 교착 상태 검색을 시작하기 위해 대기하는 동안 발생합니다. 이 대기는 교착 상태 감지 사이에 발생하며 이 리소스에 대한 총 대기 시간이 길어도 문제가 있는 것은 아닙니다.

RESMGR_THROTTLED

새 쿼리가 GROUP_MAX_REQUESTS 설정에 따라 들어오고 정체되는 경우 발생합니다.

RESOURCE_QUEUE

다양한 내부 리소스 큐 동기화 중에 발생합니다.

RESOURCE_SEMAPHORE

다른 동시 쿼리로 인해 쿼리 메모리 요청을 즉시 허용할 수 없는 경우에 발생합니다. 대기 수가 많고 대기 시간이 길면 동시 쿼리 수 또는 메모리 요청 양이 과도하게 많은 것입니다.

RESOURCE_SEMAPHORE_MUTEX

쿼리가 스레드 예약 요청이 수행될 때까지 대기하는 동안 발생합니다. 또한 쿼리 컴파일 및 메모리 부여 요청을 동기화하는 경우에 발생합니다.

RESOURCE_SEMAPHORE_QUERY_COMPILE

동시 쿼리 컴파일 수가 조절 한계에 도달한 경우에 발생합니다. 대기 수가 많고 대기 시간이 길면 컴파일, 다시 컴파일 또는 캐싱할 수 없는 계획 수가 과도하게 많은 것입니다.

RESOURCE_SEMAPHORE_SMALL_QUERY

다른 동시 쿼리로 인해 작은 쿼리의 메모리 요청을 즉시 허용할 수 없는 경우에 발생합니다. 서버는 몇 초 내에 요청된 메모리를 부여하지 못하면 주 쿼리 메모리 풀로 요청을 전송하기 때문에 대기 시간은 몇 초를 넘지 않아야 합니다. 대기 수가 많으면 대기 중인 쿼리가 주 메모리 풀을 차단하는 동안 작은 동시 쿼리 수가 과도하게 많은 것입니다.

SEC_DROP_TEMP_KEY

임시 보안 키 삭제 시도가 실패한 후 다시 시도하기 전에 발생합니다.

SECURITY_MUTEX

EKM(확장 가능 키 관리) 암호화 공급자의 전역 목록 및 EKM 세션의 세션 범위 목록에 대한 액세스를 제어하는 뮤텍스를 기다리는 경우에 발생합니다.

SEQUENTIAL_GUID

새 순차적 GUID를 가져오는 동안 발생합니다.

SERVER_IDLE_CHECK

리소스 모니터가 SQL Server 인스턴스를 유휴 상태나 켜는 중 상태로 선언하는 경우 SQL Server 인스턴스 유휴 상태 동기화 중에 발생합니다.

SHUTDOWN

종료 문이 활성 연결이 종료될 때까지 대기하는 동안 발생합니다.

SLEEP_BPOOL_FLUSH

검사점이 디스크 하위 시스템의 폭주를 방지하기 위해 새 I/O의 실행을 조절하는 경우에 발생합니다.

SLEEP_DBSTARTUP

모든 데이터베이스가 복구될 때까지 대기하는 동안 데이터베이스 시작 중에 발생합니다.

SLEEP_DCOMSTARTUP

DCOM 초기화가 완료될 때까지 대기하는 동안 SQL Server 인스턴스 시작 중에 많아야 한 번 발생합니다.

SLEEP_MSDBSTARTUP

SQL Trace가 msdb 데이터베이스 시작이 완료될 때까지 대기하는 경우에 발생합니다.

SLEEP_SYSTEMTASK

tempdb 시작이 완료될 때까지 대기하는 동안 백그라운드 태스크 시작 중에 발생합니다.

SLEEP_TASK

일반 이벤트가 발생할 때까지 대기하는 동안 태스크가 중지되는 경우에 발생합니다.

SLEEP_TEMPDBSTARTUP

태스크가 tempdb 시작이 완료될 때까지 대기하는 동안 발생합니다.

SNI_CRITICAL_SECTION

SQL Server 네트워킹 구성 요소의 내부 동기화 중에 발생합니다.

SNI_HTTP_WAITFOR_0_DISCON

처리 중인 HTTP 연결이 종료될 때까지 대기하는 동안 SQL Server 종료 중에 발생합니다.

SNI_LISTENER_ACCESS

NUMA(비균일 메모리 액세스) 노드의 상태 변경 업데이트 작업을 대기하는 동안 발생합니다. 상태 변경에 대한 액세스는 직렬화됩니다.

SNI_TASK_COMPLETION

NUMA 노드 상태 변경 동안 모든 태스크가 완료될 때까지 대기하는 중에 발생합니다.

SOAP_READ

HTTP 네트워크 읽기가 완료될 때까지 대기하는 동안 발생합니다.

SOAP_WRITE

HTTP 네트워크 쓰기가 완료될 때까지 대기하는 동안 발생합니다.

SOS_CALLBACK_REMOVAL

콜백을 제거하기 위해 콜백 목록에 대한 동기화를 수행하는 동안 발생합니다. 서버 초기화가 완료된 후에는 이 카운터가 변경되지 않습니다.

SOS_DISPATCHER_MUTEX

발송자 풀의 내부 동기화 중에 발생합니다. 풀이 조정되는 경우도 포함됩니다.

SOS_LOCALALLOCATORLIST

SQL Server 메모리 관리자의 내부 동기화 중에 발생합니다.

SOS_MEMORY_USAGE_ADJUSTMENT

메모리 사용량이 풀 사이에서 조절될 경우 발생합니다.

SOS_OBJECT_STORE_DESTROY_MUTEX

풀에서 개체를 삭제하는 경우 메모리 풀의 내부 동기화 중에 발생합니다.

SOS_PROCESS_AFFINITY_MUTEX

프로세스 선호도 설정에 대한 액세스 동기화 중에 발생합니다.

SOS_RESERVEDMEMBLOCKLIST

SQL Server 메모리 관리자의 내부 동기화 중에 발생합니다.

SOS_SCHEDULER_YIELD

다른 작업이 실행될 수 있도록 태스크가 자발적으로 스케줄러를 양보하는 경우에 발생합니다. 이 대기 중에 태스크는 해당 퀀텀이 갱신될 때까지 대기합니다.

SOS_SMALL_PAGE_ALLOC

일부 메모리 개체에 의해 관리되는 메모리의 할당 및 해제 중에 발생합니다.

SOS_STACKSTORE_INIT_MUTEX

내부 저장소 초기화 동기화 중에 발생합니다.

SOS_SYNC_TASK_ENQUEUE_EVENT

태스크가 동기 방식으로 시작되는 경우에 발생합니다. SQL Server의 태스크는 대부분 비동기 방식으로 시작되므로 작업 요청이 작업 큐에 배치된 후 제어가 즉시 시작으로 돌아갑니다.

SOS_VIRTUALMEMORY_LOW

메모리 할당이 리소스 관리자가 가상 메모리를 해제할 때까지 대기하는 경우에 발생합니다.

SOSHOST_EVENT

CLR과 같은 호스팅된 구성 요소가 SQL Server 이벤트 동기화 개체를 대기하는 경우에 발생합니다.

SOSHOST_INTERNAL

CLR과 같은 호스팅된 구성 요소에 사용되는 메모리 관리자 콜백 동기화 중에 발생합니다.

SOSHOST_MUTEX

CLR과 같은 호스팅된 구성 요소가 SQL Server 뮤텍스 동기화 개체를 대기하는 경우에 발생합니다.

SOSHOST_RWLOCK

CLR과 같은 호스팅된 구성 요소가 SQL Server 읽기/쓰기 동기화 개체를 대기하는 경우에 발생합니다.

SOSHOST_SEMAPHORE

CLR과 같은 호스팅된 구성 요소가 SQL Server 세마포 동기화 개체를 대기하는 경우에 발생합니다.

SOSHOST_SLEEP

일반 이벤트가 발생할 때까지 대기하는 동안 호스팅된 태스크가 중지되는 경우에 발생합니다. 호스팅된 태스크는 CLR과 같은 호스팅된 구성 요소에 사용됩니다.

SOSHOST_TRACELOCK

추적 스트림에 대한 액세스 동기화 중에 발생합니다.

SOSHOST_WAITFORDONE

CLR과 같은 호스팅된 구성 요소가 태스크가 완료될 때까지 대기하는 경우에 발생합니다.

SQLCLR_APPDOMAIN

CLR이 응용 프로그램 도메인 시작이 완료될 때까지 대기하는 동안 발생합니다.

SQLCLR_ASSEMBLY

appdomain의 로드된 어셈블리 목록에 대한 액세스를 대기하는 동안 발생합니다.

SQLCLR_DEADLOCK_DETECTION

CLR이 교착 상태 감지가 완료될 때까지 대기하는 동안 발생합니다.

SQLCLR_QUANTUM_PUNISHMENT

CLR 태스크가 실행 퀀텀을 초과하여 조절되는 경우에 발생합니다. 이러한 조절은 리소스를 많이 사용하는 이 태스크가 다른 작업에 미치는 영향을 줄이기 위해 수행됩니다.

SQLSORT_NORMMUTEX

내부 정렬 구조를 초기화하는 동안 내부 동기화 중에 발생합니다.

SQLSORT_SORTMUTEX

내부 정렬 구조를 초기화하는 동안 내부 동기화 중에 발생합니다.

SQLTRACE_BUFFER_FLUSH

태스크가 백그라운드 작업이 4초마다 추적 버퍼를 디스크로 플러시할 때까지 대기하는 경우에 발생합니다.

SQLTRACE_LOCK

파일 추적에서 추적 버퍼 동기화 중에 발생합니다.

SQLTRACE_SHUTDOWN

추적 종료가 처리 중인 추적 이벤트가 완료될 때까지 대기하는 동안 발생합니다.

SQLTRACE_WAIT_ENTRIES

SQL Trace 이벤트 큐가 패킷이 큐에 도착할 때까지 대기하는 동안 발생합니다.

SRVPROC_SHUTDOWN

종료 프로세스가 올바르게 종료하기 위해 내부 리소스가 해제될 때까지 대기하는 동안 발생합니다.

TEMPOBJ

임시 개체 삭제가 동기화되는 경우에 발생합니다. 이 대기는 드물게 발생하며 태스크가 temp 테이블 삭제에 대한 액세스를 과도하게 요청한 경우에만 발생합니다.

THREADPOOL

태스크가 작업자가 실행될 때까지 대기하는 경우에 발생합니다. 이는 최대 작업자 설정이 너무 낮거나 해당 일괄 처리 실행이 비정상적으로 오래 수행되어 다른 일괄 처리에 사용할 수 있는 작업자 수가 감소한 것입니다.

TIMEPRIV_TIMEPERIOD

확장 이벤트 타이머의 내부 동기화 중에 발생합니다.

TRACEWRITE

SQL Trace 행 집합 추적 공급자가 사용 가능한 버퍼나 이벤트를 포함한 버퍼가 처리될 때까지 대기하는 경우에 발생합니다.

TRAN_MARKLATCH_DT

표시된 트랜잭션에 대한 삭제 모드 래치를 대기하는 경우에 발생합니다. 트랜잭션 표시 래치는 표시된 트랜잭션의 커밋 동기화에 사용됩니다.

TRAN_MARKLATCH_EX

표시된 트랜잭션에 대한 배타 모드 래치를 대기하는 경우에 발생합니다. 트랜잭션 표시 래치는 표시된 트랜잭션의 커밋 동기화에 사용됩니다.

TRAN_MARKLATCH_KP

표시된 트랜잭션에 대한 유지 모드 래치를 대기하는 경우에 발생합니다. 트랜잭션 표시 래치는 표시된 트랜잭션의 커밋 동기화에 사용됩니다.

TRAN_MARKLATCH_NL

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

TRAN_MARKLATCH_SH

표시된 트랜잭션에 대한 공유 모드 래치를 대기하는 경우에 발생합니다. 트랜잭션 표시 래치는 표시된 트랜잭션의 커밋 동기화에 사용됩니다.

TRAN_MARKLATCH_UP

표시된 트랜잭션에 대한 업데이트 모드 래치를 대기하는 경우에 발생합니다. 트랜잭션 표시 래치는 표시된 트랜잭션의 커밋 동기화에 사용됩니다.

TRANSACTION_MUTEX

트랜잭션에 대한 여러 일괄 처리의 액세스 동기화 중에 발생합니다.

UTIL_PAGE_ALLOC

트랜잭션 로그 검색이 메모리 부족 시 메모리를 사용할 수 있을 때까지 대기하는 경우에 발생합니다.

VIA_ACCEPT

시작하는 동안 VIA(Virtual Interface Adapter) 공급자 연결이 완료된 경우에 발생합니다.

VIEW_DEFINITION_MUTEX

캐시된 뷰 정의에 대한 액세스 동기화 중에 발생합니다.

WAIT_FOR_RESULTS

쿼리 알림이 트리거될 때까지 대기하는 경우에 발생합니다.

WAITFOR

WAITFOR Transact-SQL 문의 결과로 발생합니다. 대기 시간은 문의 매개 변수에 의해 결정됩니다. 이 대기는 사용자가 시작합니다.

WAITFOR_TASKSHUTDOWN

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

WAITSTAT_MUTEX

sys.dm_os_wait_stats를 채우는 데 사용되는 통계 컬렉션에 대한 액세스 동기화 중에 발생합니다.

WCC

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

WORKTBL_DROP

작업 테이블 삭제가 실패한 후 다시 시도하기 전에 일시 중지하는 동안 발생합니다.

WRITE_COMPLETION

쓰기 작업이 진행 중인 경우에 발생합니다.

WRITELOG

로그 플러시가 완료될 때까지 대기하는 동안 발생합니다. 로그 플러시를 발생시키는 일반적인 작업은 검사점과 트랜잭션 커밋입니다.

XACT_OWN_TRANSACTION

트랜잭션 소유권을 획득하기 위해 대기하는 동안 발생합니다.

XACT_RECLAIM_SESSION

세션의 현재 소유자가 세션 소유권을 해제할 때까지 대기하는 동안 발생합니다.

XACTLOCKINFO

트랜잭션 잠금 목록에 대한 액세스 동기화 중에 발생합니다. 트랜잭션 자체 외에도 교착 상태 감지, 페이지 분할 중 잠금 마이그레이션 등의 작업이 이 잠금 목록에 액세스합니다.

XACTWORKSPACE_MUTEX

트랜잭션에서 제거 및 트랜잭션 참여 멤버 간의 데이터베이스 잠금 수 동기화 중에 발생합니다.

XE_BUFFERMGR_ALLPROCESSED_EVENT

확장 이벤트 세션 버퍼를 대상으로 플러시할 때 발생합니다. 이 대기는 백그라운드 스레드에서 발생합니다.

XE_BUFFERMGR_FREEBUF_EVENT

다음 조건 중 하나에 해당하는 경우 발생합니다.

  • 이벤트 손실이 없도록 확장 이벤트 세션을 구성했고 세션의 모든 버퍼가 현재 가득 차 있는 경우. 이는 확장 이벤트 세션의 버퍼가 너무 작거나 분할이 필요함을 의미할 수 있습니다.
  • 감사 지연이 발생하는 경우. 이는 감사를 기록하는 드라이브에 디스크 병목 현상이 있음을 의미할 수 있습니다.

XE_DISPATCHER_CONFIG_SESSION_LIST

비동기 대상을 사용하는 확장 이벤트 세션이 시작 또는 중지될 때 발생합니다. 이 대기는 다음 중 하나를 의미할 수 있습니다.

  • 백그라운드 스레드 풀에 확장 이벤트 세션을 등록하는 중입니다.
  • 백그라운드 스레드 풀에서 현재 부하를 기준으로 필요한 스레드 수를 계산하는 중입니다.

XE_DISPATCHER_JOIN

확장 이벤트 세션에 사용되는 백그라운드 스레드가 종료되는 경우 발생합니다.

XE_DISPATCHER_WAIT

확장 이벤트 세션에 사용되는 백그라운드 스레드가 이벤트 버퍼 처리를 기다리는 경우 발생합니다.

XE_MODULEMGR_SYNC

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

XE_OLS_LOCK

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

XE_PACKAGE_LOCK_BACKOFF

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

 

 

참고 자료

 


강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1731 SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 jevida(강성욱) 2016.09.14 3126
1730 SQL Server에서 Trigger 활성 / 비활성 감시 jevida(강성욱) 2016.09.14 1469
1729 DDL Trigger를 이용한 데이터베이스 변경 사항 추적 jevida(강성욱) 2016.09.14 1230
1728 Trigger를 이용한 SQL Server 커넥션 풀링 확인 jevida(강성욱) 2016.09.14 1088
1727 SQL Server Trigger jevida(강성욱) 2016.09.14 938
1726 인덱스에 대한 SORT_IN_TEMPDB 옵션 jevida(강성욱) 2016.09.14 846
1725 인덱스 DDL 작업의 디스크 공간 요구 사항 jevida(강성욱) 2016.09.14 912
1724 XML nodes() 함수를 이용한 OPENXML 교체 jevida(강성욱) 2016.09.14 945
1723 XQuery를 사용한 XML 데이터 업데이트 jevida(강성욱) 2016.09.14 1883
1722 BCP XML 파일 형식 jevida(강성욱) 2016.09.14 1255
1721 SQL Server로 데이터 가져오기 jevida(강성욱) 2016.09.14 1223
1720 SQL Server Stored Procedure 암호화 jevida(강성욱) 2016.09.14 2689
1719 SQL Server 대칭키 vs 비대칭키 암호화 jevida(강성욱) 2016.09.14 1687
1718 SQL Server 마스터 키 관리 jevida(강성욱) 2016.09.14 1750
1717 대칭키를 사용하여 SQL Server 암호화(열 수준) 하기 jevida(강성욱) 2016.09.13 5673
1716 DMV를 사용하여 누락된 인덱스 확인 jevida(강성욱) 2016.09.13 1343
» DMV를 이용한 SQL Server 대기 상태 확인 jevida(강성욱) 2016.09.13 3807
1714 DMV를 이용한 SQL Server 성능 카운터 확인 jevida(강성욱) 2016.09.13 1787
1713 DMV를 이용한 SQL Server IO 성능 모니터 스냅샷 만들기 jevida(강성욱) 2016.09.13 1244
1712 DMV를 활용한 SQL Server 모니터링 jevida(강성욱) 2016.09.13 1261





XE Login