Condividi tramite


sys.dm_os_workers (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

Restituisce una riga per ogni thread di lavoro nel sistema. Per altre informazioni sui ruoli di lavoro, vedere guida all'architettura di thread e attività.

Nota

Per chiamare questa operazione da Azure Synapse Analytics o da Platform System (PDW), usare il nome sys.dm_pdw_nodes_os_workers. Questa sintassi non è supportata da pool SQL serverless in Azure Synapse Analytics.

Nome colonna Tipo di dati Descrizione
worker_address varbinary(8) Indirizzo di memoria del thread di lavoro.
stato int Solo per uso interno.
is_preemptive bit 1 = Il thread di lavoro è in esecuzione nell'ambito di una pianificazione preemptive. Qualsiasi thread di lavoro che esegue codice esterno viene eseguito nell'ambito di una pianificazione preemptive.
is_fiber bit 1 = Il thread di lavoro è in esecuzione nell'ambito del lightweight pooling. Per altre informazioni, vedere sp_configure (Transact-SQL).
is_sick bit 1 = Il thread di lavoro è bloccato nel tentativo di ottenere uno spinlock. Se questo bit viene impostato, ciò potrebbe indicare un problema a livello di contesa in un oggetto a cui si accede di frequente.
is_in_cc_exception bit 1 = Il ruolo di lavoro attualmente gestisce un'eccezione non SQL Server.
is_fatal_exception bit Specifica se il thread di lavoro ha ricevuto un'eccezione irreversibile.
is_inside_catch bit 1 = Il thread di lavoro sta gestendo un'eccezione.
is_in_polling_io_completion_routine bit 1 = Il thread di lavoro sta eseguendo una routine di completamento dell'I/O per un I/O in sospeso. Per altre informazioni, vedere sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Numero di cambi di contesto dell'utilità di pianificazione eseguiti dal thread di lavoro.
pending_io_count int Numero di I/O fisici eseguiti dal thread di lavoro.
pending_io_byte_count bigint Numero totale di byte per tutti gli I/O fisici in sospeso per il thread di lavoro.
pending_io_byte_average int Numero medio di byte per gli I/O fisici per il thread di lavoro.
wait_started_ms_ticks bigint Temporizzato, in ms_ticks, quando questo ruolo di lavoro ha immesso lo stato SUSPENDED. Sottraendo questo valore da ms_ticks in sys.dm_os_sys_info restituisce il numero di millisecondi in attesa del ruolo di lavoro.
wait_resumed_ms_ticks bigint Temporizzato, in ms_ticks, quando questo ruolo di lavoro ha immesso lo stato RUNNABLE. Sottraendo questo valore da ms_ticks in sys.dm_os_sys_info restituisce il numero di millisecondi in cui il ruolo di lavoro si trova nella coda eseguibile.
task_bound_ms_ticks bigint Temporizzato, in ms_ticks, quando un'attività è associata a questo ruolo di lavoro.
worker_created_ms_ticks bigint Temporizzato, in ms_ticks, quando viene creato un ruolo di lavoro.
exception_num int Numero di errore dell'ultima eccezione rilevata dal thread di lavoro.
exception_severity int Gravità dell'ultima eccezione rilevata dal thread di lavoro.
exception_address varbinary(8) Indirizzo del codice che ha generato l'eccezione
affinità bigint L'affinità del thread di lavoro. Corrisponde all'affinità del thread in sys.dm_os_threads (Transact-SQL).
state nvarchar(60) Stato del thread di lavoro. I possibili valori sono i seguenti:

INIT = Il thread di lavoro è in fase di inizializzazione.

RUNNING = Il thread di lavoro è in esecuzione in modalità non preemptive o preemptive.

RUNNABLE = Il thread di lavoro è pronto per essere eseguito nell'utilità di pianificazione.

SUSPENDED = Il thread di lavoro è sospeso ed è in attesa di un evento per inviare un segnale.
start_quantum bigint Tempo, espresso in millisecondi, all'inizio dell'esecuzione del thread di lavoro.
end_quantum bigint Tempo, espresso in millisecondi, alla fine dell'esecuzione del thread di lavoro.
last_wait_type nvarchar(60) Tipo dell'ultima attesa. Per un elenco dei tipi di attesa, vedere sys.dm_os_wait_stats (Transact-SQL).
return_code int Valore restituito dall'ultima attesa. I possibili valori sono i seguenti:

0 =SUCCESS

3 = DEADLOCK

4 = PREMATURE_WAKEUP

258 = TIMEOUT
quantum_used bigint Solo per uso interno.
max_quantum bigint Solo per uso interno.
boost_count int Solo per uso interno.
tasks_processed_count int Numero di attività elaborate dal thread di lavoro.
fiber_address varbinary(8) Indirizzo di memoria del fiber a cui il thread di lavoro è associato.

NULL = SQL Server non è configurato per il pool leggero.
task_address varbinary(8) Indirizzo di memoria dell'attività corrente. Per altre informazioni, vedere sys.dm_os_tasks (Transact-SQL).
memory_object_address varbinary(8) Indirizzo di memoria dell'oggetto memoria del thread di lavoro. Per altre informazioni, vedi sys.dm_os_memory_objects (Transact-SQL).
thread_address varbinary(8) Indirizzo di memoria del thread associato al thread di lavoro corrente. Per altre informazioni, vedere sys.dm_os_threads (Transact-SQL).
signal_worker_address varbinary(8) Indirizzo di memoria del thread di lavoro che ha segnalato per ultimo l'oggetto. Per altre informazioni, vedere sys.dm_os_workers.
scheduler_address varbinary(8) Indirizzo di memoria dell'utilità di pianificazione. Per altre informazioni, vedere sys.dm_os_schedulers (Transact-SQL).
processor_group smallint Archivia l'ID del gruppo di processori assegnato a questo thread.
pdw_node_id int Si applica a: Azure Synapse Analytics, Piattaforma di analisi (PDW)

Identificatore del nodo in cui è attiva la distribuzione.

Osservazioni:

Se lo stato del thread di lavoro è RUNNING e il thread di lavoro è in esecuzione in modalità non preemptive, l'indirizzo del thread di lavoro corrisponde alla colonna active_worker_address in sys.dm_os_schedulers.

Quando viene segnalato un thread di lavoro in attesa di un evento, tale thread viene inserito all'inizio della coda eseguibile. SQL Server consente di eseguire questa operazione un migliaio di volte in una riga, dopo la quale il ruolo di lavoro viene posizionato alla fine della coda. Lo spostamento di un thread di lavoro alla fine della coda è caratterizzato da alcune implicazioni a livello di prestazioni.

Autorizzazioni

In SQL Server è richiesta VIEW SERVER STATE l'autorizzazione.
Nei livelli database SQL Premium è necessaria l'autorizzazione VIEW DATABASE STATE nel database. In database SQL livelli Standard e Basic, richiede l'appartenenza al Server Admin ruolo o un Azure Active Directory admin account.

Autorizzazioni per SQL Server 2022 e versioni successive

È richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE per il server.

Esempi

La query seguente consente di determinare per quanto tempo un thread di lavoro è rimasto in esecuzione in stato SUSPENDED o 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;  

Il set di risultati è il seguente.

 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  

Nell'output, i valori equivalenti di w_runnable e w_suspended indicano il tempo durante cui il thread di lavoro rimane in stato SUSPENDED. In tutti gli altri casi w_runnable rappresenta il tempo trascorso dal thread di lavoro in stato RUNNABLE. Nell'output la sessione 52 è in stato SUSPENDED per 35,094 millisecondi.

Vedi anche

Viste a gestione dinamica correlate al sistema operativo SQL Server (Transact-SQL)
Guida sull'architettura di elaborazione delle query
Guida sull'architettura dei thread e delle attività