적용 대상:SQL 서버
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
분석 플랫폼 시스템(PDW)
Microsoft Fabric의 SQL 데이터베이스
특정 리소스에서 대기 중인 태스크의 대기 큐에 대한 정보를 반환합니다. 작업에 대한 자세한 내용은 스레드 및 작업 아키텍처 가이드를 참조하세요.
참고 항목
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) | 대기 유형의 이름입니다. 자세한 내용은 sys.dm_os_wait_stats 참조하세요. |
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_waitNonee_waitPipeNewRowe_waitPipeGetRowe_waitSynchronizeConsumerOpene_waitPortOpene_waitPortClosee_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> - 의 경우
Key: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> - 의 경우
APPLICATION:applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id> - 의 경우
METADATA: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>
- 의 경우
<mode>는 다음과 같을 수 있습니다.Sch-S, Sch-M, S, U, X, IS, IU, IX, SIU, 6, UIX, BU, RangeS-S, RangeS-U, RangeI-N, RangeI-S, RangeI-U, RangeI-X, RangeX-X-, RangeX-U, RangeX-X
외부 리소스 소유자
외부 ExternalResource=<wait-type>
일반 리소스 소유자
-
TransactionMutexTransactionInfo Workspace=<workspace-id> MutexCLRTaskJoinCLRMonitorEventCLRRWLockEventresourceWait
래치 리소스 소유자
<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 2019(15.x) 및 이전 버전에는 사용 권한이 필요합니다 VIEW SERVER STATE .
SQL Server 2022(16.x) 이상 버전과 SQL Server 및 Azure SQL Managed Instance에는 서버에 대한 권한이 필요합니다 VIEW SERVER PERFORMANCE STATE .
Azure SQL Database Basic, S0 및 S1 서비스 목표 및 탄력적 풀의 데이터베이스에는 서버 관리자 계정, Microsoft Entra 관리자 계정 또는 ##MS_ServerStateReader##의 멤버 자격이 필요합니다. 다른 모든 SQL Database 서비스 목표에 대해서는 데이터베이스에 대한 VIEW DATABASE STATE 권한 또는 ##MS_ServerStateReader## 서버 역할의 멤버 자격이 필요합니다.
예제
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 AS owt
INNER JOIN sys.dm_exec_sessions AS es
ON owt.session_id = es.session_id
INNER JOIN sys.dm_exec_requests AS er
ON es.session_id = er.session_id
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) AS est
OUTER APPLY sys.dm_exec_query_plan(er.plan_handle) AS eqp
WHERE es.is_user_process = 1
ORDER BY owt.session_id;
GO