sys.dm_os_workers (Transact-SQL)

Gibt eine Zeile für jeden Arbeitsthread im System zurück.

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

int

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 von Millisekunden zurückgegeben, die der Arbeitsthread gewartet hat.

wait_resumed_ms_ticks

int

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 stammt.

locale

int

Einstellung der Gebietsschema-ID (Locale ID, LCID) für den Arbeitsthread.

affinity

bigint

Affinitätseinstellung für den Arbeitsthread. Weitere Informationen finden Sie unter sys.dm_os_schedulers (Transact-SQL).

state

nvarchar(60)

Status des Arbeitsthreads. Folgende Werte sind möglich:

INIT = Arbeitsthread wird derzeit 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. Folgende Werte sind möglich:

0 =SUCCESS

3 = DEADLOCK

4 = PREMATURE_WAKEUP

258 = TIMEOUT

quantum_used

bigint

Nur zur internen Verwendung.

max_quantum

bigint

Nur zur internen Verwendung.

boost_count

int

Nur zur internen 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 konfiguriert für Lightweightpooling.

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 (Transact-SQL).

scheduler_address

varbinary(8)

Speicheradresse des Zeitplanungsmoduls. Weitere Informationen finden Sie unter sys.dm_os_schedulers (Transact-SQL).

Hinweise

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 eintausendmal pro Zeile. 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

Erfordert die VIEW SERVER 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;

Dies 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 5235,094 Millisekunden lang im Status SUSPENDED.