Partilhar via


sys.dm_os_waiting_tasks (Transact-SQL)

Aplica-se a:Banco de Dados SQL doAzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Banco de Dados SQL no Microsoft Fabric

Retorna informações sobre a fila de espera de tarefas que estão aguardando em algum recurso. Para obter mais informações sobre tarefas, consulte o Guia de arquitetura de threads e tarefas.

Observação

Para chamar isso do Azure Synapse Analytics ou do Analytics Platform System (PDW), use o nome sys.dm_pdw_nodes_os_waiting_tasks. Essa sintaxe não é suportada pelo pool SQL sem servidor no Azure Synapse Analytics.

Nome da coluna Tipo de dados Description
waiting_task_address varbinário(8) Endereço da tarefa em espera.
session_id smallint ID da sessão associada à tarefa.
exec_context_id int ID do contexto de execução associado à tarefa.
wait_duration_ms bigint Tempo total de espera para este tipo de espera, em milissegundos. Este tempo inclui .signal_wait_time
wait_type Nvarchar(60) Nome do tipo de espera. Para obter mais informações, consulte sys.dm_os_wait_stats.
resource_address varbinário(8) Endereço do recurso para o qual a tarefa está aguardando.
blocking_task_address varbinário(8) Tarefa que está atualmente a conter este recurso
blocking_session_id smallint ID da sessão que bloqueia o pedido. Se esta coluna for NULL, a solicitação não será bloqueada ou as informações da sessão de bloqueio não estarão disponíveis (ou não poderão ser identificadas).

-2 = O recurso de bloqueio pertence a uma transação distribuída órfã.

-3 = O recurso de bloqueio pertence a uma transação de recuperação diferida.

-4 = session_id do proprietário da trava de bloqueio não pôde ser determinado devido a transições internas do estado da trava.
blocking_exec_context_id int ID do contexto de execução da tarefa de bloqueio.
resource_description Nvarchar(3072) Descrição do recurso que está sendo consumido. Para obter mais informações, consulte A coluna resource_description.
pdw_node_id int O identificador do nó em que esta distribuição se encontra.

Aplica-se a: Azure Synapse Analytics and Analytics Platform System (PDW)

A resource_description coluna

A resource_description coluna tem os seguintes valores possíveis.

Proprietário do recurso do pool de threads

threadpool id=scheduler<hex-address>

Proprietário do recurso de consulta paralela

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

Bloquear proprietário do recurso

<type-specific-description> id=lock<lock-hex-address> mode=<mode> associatedObjectId=<associated-obj-id>

  • <type-specific-description> pode ser:

    • Para DATABASE: databaselock subresource=<databaselock-subresource> dbid=<db-id>
    • Para FILE: filelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
    • Para OBJECT: objectlock lockPartition=<lock-partition-id> objid=<obj-id> subresource=<objectlock-subresource> dbid=<db-id>
    • Para PAGE: pagelock fileid=<file-id> pageid=<page-id> dbid=<db-id> subresource=<pagelock-subresource>
    • Para Key: keylock hobtid=<hobt-id> dbid=<db-id>
    • Para EXTENT: extentlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
    • Para RID: ridlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
    • Para APPLICATION: applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
    • Para METADATA: metadatalock subresource=<metadata-subresource> classid=<metadatalock-description> dbid=<db-id>
    • Para HOBT: hobtlock hobtid=<hobt-id> subresource=<hobt-subresource> dbid=<db-id>
    • Para ALLOCATION_UNIT: allocunitlock hobtid=<hobt-id> subresource=<alloc-unit-subresource> dbid=<db-id>
  • <mode> pode ser:

    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-, RangeX-U, RangeX-X

Proprietário do recurso externo

Externa ExternalResource=<wait-type>

Proprietário do recurso genérico

  • TransactionMutex TransactionInfo Workspace=<workspace-id>
  • Mutex
  • CLRTaskJoin
  • CLRMonitorEvent
  • CLRRWLockEvent
  • resourceWait

Proprietário do recurso de trava

  • <db-id>:<file-id>:<page-in-file>
  • <GUID>
  • <latch-class> (<latch-address>)

Proprietário do recurso XACT (transação)

Ocorre quando o bloqueio otimizado está ativado:

  • xactlock: xactlock xdesIdLow=<xdesIdLow> xdesIdHigh=<xdesIdHigh> dbid=<dbid> id=<resource id> mode=<mode> UnderlyingResource (<keylock|ridlock>) hobtId=<hobtId> dbid=<dbid>

Permissions

O SQL Server 2019 (15.x) e versões anteriores exigem VIEW SERVER STATE permissão.

O SQL Server 2022 (16.x) e versões posteriores, e o SQL Server e a Instância Gerenciada SQL do Azure, exigem VIEW SERVER PERFORMANCE STATE permissão no servidor.

Nos objetivos de serviço do Banco de Dados SQL do Azure Basic, S0 e S1 , e para bancos de dados em pools elásticos, é necessária a conta de administrador do servidor , a conta de administrador do Microsoft Entra ou a associação à ##MS_ServerStateReader##função de servidor . Em todos os outros objetivos de serviço do Banco de dados SQL, é necessária a permissão VIEW DATABASE STATE no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##.

Examples

A. Identificar tarefas de sessões bloqueadas

SELECT * FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id IS NOT NULL;

B. Ver tarefas em espera por ligação

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. Exibir tarefas de espera para todos os processos do usuário com informações adicionais

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