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>
- Para DATABASE:
<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