Partilhar via


sys.dm_os_workers (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

Devolve uma linha por cada trabalhador no sistema. Para mais informações sobre trabalhadores, consulte o Guia de Arquitetura de Threads e Tarefas.

Observação

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

Nome da coluna Tipo de dados Description
endereço_do_trabalhador varbinário(8) Endereço de memória do trabalhador.
estado int Apenas para uso interno.
is_preemptive bit 1 = O trabalhador está a funcionar com agendamento preventivo. Qualquer trabalhador que esteja a executar código externo é executado sob agendamento preemptivo.
is_fiber bit 1 = O trabalhador está a correr com pooling leve. Para mais informações, consulte sp_configure (Transact-SQL).
is_sick bit 1 = O trabalhador está preso a tentar obter um bloqueio de rotação. Se este bit estiver definido, isto pode indicar um problema de contenção num objeto frequentemente acedido.
is_in_cc_exception bit 1 = O trabalhador está atualmente a tratar de uma exceção não SQL Server.
is_fatal_exception bit Especifica se este trabalhador recebeu uma exceção fatal.
is_inside_catch bit 1 = O trabalhador está atualmente a tratar de uma exceção.
is_in_polling_io_completion_routine bit 1 = O trabalhador está atualmente a executar uma rotina de conclusão de E/S para uma E/S pendente. Para mais informações, consulte sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Número de comutações de contexto do agendador realizadas por este trabalhador.
pending_io_count int Número de E/S físicas realizadas por este trabalhador.
pending_io_byte_count bigint Número total de bytes para todas as E/S físicas pendentes deste trabalhador.
pending_io_byte_average int Número médio de bytes para E/S físicos deste trabalhador.
wait_started_ms_ticks bigint Ponto no tempo, em ms_ticks, quando este trabalhador entrou no estado SUSPENSO. Subtrair este valor de ms_ticks em sys.dm_os_sys_info devolve o número de milissegundos que o trabalhador tem estado à espera.
wait_resumed_ms_ticks bigint Ponto no tempo, em ms_ticks, quando este trabalhador entrou no estado RUNNABLE. Subtrair este valor de ms_ticks em sys.dm_os_sys_info retorna o número de milissegundos em que o trabalhador esteve na fila executável.
task_bound_ms_ticks bigint Num momento no tempo, em ms_ticks, quando uma tarefa está ligada a esse trabalhador.
worker_created_ms_ticks bigint Ponto no tempo, em ms_ticks, quando um trabalhador é criado.
exception_num int Número de erro da última exceção que este trabalhador encontrou.
exception_severity int Gravidade da última exceção que este trabalhador encontrou.
exception_address varbinário(8) Código que lançou a exceção
afinidade bigint A afinidade de fios do trabalhador. Corresponde à afinidade do fio em sys.dm_os_threads (Transact-SQL).
state nvarchar(60) Estado dos trabalhadores. Pode ser um dos seguintes valores:

INIT = O trabalhador está atualmente a ser inicializado.

RUNNING = O trabalhador está atualmente a correr de forma não preventiva ou preventiva.

RUNNABLE = O trabalhador está pronto para correr no agendador.

SUSPENSO = O trabalhador está atualmente suspenso, à espera de um evento que lhe envie um sinal.
start_quantum bigint Tempo, em milissegundos, no início da corrida atual deste trabalhador.
end_quantum bigint Tempo, em milissegundos, no final da corrida atual deste trabalhador.
last_wait_type nvarchar(60) Tipo de última espera. Para uma lista de tipos de espera, veja sys.dm_os_wait_stats (Transact-SQL).
return_code int Valor de devolução da última espera. Pode ser um dos seguintes valores:

0 =SUCESSO

3 = IMPASSE

4 = PREMATURE_WAKEUP

258 = TEMPO MORTO
quantum_used bigint Apenas para uso interno.
max_quantum bigint Apenas para uso interno.
boost_count int Apenas para uso interno.
tasks_processed_count int Número de tarefas que este trabalhador processou.
fiber_address varbinário(8) Endereço de memória da fibra com a qual este trabalhador está associado.

NULL = SQL Server não está configurado para pooling leve.
endereço da tarefa varbinário(8) Endereço de memória da tarefa atual. Para mais informações, consulte sys.dm_os_tasks (Transact-SQL).
memory_object_address varbinário(8) Endereço de memória do objeto de memória trabalhador. Para mais informações, consulte sys.dm_os_memory_objects (Transact-SQL).
thread_address varbinário(8) Endereço de memória do thread associado a este trabalhador. Para mais informações, consulte sys.dm_os_threads (Transact-SQL).
signal_worker_address varbinário(8) Endereço de memória do trabalhador que sinalizou este objeto pela última vez. Para mais informações, consulte sys.dm_os_workers.
scheduler_address varbinário(8) Endereço de memória do agendador. Para mais informações, consulte sys.dm_os_schedulers (Transact-SQL).
processor_group smallint Armazena o ID do grupo de processadores atribuído a este tópico.
pdw_node_id int Aplica-se a: Azure Synapse Analytics, Analytics Platform System (PDW)

O identificador do nó em que esta distribuição se encontra.

Observações

Se o estado do trabalhador estiver a CORRER e o trabalhador estiver a correr de forma não preventiva, o endereço do trabalhador corresponde ao active_worker_address em sys.dm_os_schedulers.

Quando um trabalhador que está à espera de um evento é sinalizado, o trabalhador é colocado no topo da fila executável. O SQL Server permite que isto aconteça mil vezes seguidas, após o que o trabalhador é colocado no final da fila. Mover um trabalhador para o fim da fila tem algumas implicações de desempenho.

Permissions

No SQL Server, requer VIEW SERVER STATE permissão.
Nos Níveis Premium da Base de Dados SQL, é necessário obter VIEW DATABASE STATE permissão na base de dados. Nos Níveis Standard e Básico da Base de Dados SQL, requer a Server Admin pertença ao papel ou uma Azure Active Directory admin conta.

Permissões para SQL Server 2022 e posterior

Requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Examples

Pode usar a seguinte consulta para descobrir há quanto tempo um trabalhador está a funcionar num estado SUSPENSO ou EXECUTÁVEL.

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;  

Aqui está 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 são iguais, isto representa o tempo em que o trabalhador está no estado SUSPENSO. Caso contrário, w_runnable representa o tempo gasto pelo trabalhador no estado RUNNABLE. Na saída, a sessão 52 é SUSPENDED de 35,094 milissegundos.

Ver também

Exibições de gerenciamento dinâmico relacionadas ao sistema operacional SQL Server (Transact-SQL)
Guia de arquitetura de processamento de consultas
Guia de Arquitetura de Threads e Tarefas