다음을 통해 공유


sys.dm_os_waiting_tasks(Transact-SQL)

적용 대상:SQL 서버Azure SQL DatabaseAzure SQL Managed InstanceAzure 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_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>
    • 의 경우 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>

일반 리소스 소유자

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