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 가비지 수집기가 대기하는 경우에 발생합니다.
|
FS_GARBAGE_COLLECTOR_SHUTDOWN | FILESTREAM 가비지 수집기가 정리 태스크 완료를 기다리는 경우에 발생합니다. |
FS_HEADER_RWLOCK | FILESTREAM 헤더 파일(Filestream.hdr)에서 내용을 읽거나 업데이트하기 위해 FILESTREAM 데이터 컨테이너의 FILESTREAM 헤더에 대한 액세스를 얻으려고 대기하는 경우에 발생합니다. |
FS_LOGTRUNC_RWLOCK | 다음 중 하나를 수행하기 위해 FILESTREAM 로그 잘림에 대한 액세스를 얻으려고 대기하는 경우에 발생합니다.
|
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