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 |
Wird nur intern verwendet. |
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. Durch Subtrahieren dieses Werts von ms_ticks in sys.dm_os_sys_info 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 |
Die Threadaffinität des Arbeitsthreads. Stimmt mit der Affinität des Arbeitsthreads in sys.dm_os_threads (Transact-SQL) überein. |
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 |
Wird nur intern verwendet. |
max_quantum |
bigint |
Wird nur intern verwendet. |
boost_count |
int |
Wird nur intern verwendet. |
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 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.