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à