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