다음을 통해 공유


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>
    • <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, S0S1 서비스 목표 또는 탄력적 풀 내의 데이터베이스에 대해서는 서버 관리자 계정, 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