sys.dm_os_waiting_tasks(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
특정 리소스에서 대기 중인 태스크의 대기 큐에 대한 정보를 반환합니다. 작업에 대한 자세한 내용은 스레드 및 작업 아키텍처 가이드를 참조하세요.
참고 항목
Azure Synapse Analytics 또는 PDW(Analytics Platform System)에서 이를 호출하려면 이름을 sys.dm_pdw_nodes_os_waiting_tasks
사용합니다. 이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.
열 이름 | 데이터 형식 | 설명 |
---|---|---|
waiting_task_address |
varbinary(8) | 대기 중인 태스크의 주소입니다. |
session_id |
smallint | 작업과 연결된 세션의 ID입니다. |
exec_context_id |
int | 태스크와 연결된 실행 컨텍스트의 ID입니다. |
wait_duration_ms |
bigint | 이 대기 유형에 대한 총 대기 시간(밀리초)입니다. 이 시간은 을 signal_wait_time 포함합니다. |
wait_type |
nvarchar(60) | 대기 유형의 이름입니다. |
resource_address |
varbinary(8) | 태스크가 대기 중인 리소스의 주소입니다. |
blocking_task_address |
varbinary(8) | 현재 이 리소스를 보유하고 있는 작업 |
blocking_session_id |
smallint | 요청을 차단하는 세션의 ID입니다. 이 열이면 NULL 요청이 차단되지 않거나 차단 세션의 세션 정보를 사용할 수 없거나 식별할 수 없습니다.-2 = 차단 리소스는 분리된 분산 트랜잭션이 소유합니다.-3 = 차단 리소스는 지연된 복구 트랜잭션이 소유합니다.-4 = session_id 내부 래치 상태 전환으로 인해 차단 래치 소유자를 확인할 수 없습니다. |
blocking_exec_context_id |
int | 차단 태스크의 실행 컨텍스트 ID입니다. |
resource_description |
nvarchar(3072) | 사용 중인 리소스에 대한 설명입니다. 자세한 내용은 resource_description 열을 참조 하세요. |
pdw_node_id |
int | 적용 대상: Azure Synapse Analytics, Analytics Platform System(PDW) 이 배포가 있는 노드의 식별자입니다. |
resource_description 열
resource_description 열에는 다음과 같은 가능한 값이 있습니다.
스레드 풀 리소스 소유자:
- threadpool id=scheduler<hex-address>
병렬 쿼리 리소스 소유자:
- exchangeEvent id={Port|Pipe}<hex-address> WaitType=<exchange-wait-type> nodeId=<exchange-node-id>
Exchange-wait-type:
- e_waitNone
- e_waitPipeNewRow
- e_waitPipeGetRow
- e_waitSynchronizeConsumerOpen
- e_waitPortOpen
- e_waitPortClose
- e_waitRange
리소스 소유자 잠금:
<type-specific-description> id=lock<lock-hex-address> mode=<mode> associatedObjectId=<associated-obj-id>
<type-specific-description>
은 다음과 같습니다.- DATABASE의 경우:
databaselock subresource=<databaselock-subresource> dbid=<db-id>
- FILE의 경우:
filelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
- OBJECT의 경우:
objectlock lockPartition=<lock-partition-id> objid=<obj-id> subresource=<objectlock-subresource> dbid=<db-id>
- PAGE의 경우:
pagelock fileid=<file-id> pageid=<page-id> dbid=<db-id> subresource=<pagelock-subresource>
- 키의 경우:
keylock hobtid=<hobt-id> dbid=<db-id>
- EXTENT의 경우:
extentlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
- RID의 경우:
ridlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
- 애플리케이션의 경우:
applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
- 메타데이터의 경우:
metadatalock subresource=<metadata-subresource> classid=<metadatalock-description> dbid=<db-id>
- HOBT의 경우:
hobtlock hobtid=<hobt-id> subresource=<hobt-subresource> dbid=<db-id>
- ALLOCATION_UNIT 경우:
allocunitlock hobtid=<hobt-id> subresource=<alloc-unit-subresource> dbid=<db-id>
- DATABASE의 경우:
<mode>
수: Sch-S, Sch-M, S, U, X, IS, IU, IX, SIU, SIX, UIX, BU, RangeS-S, RangeS-U, RangeI-N, RangeI-S, RangeI-U, RangeI-X, RangeX-U, RangeX-X
외부 리소스 소유자:
- 외부
ExternalResource=<wait-type>
일반 리소스 소유자:
- TransactionMutex
TransactionInfo Workspace=<workspace-id>
- Mutex
- CLRTaskJoin
- CLRMonitorEvent
- CLRRWLockEvent
- resourceWait
래치 리소스 소유자:
<db-id>:<file-id>:<page-in-file>
<GUID>
<latch-class> (<latch-address>)
XACT(트랜잭션) 리소스 소유자는 최적화된 잠금을 사용하도록 설정할 때 발생합니다.
xactlock
:xactlock xdesIdLow=<xdesIdLow> xdesIdHigh=<xdesIdHigh> dbid=<dbid> id=<resource id> mode=<mode> UnderlyingResource (<keylock|ridlock>) hobtId=<hobtId> dbid=<dbid>
사용 권한
SQL Server 및 SQL Managed Instance에서는 VIEW SERVER STATE
권한이 필요합니다.
SQL Database Basic, S0 및 S1 서비스 목표 또는 탄력적 풀 내의 데이터베이스에 대해서는 서버 관리자 계정, Microsoft Entra 관리자 계정 또는 ##MS_ServerStateReader##
서버 역할의 멤버 자격이 필요합니다. 다른 모든 SQL Database 서비스 목표에 대해서는 데이터베이스에 대한 VIEW DATABASE STATE
권한 또는 ##MS_ServerStateReader##
서버 역할의 멤버 자격이 필요합니다.
SQL Server 2022 이상에 대한 사용 권한
서버에 대한 VIEW SERVER PERFORMANCE STATE 권한이 필요합니다.
예제
A. 차단된 세션에서 작업 식별
SELECT * FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id IS NOT NULL;
B. 연결당 대기 작업 보기
SELECT st.text AS [SQL Text], c.connection_id, w.session_id,
w.wait_duration_ms, w.wait_type, w.resource_address,
w.blocking_session_id, w.resource_description, c.client_net_address, c.connect_time
FROM sys.dm_os_waiting_tasks AS w
INNER JOIN sys.dm_exec_connections AS c ON w.session_id = c.session_id
CROSS APPLY (SELECT * FROM sys.dm_exec_sql_text(c.most_recent_sql_handle)) AS st
WHERE w.session_id > 50 AND w.wait_duration_ms > 0
ORDER BY c.connection_id, w.session_id;
GO
C. 추가 정보를 사용하여 모든 사용자 프로세스에 대한 대기 작업 보기
SELECT 'Waiting_tasks' AS [Information], owt.session_id,
owt.wait_duration_ms, owt.wait_type, owt.blocking_session_id,
owt.resource_description, es.program_name, est.text,
est.dbid, eqp.query_plan, er.database_id, es.cpu_time,
es.memory_usage*8 AS memory_usage_KB
FROM sys.dm_os_waiting_tasks owt
INNER JOIN sys.dm_exec_sessions es ON owt.session_id = es.session_id
INNER JOIN sys.dm_exec_requests er ON es.session_id = er.session_id
OUTER APPLY sys.dm_exec_sql_text (er.sql_handle) est
OUTER APPLY sys.dm_exec_query_plan (er.plan_handle) eqp
WHERE es.is_user_process = 1
ORDER BY owt.session_id;
GO