sys.dm_os_waiting_tasks (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

Retorna informações sobre a fila de espera de tarefas que estão esperando algum recurso. Para obter mais informações sobre tarefas, consulte o Guia de Arquitetura de Thread e Tarefa.

Observação

Para chamar isso do Azure Synapse Analytics ou do PDW (Analytics Platform System), use o nome sys.dm_pdw_nodes_os_waiting_tasks. Não há suporte a essa sintaxe para o pool de SQL sem servidor no Azure Synapse Analytics.

Nome da coluna Tipo de dados Descrição
waiting_task_address varbinary(8) Endereço da tarefa de 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 de espera total para esse tipo, em milissegundos. Desta vez, inclui signal_wait_time.
wait_type nvarchar(60) Nome do tipo de espera.
resource_address varbinary(8) Endereço do recurso pelo qual a tarefa está esperando.
blocking_task_address varbinary(8) Tarefa que está mantendo esse recurso atualmente
blocking_session_id smallint ID da sessão que está bloqueando a solicitação. Se essa coluna for NULL, a solicitação não está bloqueada ou as informações da sessão de bloqueio não estão disponíveis (ou não podem 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 adiada.

-4 = session_id do proprietário da trava de bloqueio não pôde ser determinado devido a transições de estado de trava interna.
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 resource_description coluna.
pdw_node_id int Aplica-se a: Azure Synapse Analytics, Analytics Platform System (PDW)

O identificador do nó em que essa distribuição está ativada.

Coluna resource_description

A coluna resource_description tem os seguintes valores possíveis.

Proprietário do recurso do pool de threads:

  • threadpool id=endereço hexadecimal do agendador<>

Proprietário do recurso de consulta paralela:

  • id do evento de troca={Porta|Pipe}<hex-address> WaitType=<exchange-wait-type> nodeId=<exchange-node-id>

Tipo de espera de troca:

  • 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 ARQUIVO: filelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
      • Para OBJETO: 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 chave: keylock hobtid=<hobt-id> dbid=<db-id>
      • Para EXTENSÃO: extentlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
      • Para RID: ridlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
      • Para APLICAÇÃO: applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
      • Para METADADOS: 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:

  • Externo ExternalResource=<wait-type>

Proprietário do recurso genérico:

  • TransaçãoMutex 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á habilitado:

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

Permissões

No SQL Server e na Instância Gerenciada de SQL, requer a permissão VIEW SERVER STATE.

Nos objetivos de serviço do Banco de Dados SQL Básico, S0 e S1 e para bancos de dados em pools elásticos, é necessário ter a conta do administrador do servidor, a conta do 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, a permissão VIEW DATABASE STATE no banco de dados ou a associação à função de servidor ##MS_ServerStateReader## são necessárias.

Permissões do SQL Server 2022 e posteriores

É necessária a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Exemplos

R. Identificar tarefas de sessões bloqueadas

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

B. Exibir tarefas em espera por conexã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 em 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 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