Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:Banco de Dados SQL do
Azure
Instância Gerenciada de SQL do Azure
Azure Synapse Analytics
Analytics 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