sys.dm_os_workers (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics 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 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 | 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 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 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. |
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
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 52
SUSPENDED
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