Freigeben über


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 zur internen 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 der 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. Wenn dieser Wert von ms_ticks in sys.dm_os_sys_info subtrahiert wird, 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. Folgende 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. 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).

processor_group

smallint

Speichert die Prozessorgruppen-ID, die diesem Thread zugewiesen ist.

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

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

Siehe auch

Verweis

Dynamische Verwaltungssichten und Funktionen (Transact-SQL)

Dynamische Verwaltungssichten in Verbindung mit dem SQL Server-Betriebssystem (Transact-SQL)