sys.dm_os_workers (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Gibt eine Zeile für jeden Arbeitsthread im System zurück. Weitere Informationen zu Arbeitsthreads finden Sie im Handbuch zur Thread- und Taskarchitektur.

Hinweis

Verwenden Sie den Namen sys.dm_pdw_nodes_os_workers, um dies von Azure Synapse Analytics oder Analytics Platform System (PDW) aufzurufen. Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.

Spaltenname Datentyp BESCHREIBUNG
worker_address varbinary(8) Speicheradresse des Arbeitsthreads.
status int Nur interne Verwendung.
is_preemptive bit 1 = Arbeitsthread wird mit präemptiver Zeitplanung ausgeführt. Jeder Arbeitsthread mit externem Code wird unter präemptiver Zeitplanung ausgeführt.
is_fiber bit 1 = Arbeitsthread wird mit Lightweightpooling ausgeführt. Weitere Informationen finden Sie unter sp_configure (Transact-SQL).
is_sick bit 1 = Arbeitsthread versucht fortlaufend, einen Spinlock abzurufen. Wenn dieses Bit festgelegt ist, kann ein Problem im Zusammenhang mit einem Konflikt bei einem Objekt vorliegen, auf das häufig zugegriffen wird.
is_in_cc_exception bit 1 = Arbeitsthread verarbeitet zurzeit eine Nicht-SQL Server-Ausnahme.
is_fatal_exception bit Gibt an, ob dieser Arbeitsthread eine schwerwiegende Ausnahme empfangen hat.
is_inside_catch bit 1 = Arbeitsthread verarbeitet zurzeit eine Ausnahme.
is_in_polling_io_completion_routine bit 1 = Arbeitsthread führt zurzeit eine E/A-Abschlussroutine für einen ausstehenden E/A-Vorgang aus. Weitere Informationen finden Sie unter sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Die Anzahl der von diesem Arbeitsthread ausgeführten Kontextwechsel des Zeitplanungsmoduls.
pending_io_count int Anzahl der physischen E/A-Vorgänge, die dieser Arbeitsthread ausgeführt hat.
pending_io_byte_count bigint Gesamtanzahl von Bytes aller ausstehenden physischen E/A-Vorgänge für diesen Arbeitsthread.
pending_io_byte_average int Durchschnittliche Anzahl von Bytes aller physischen E/A-Vorgänge für diesen Arbeitsthread.
wait_started_ms_ticks bigint Zeitpunkt in ms_ticks, zu dem dieser Arbeitsthread in den Status SUSPENDED übergegangen ist. Durch Subtrahieren dieses Werts von ms_ticks in sys.dm_os_sys_info wird die Anzahl der Millisekunden zurückgegeben, die der Arbeitsthread gewartet hat.
wait_resumed_ms_ticks bigint Zeitpunkt in ms_ticks, zu dem dieser Arbeitsthread in den Status RUNNABLE übergegangen ist. Wird dieser Wert von ms_ticks in sys.dm_os_sys_info subtrahiert, wird die Anzahl der Millisekunden zurückgegeben, die sich der Arbeitsthread in der ausführbaren Warteschlange befand.
task_bound_ms_ticks bigint Zeitpunkt in ms_ticks, zu dem ein Task an diesen Arbeitsthread gebunden wird.
worker_created_ms_ticks bigint Zeitpunkt in ms_ticks, zu dem ein Arbeitsthread erstellt wird.
exception_num int Die Fehlernummer der letzten Ausnahme, die bei diesem Arbeitsthread aufgetreten ist.
exception_severity int Der Schweregrad der letzten Ausnahme, die bei diesem Arbeitsthread aufgetreten ist.
exception_address varbinary(8) Die Codeadresse, von der die Ausnahme ausgelöst wurde.
affinity bigint Die Threadaffinität des Arbeitsthreads. Stimmt mit der Affinität des Threads in sys.dm_os_threads (Transact-SQL) überein.
state nvarchar(60) Der Status des Arbeitsthreads. Folgenden Werte sind möglich:

INIT = Der Arbeitsthread wird zurzeit initialisiert.

RUNNING = Arbeitsthread wird derzeit nicht präemptiv oder präemptiv ausgeführt.

RUNNABLE = Arbeitsthread kann im Zeitplanungsmodul ausgeführt werden.

SUSPENDED = Arbeitsthread wurde angehalten und wartet darauf, dass ein Ereignis ein Signal sendet.
start_quantum bigint Zeit in Millisekunden zu Beginn der aktuellen Ausführung dieses Arbeitsthreads.
end_quantum bigint Zeit in Millisekunden am Ende der aktuellen Ausführung dieses Arbeitsthreads.
last_wait_type nvarchar(60) Typ des letzten Wartevorgangs. Eine Liste der Wartetypen finden Sie unter sys.dm_os_wait_stats (Transact-SQL).
return_code int Rückgabewert des letzten Wartevorgangs. Folgenden Werte sind möglich:

0 =SUCCESS

3 = DEADLOCK

4 = PREMATURE_WAKEUP

258 = TIMEOUT
quantum_used bigint Nur interne Verwendung.
max_quantum bigint Nur interne Verwendung.
boost_count int Nur interne Verwendung.
tasks_processed_count int Anzahl der von diesem Arbeitsthread verarbeiteten Tasks.
fiber_address varbinary(8) Speicheradresse der Fiber, der dieser Arbeitsthread zugeordnet ist.

NULL = SQL Server ist nicht für Lightweightpooling konfiguriert.
task_address varbinary(8) Speicheradresse des aktuellen Tasks. Weitere Informationen finden Sie unter sys.dm_os_tasks (Transact-SQL).
memory_object_address varbinary(8) Speicheradresse des Arbeitsthread-Speicherobjekts. Weitere Informationen finden Sie unter sys.dm_os_memory_objects (Transact-SQL).
thread_address varbinary(8) Speicheradresse des Threads, der diesem Arbeitsthread zugeordnet ist. Weitere Informationen finden Sie unter sys.dm_os_threads (Transact-SQL).
signal_worker_address varbinary(8) Speicheradresse des Arbeitsthreads, der dieses Objekt zuletzt signalisiert hat. Weitere Informationen finden Sie unter sys.dm_os_workers.
scheduler_address varbinary(8) Speicheradresse des Zeitplanungsmoduls. Weitere Informationen finden Sie unter sys.dm_os_schedulers (Transact-SQL).
processor_group smallint Speichert die Prozessorgruppen-ID, die diesem Thread zugewiesen ist.
pdw_node_id int Gilt für: Azure Synapse Analytics, Analytics Platform System (PDW)

Der Bezeichner für den Knoten, auf dem sich diese Verteilung befindet.

Bemerkungen

Wenn sich der Arbeitsthread im Status RUNNING befindet und der Arbeitsthread nicht präemptiv ausgeführt wird, stimmt die Adresse des Arbeitsthreads mit active_worker_address in sys.dm_os_schedulers überein.

Wird ein auf ein Ereignis wartender Arbeitsthread signalisiert, wird der Arbeitsthread an der vordersten Stelle in der ausführbaren Warteschlange platziert. SQL Server ermöglicht diesen Vorgang tausendmal nacheinander. Danach wird der Arbeitsthread an das Ende der Warteschlange verschoben. Wenn ein Arbeitsthread an das Ende der Warteschlange verschoben wird, wirkt sich dies negativ auf die Leistung aus.

Berechtigungen

Auf SQL Server ist die VIEW SERVER STATE-Berechtigung erforderlich.
In SQL-Datenbank Premium-Tarifen ist die VIEW DATABASE STATE-Berechtigung für die Datenbank erforderlich. In SQL-Datenbank Standard- und Basic-Tarifen ist die Server Admin-Rollenmitgliedschaft oder ein Azure Active Directory admin-Konto erforderlich.

Berechtigungen für SQL Server 2022 und höher

Erfordert die VIEW SERVER PERFORMANCE STATE-Berechtigung auf dem Server.

Beispiele

Sie können die folgende Abfrage verwenden, um herauszufinden, wie lange ein Arbeitsthread bereits im Status SUSPENDED oder RUNNABLE ausgeführt wird.

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;  

Hier ist das Resultset.

 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  

Wenn w_runnable und w_suspended gleich sind, stellt dies in der Ausgabe die Zeit dar, die sich der Arbeitsthread im Status SUSPENDED befindet. Andernfalls stellt w_runnable die Zeit dar, die der Arbeitsthread im Status RUNNABLE verbringt. In der Ausgabe befindet sich die Sitzung 52SUSPENDED Millisekunden lang im Status 35,094.

Weitere Informationen

Dynamische Verwaltungssichten in Verbindung mit dem SQL Server-Betriebssystem (Transact-SQL)
Handbuch zur Architektur der Abfrageverarbeitung
Handbuch zur Thread- und Taskarchitektur