sys.dm_os_workers (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 uma linha para cada trabalhador no sistema. Para obter mais informações sobre trabalhos, confira o Guia de arquitetura de threads e tarefas.
Observação
Para chamar essa opção por meio do Azure Synapse Analytics ou do Analytics Platform System (PDW), use o nome sys.dm_pdw_nodes_os_workers. 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 |
---|---|---|
worker_address | varbinary(8) | Endereço de memória do trabalhador. |
status | int | Somente para uso interno. |
is_preemptive | bit | 1 = o trabalhador está executando com agendamento preventivo. Qualquer trabalhador que esteja executando código externo será executado sob agendamento preemptivo. |
is_fiber | bit | 1 = o trabalhador está executando com lightweight pooling. Para obter mais informações, confira sp_configure (Transact-SQL). |
is_sick | bit | 1 = o trabalhador está preso tentando obter um bloqueio de giro. Se este bit estiver definido, isto pode indicar um problema com contenção em um objeto frequentemente acessado. |
is_in_cc_exception | bit | 1 = no momento, o trabalho está tratando uma exceção não relacionada ao SQL Server. |
is_fatal_exception | bit | Especifica se este trabalhador recebeu uma exceção fatal. |
is_inside_catch | bit | 1 = atualmente o trabalhador está tratando uma exceção. |
is_in_polling_io_completion_routine | bit | 1 = atualmente o trabalhador está executando uma rotina de conclusão de E/S para uma E/S pendente. Para obter mais informações, confira sys.dm_io_pending_io_requests (Transact-SQL). |
context_switch_count | int | Número de alternâncias de contexto do agendador executadas por este trabalhador. |
pending_io_count | int | Número de E/Ss físicas executadas por este trabalhador. |
pending_io_byte_count | bigint | Número total de bytes para todas as E/Ss físicas pendentes para este trabalhador. |
pending_io_byte_average | int | Número médio de bytes das E/Ss físicas para este trabalhador. |
wait_started_ms_ticks | bigint | Ponto no tempo, em ms_ticks em que esse trabalho entrou no estado SUSPENDED. A subtração desse valor de ms_ticks em sys.dm_os_sys_info retorna o número de milissegundos que o trabalho esperou. |
wait_resumed_ms_ticks | bigint | Ponto no tempo, em ms_ticks, em que esse trabalho entrou no estado RUNNABLE. A subtração desse valor de ms_ticks em sys.dm_os_sys_info retorna o número de milissegundos que o trabalho ficou na fila de executáveis. |
task_bound_ms_ticks | bigint | Ponto no tempo, em ms_ticks, em que uma tarefa foi associada a esse trabalho. |
worker_created_ms_ticks | bigint | Ponto no tempo, em ms_ticks, em que um trabalho foi criado. |
exception_num | int | Número do erro da última exceção que este trabalhador encontrou. |
exception_severity | int | Gravidade da última exceção que este trabalhador encontrou. |
exception_address | varbinary(8) | Endereço de código que lançou a exceção |
affinity | bigint | A afinidade do thread do trabalhador. Faz a correspondência à afinidade do thread em sys.dm_os_threads (Transact-SQL). |
estado | nvarchar(60) | Estado do trabalhador. Pode ser um dos seguintes valores: INIT = atualmente o trabalhador está sendo inicializado. RUNNING = atualmente o trabalhador está executando de modo não preemptivo ou preemptivo. RUNNABLE = o trabalhador está pronto para execução no agendador. SUSPENDED = o trabalhador está atualmente suspenso, aguardando que um evento envie um sinal para ele. |
start_quantum | bigint | Tempo, em milissegundos, no início da execução atual deste trabalhador. |
end_quantum | bigint | Tempo, em milissegundos, no final da execução atual deste trabalhador. |
last_wait_type | nvarchar(60) | Tipo da última espera. Para obter uma lista de tipos, confira sys.dm_os_wait_stats (Transact-SQL). |
return_code | int | Valor de retorno da última espera. Pode ser um dos seguintes valores: 0 =SUCCESS 3 = DEADLOCK 4 = PREMATURE_WAKEUP 258 = TIMEOUT |
quantum_used | bigint | Somente para uso interno. |
max_quantum | bigint | Somente para uso interno. |
boost_count | int | Somente para uso interno. |
tasks_processed_count | int | Número de tarefas que este trabalhador processou. |
fiber_address | varbinary(8) | Endereço de memória da fibra à qual este trabalhador está associado. NULL = o SQL Server não está configurado para lightweight pooling. |
task_address | varbinary(8) | Endereço de memória da tarefa atual. Para obter mais informações, confira sys.dm_os_tasks (Transact-SQL). |
memory_object_address | varbinary(8) | Endereço de memória do objeto de memória do trabalhador. Para obter mais informações, confira sys.dm_os_memory_objects (Transact-SQL). |
thread_address | varbinary(8) | Endereço de memória do thread associado a este trabalhador. Para obter mais informações, confira sys.dm_os_threads (Transact-SQL). |
signal_worker_address | varbinary(8) | Endereço de memória do trabalhador que sinalizou este objeto pela última vez. Para obter mais informações, confira sys.dm_os_workers. |
scheduler_address | varbinary(8) | Endereço de memória do agendador. Para obter mais informações, confira sys.dm_os_schedulers (Transact-SQL). |
processor_group | smallint | Armazena a ID do grupo de processador que é atribuída a este thread. |
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. |
Comentários
Se o estado do trabalhador for RUNNING e ele estiver em execução de modo não preemptivo, o endereço do trabalhador corresponderá ao active_worker_address em sys.dm_os_schedulers.
Quando um trabalhador que está esperando um evento é sinalizado, o trabalhador é colocado no início da fila executável. O SQL Server permite que isso aconteça mil vezes em uma linha e, depois disso, o trabalho é colocado no final da fila. Mover um trabalhador para o final da fila tem algumas implicações de desempenho.
Permissões
No SQL Server, requer a permissão VIEW SERVER STATE
.
Nas camadas Premium do Banco de Dados SQL, a permissão VIEW DATABASE STATE
é necessária no banco de dados. Nas camadas Standard e Básica do Banco de Dados SQL, requer a associação de função Server Admin
ou uma conta Azure Active Directory admin
.
Permissões do SQL Server 2022 e posteriores
É necessária a permissão VIEW SERVER PERFORMANCE STATE no servidor.
Exemplos
Você pode usar a consulta a seguir para descobrir por quanto tempo um trabalhador esteve em execução em um estado SUSPENDED ou RUNNABLE.
SELECT
t1.session_id,
CONVERT(varchar(10), t1.status) AS status,
CONVERT(varchar(15), t1.command) AS command,
CONVERT(varchar(10), t2.state) AS worker_state,
w_suspended =
CASE t2.wait_started_ms_ticks
WHEN 0 THEN 0
ELSE
t3.ms_ticks - t2.wait_started_ms_ticks
END,
w_runnable =
CASE t2.wait_resumed_ms_ticks
WHEN 0 THEN 0
ELSE
t3.ms_ticks - t2.wait_resumed_ms_ticks
END
FROM sys.dm_exec_requests AS t1
INNER JOIN sys.dm_os_workers AS t2
ON t2.task_address = t1.task_address
CROSS JOIN sys.dm_os_sys_info AS t3
WHERE t1.scheduler_id IS NOT NULL;
Veja a seguir o conjunto de resultados.
session_id status command worker_state w_suspended w_runnable
---------- ---------- --------------- ------------ ----------- --------------------
4 background LAZY WRITER SUSPENDED 688 688
6 background LOCK MONITOR SUSPENDED 4657 4657
19 background BRKR TASK SUSPENDED 603820344 603820344
14 background BRKR EVENT HNDL SUSPENDED 63583641 63583641
51 running SELECT RUNNING 0 0
2 background RESOURCE MONITO RUNNING 0 603825954
3 background LAZY WRITER SUSPENDED 422 422
7 background SIGNAL HANDLER SUSPENDED 603820485 603820485
13 background TASK MANAGER SUSPENDED 603824704 603824704
18 background BRKR TASK SUSPENDED 603820407 603820407
9 background TRACE QUEUE TAS SUSPENDED 454 454
52 suspended SELECT SUSPENDED 35094 35094
1 background RESOURCE MONITO RUNNING 0 603825954
Na saída, quando w_runnable
e w_suspended
forem iguais, isto representará o tempo que o trabalhador se encontra no estado SUSPENDED. Caso contrário, w_runnable
representará o tempo gasto pelo trabalhador no estado RUNNABLE. Na saída, a sessão 52
está SUSPENDED
durante 35,094
milissegundos.
Confira também
Exibições de gerenciamento dinâmico relacionadas ao sistema operacional do SQL Server (Transact-SQL)
Guia de arquitetura de processamento de consultas
Guia de arquitetura de thread e tarefa