sys.dm_os_workers (Transact-SQL)
Si applica a: SQL Server (tutte le versioni supportate)
database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Parallel Data Warehouse
Restituisce una riga per ogni thread di lavoro nel sistema. Per altre informazioni sui thread di lavoro, vedere la Guida all'architettura di thread e attività.
Nota
Per chiamare il metodo da Azure Synapse Analytics o Piattaforma di strumenti analitici (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. |
status | 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 thread di lavoro sta gestendo 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 | Punto nel tempo, in ms_ticks, quando il ruolo di lavoro è stato sospeso. Sottraendo questo valore ms_ticks in sys.dm_os_sys_info restituisce il numero di millisecondi in attesa del ruolo di lavoro. |
wait_resumed_ms_ticks | bigint | Punto nel tempo, in ms_ticks, quando il ruolo di lavoro ha immesso lo stato RUNNABLE. Sottraendo questo valore ms_ticks in sys.dm_os_sys_info restituisce il numero di millisecondi in cui il ruolo di lavoro è presente nella coda runnable. |
task_bound_ms_ticks | bigint | Punto nel tempo, in ms_ticks, quando un'attività è associata a questo ruolo di lavoro. |
worker_created_ms_ticks | bigint | Punto nel tempo, 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 |
affinity | 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 lightweight pooling. |
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, vedere 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 strumenti analitici (PDW) Identificatore del nodo in cui si trova la distribuzione. |
Commenti
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 l'esecuzione di questa operazione mille volte in una riga. Superato questo valore, il thread di lavoro viene inserito 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 l'autorizzazione VIEW SERVER STATE
.
In Database SQL Premium livelli è richiesta l'autorizzazione VIEW DATABASE STATE
nel database. Nei Database SQL livelli Standard e Basic è richiesta l'appartenenza Server Admin
al ruolo o un Azure Active Directory admin
account.
Esempio
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;
Questo è il set di risultati.
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.
Vedere anche
SQL Server viste a gestione dinamica correlate al sistema operativo (Transact-SQL)
Guida sull'architettura di elaborazione delle query
Guida sull'architettura dei thread e delle attività