sys.dm_os_workers (Transact-SQL)sys.dm_os_workers (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzuresìAzure SQL Data Warehouse sìParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Restituisce una riga per ogni thread di lavoro nel sistema.Returns a row for every worker in the system.

Nota

Per chiamare questo metodo dal Azure SQL Data WarehouseAzure SQL Data Warehouse o Parallel Data WarehouseParallel Data Warehouse, utilizzare il nome sys.dm_pdw_nodes_os_workers.To call this from Azure SQL Data WarehouseAzure SQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse, use the name sys.dm_pdw_nodes_os_workers.

Nome colonnaColumn name Tipo di datiData type DescriptionDescription
worker_addressworker_address varbinary (8)varbinary(8) Indirizzo di memoria del thread di lavoro.Memory address of the worker.
statusstatus intint Solo per uso interno.Internal use only.
is_preemptiveis_preemptive bitbit 1 = Il thread di lavoro è in esecuzione nell'ambito di una pianificazione preemptive.1 = Worker is running with preemptive scheduling. Qualsiasi thread di lavoro che esegue codice esterno viene eseguito nell'ambito di una pianificazione preemptive.Any worker that is running external code is run under preemptive scheduling.
is_fiberis_fiber bitbit 1 = Il thread di lavoro è in esecuzione nell'ambito del lightweight pooling.1 = Worker is running with lightweight pooling. Per altre informazioni, vedere sp_configure (Transact-SQL).For more information, see sp_configure (Transact-SQL).
is_sickis_sick bitbit 1 = Il thread di lavoro è bloccato nel tentativo di ottenere uno spinlock.1 = Worker is stuck trying to obtain a spin lock. Se questo bit viene impostato, ciò potrebbe indicare un problema a livello di contesa in un oggetto a cui si accede di frequente.If this bit is set, this might indicate a problem with contention on a frequently accessed object.
is_in_cc_exceptionis_in_cc_exception bitbit 1 = Il thread di lavoro sta gestendo un'eccezione non SQL ServerSQL Server.1 = Worker is currently handling a non- SQL ServerSQL Server exception.
is_fatal_exceptionis_fatal_exception bitbit Specifica se il thread di lavoro ha ricevuto un'eccezione irreversibile.Specifies whether this worker received a fatal exception.
is_inside_catchis_inside_catch bitbit 1 = Il thread di lavoro sta gestendo un'eccezione.1 = Worker is currently handling an exception.
is_in_polling_io_completion_routineis_in_polling_io_completion_routine bitbit 1 = Il thread di lavoro sta eseguendo una routine di completamento dell'I/O per un I/O in sospeso.1 = Worker is currently running an I/O completion routine for a pending I/O. Per ulteriori informazioni, vedere Sys.dm io_pending_io_requests ( Transact-SQL ) .For more information, see sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_countcontext_switch_count intint Numero di cambi di contesto dell'utilità di pianificazione eseguiti dal thread di lavoro.Number of scheduler context switches that are performed by this worker.
pending_io_countpending_io_count intint Numero di I/O fisici eseguiti dal thread di lavoro.Number of physical I/Os that are performed by this worker.
pending_io_byte_countpending_io_byte_count bigintbigint Numero totale di byte per tutti gli I/O fisici in sospeso per il thread di lavoro.Total number of bytes for all pending physical I/Os for this worker.
pending_io_byte_averagepending_io_byte_average intint Numero medio di byte per gli I/O fisici per il thread di lavoro.Average number of bytes for physical I/Os for this worker.
wait_started_ms_tickswait_started_ms_ticks bigintbigint Punto nel tempo, in ms_ticks, quando il thread di lavoro è passato allo stato sospeso.Point in time, in ms_ticks, when this worker entered the SUSPENDED state. Se si sottrae questo valore da ms_ticks in Sys.dm os_sys_info restituisce il numero di millisecondi che il thread di lavoro è rimasto in attesa.Subtracting this value from ms_ticks in sys.dm_os_sys_info returns the number of milliseconds that the worker has been waiting.
wait_resumed_ms_tickswait_resumed_ms_ticks bigintbigint Punto nel tempo, in ms_ticks, in cui il thread di lavoro stato RUNNABLE.Point in time, in ms_ticks, when this worker entered the RUNNABLE state. Se si sottrae questo valore da ms_ticks in Sys.dm os_sys_info restituisce il numero di millisecondi che il thread di lavoro è rimasto nella coda eseguibile.Subtracting this value from ms_ticks in sys.dm_os_sys_info returns the number of milliseconds that the worker has been in the runnable queue.
task_bound_ms_tickstask_bound_ms_ticks bigintbigint Punto nel tempo, in ms_ticks, quando un'attività è associata al thread di lavoro.Point in time, in ms_ticks, when a task is bound to this worker.
worker_created_ms_ticksworker_created_ms_ticks bigintbigint Punto nel tempo, in ms_ticks, quando viene creato un processo di lavoro.Point in time, in ms_ticks, when a worker is created.
exception_numexception_num intint Numero di errore dell'ultima eccezione rilevata dal thread di lavoro.Error number of the last exception that this worker encountered.
exception_severityexception_severity intint Gravità dell'ultima eccezione rilevata dal thread di lavoro.Severity of the last exception that this worker encountered.
exception_addressexception_address varbinary (8)varbinary(8) Indirizzo del codice che ha generato l'eccezioneCode address that threw the exception
affinityaffinity bigintbigint L'affinità del thread di lavoro.The thread affinity of the worker. Corrisponde all'affinità del thread in os_threads ( Transact-SQL ) .Matches the affinity of the thread in sys.dm_os_threads (Transact-SQL).
statestate nvarchar(60)nvarchar(60) Stato del thread di lavoro.Worker state. I possibili valori sono i seguenti:Can be one of the following values:

INIT = Il thread di lavoro è in fase di inizializzazione.INIT = Worker is currently being initialized.

RUNNING = Il thread di lavoro è in esecuzione in modalità non preemptive o preemptive.RUNNING = Worker is currently running either nonpreemptively or preemptively.

RUNNABLE = Il thread di lavoro è pronto per essere eseguito nell'utilità di pianificazione.RUNNABLE = The worker is ready to run on the scheduler.

SUSPENDED = Il thread di lavoro è sospeso ed è in attesa di un evento per inviare un segnale.SUSPENDED = The worker is currently suspended, waiting for an event to send it a signal.
start_quantumstart_quantum bigintbigint Tempo, espresso in millisecondi, all'inizio dell'esecuzione del thread di lavoro.Time, in milliseconds, at the start of the current run of this worker.
end_quantumend_quantum bigintbigint Tempo, espresso in millisecondi, alla fine dell'esecuzione del thread di lavoro.Time, in milliseconds, at the end of the current run of this worker.
last_wait_typelast_wait_type nvarchar(60)nvarchar(60) Tipo dell'ultima attesa.Type of last wait. Per un elenco di tipi di attesa, vedere Sys.dm os_wait_stats ( Transact-SQL ) .For a list of wait types, see sys.dm_os_wait_stats (Transact-SQL).
return_codereturn_code intint Valore restituito dall'ultima attesa.Return value from last wait. I possibili valori sono i seguenti:Can be one of the following values:

0 =SUCCESS0 =SUCCESS

3 = DEADLOCK3 = DEADLOCK

4 = PREMATURE_WAKEUP4 = PREMATURE_WAKEUP

258 = TIMEOUT258 = TIMEOUT
quantum_usedquantum_used bigintbigint Solo per uso interno.Internal use only.
max_quantummax_quantum bigintbigint Solo per uso interno.Internal use only.
boost_countboost_count intint Solo per uso interno.Internal use only.
tasks_processed_counttasks_processed_count intint Numero di attività elaborate dal thread di lavoro.Number of tasks that this worker processed.
fiber_addressfiber_address varbinary (8)varbinary(8) Indirizzo di memoria del fiber a cui il thread di lavoro è associato.Memory address of the fiber with which this worker is associated.

NULL = SQL ServerSQL Server non è configurato per il lightweight pooling.NULL = SQL ServerSQL Server is not configured for lightweight pooling.
task_addresstask_address varbinary (8)varbinary(8) Indirizzo di memoria dell'attività corrente.Memory address of the current task. Per ulteriori informazioni, vedere os_tasks ( Transact-SQL ) .For more information, see sys.dm_os_tasks (Transact-SQL).
memory_object_addressmemory_object_address varbinary (8)varbinary(8) Indirizzo di memoria dell'oggetto memoria del thread di lavoro.Memory address of the worker memory object. Per ulteriori informazioni, vedere Sys.dm os_memory_objects ( Transact-SQL ) .For more information, see sys.dm_os_memory_objects (Transact-SQL).
thread_addressthread_address varbinary (8)varbinary(8) Indirizzo di memoria del thread associato al thread di lavoro corrente.Memory address of the thread associated with this worker. Per ulteriori informazioni, vedere os_threads ( Transact-SQL ) .For more information, see sys.dm_os_threads (Transact-SQL).
signal_worker_addresssignal_worker_address varbinary (8)varbinary(8) Indirizzo di memoria del thread di lavoro che ha segnalato per ultimo l'oggetto.Memory address of the worker that last signaled this object. Per ulteriori informazioni, vedere os_workers.For more information, see sys.dm_os_workers.
scheduler_addressscheduler_address varbinary (8)varbinary(8) Indirizzo di memoria dell'utilità di pianificazione.Memory address of the scheduler. Per ulteriori informazioni, vedere Sys.dm os_schedulers ( Transact-SQL ) .For more information, see sys.dm_os_schedulers (Transact-SQL).
processor_groupprocessor_group smallintsmallint Archivia l'ID del gruppo di processori assegnato a questo thread.Stores the processor group ID that is assigned to this thread.
pdw_node_idpdw_node_id intint Si applica a: Azure SQL Data WarehouseAzure SQL Data Warehouse, Parallel Data WarehouseParallel Data WarehouseApplies to: Azure SQL Data WarehouseAzure SQL Data Warehouse, Parallel Data WarehouseParallel Data Warehouse

L'identificatore per il nodo che utilizza questo tipo di distribuzione.The identifier for the node that this distribution is on.

OsservazioniRemarks

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.If the worker state is RUNNING and the worker is running nonpreemptively, the worker address matches the 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.When a worker that is waiting on an event is signaled, the worker is placed at the head of the runnable queue. SQL ServerSQL 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. allows for this to happen one thousand times in a row, after which the worker is placed at the end of the queue. Lo spostamento di un thread di lavoro alla fine della coda è caratterizzato da alcune implicazioni a livello di prestazioni.Moving a worker to the end of the queue has some performance implications.

AutorizzazioniPermissions

In SQL ServerSQL Server, richiede VIEW SERVER STATE autorizzazione.On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
In Database SQLSQL Database livelli Premium, è necessario il VIEW DATABASE STATE autorizzazione per il database.On Database SQLSQL Database Premium Tiers, requires the VIEW DATABASE STATE permission in the database. In Database SQLSQL Database livelli Standard e Basic, è necessario il amministratore del Server o amministratore di Azure Active Directory account.On Database SQLSQL Database Standard and Basic Tiers, requires the Server admin or an Azure Active Directory admin account.

EsempiExamples

La query seguente consente di determinare per quanto tempo un thread di lavoro è rimasto in esecuzione in stato SUSPENDED o RUNNABLE.You can use the following query to find out how long a worker has been running in a SUSPENDED or RUNNABLE state.

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;  

Set di risultati:Here is the result set.

 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 the output, when w_runnable and w_suspended are equal, this represents the time that the worker is in the SUSPENDED state. In tutti gli altri casi w_runnable rappresenta il tempo trascorso dal thread di lavoro in stato RUNNABLE.Otherwise, w_runnable represents the time that is spent by the worker in the RUNNABLE state. Nell'output la sessione 52 è in stato SUSPENDED per 35,094 millisecondi.In the output, session 52 is SUSPENDED for 35,094 milliseconds.

Vedere ancheSee Also

Relative al sistema operativo SQL Server viste a gestione dinamica ( Transact-SQL )SQL Server Operating System Related Dynamic Management Views (Transact-SQL)