sys.dm_os_workers (Transact-SQL)
Retourne une ligne pour chaque processus de travail du système.
Nom de colonne |
Type de données |
Description |
---|---|---|
worker_address |
varbinary(8) |
Adresse mémoire du processus de travail. |
status |
int |
À usage interne uniquement. |
is_preemptive |
bit |
1 = le processus de travail s'exécute avec une planification préemptive. Tout processus de travail qui exécute du code externe est exécuté en mode de planification préemptive. |
is_fiber |
bit |
1 = le processus de travail s'exécute en mode lightweight pooling. Pour plus d'informations, consultez sp_configure (Transact-SQL). |
is_sick |
bit |
1 = le processus de travail est bloqué car il essaie toujours d'obtenir un verrouillage total de l'UC. Si ce bit est défini, cela peut signaler un problème de contention sur un objet auquel les accès sont fréquents. |
is_in_cc_exception |
bit |
1 = le processus de travail gère actuellement une exception non-SQL Server. |
is_fatal_exception |
bit |
Indique si le processus de travail a reçu une exception fatale. |
is_inside_catch |
bit |
1 = le processus de travail gère actuellement une exception. |
is_in_polling_io_completion_routine |
bit |
1 = le processus de travail exécute actuellement une routine d'exécution d'E/S pour une E/S en attente. Pour plus d'informations, consultez sys.dm_io_pending_io_requests (Transact-SQL). |
context_switch_count |
int |
Nombre de commutateurs de contexte du planificateur qui sont exécutés par ce processus de travail. |
pending_io_count |
int |
Nombre d'E/S physiques qui sont effectuées par ce processus de travail. |
pending_io_byte_count |
bigint |
Nombre total d'octets correspondant à toutes les E/S physiques en attente pour ce processus de travail. |
pending_io_byte_average |
int |
Nombre moyen d'octets des E/S physiques pour ce processus de travail. |
wait_started_ms_ticks |
int |
Moment précis, en ms_ticks (battements d'horloge), où ce processus de travail est passé à l'état SUSPENDED. Lorsque cette valeur est soustraite de ms_ticks dans sys.dm_os_sys_info, la durée d'attente du processus de travail, en millisecondes, est retournée. |
wait_resumed_ms_ticks |
int |
Moment précis, en ms_ticks, où ce processus de travail est passé à l'état RUNNABLE. Lorsque cette valeur est soustraite de ms_ticks dans sys.dm_os_sys_info, on obtient la durée en millisecondes que le processus de travail a passé dans la file d'attente exécutable. |
task_bound_ms_ticks |
bigint |
Moment précis, en ms_ticks, où une tâche est liée à ce processus de travail. |
worker_created_ms_ticks |
bigint |
Moment précis, en ms_ticks, où un processus de travail est créé. |
exception_num |
int |
Numéro d'erreur de la dernière exception rencontrée par ce processus de travail. |
exception_severity |
int |
Gravité de la dernière exception rencontrée par ce processus de travail. |
exception_address |
varbinary(8) |
Adresse du code qui a levé l'exception. |
locale |
int |
Identificateur local de paramètres régionaux pour le processus de travail. |
affinity |
bigint |
Paramètre d'affinité du processus de travail. Pour plus d'informations, consultez sys.dm_os_schedulers (Transact-SQL). |
state |
nvarchar(60) |
État du processus de travail. Il peut s'agir de l'une des valeurs suivantes : INIT = le processus de travail est en cours d'initialisation. RUNNING = le processus de travail est en cours d'exécution, en mode non préemptif ou préemptif. RUNNABLE = le processus de travail est prêt à s'exécuter sur le planificateur. SUSPENDED = le processus de travail est actuellement interrompu car il attend qu'un événement lui envoie un signal. |
start_quantum |
bigint |
Temps, en millisecondes, au début de l'exécution actuelle de ce processus de travail. |
end_quantum |
bigint |
Temps, en millisecondes, à la fin de l'exécution actuelle de ce processus de travail. |
last_wait_type |
nvarchar(60) |
Type de la dernière attente. Pour obtenir une liste des types d'attente, consultez sys.dm_os_wait_stats (Transact-SQL). |
return_code |
int |
Valeur retournée par la dernière attente. Il peut s'agir de l'une des valeurs suivantes : 0 =SUCCESS 3 = DEADLOCK 4 = PREMATURE_WAKEUP 258 = TIMEOUT |
quantum_used |
bigint |
À usage interne uniquement. |
max_quantum |
bigint |
À usage interne uniquement. |
boost_count |
int |
À usage interne uniquement. |
tasks_processed_count |
int |
Nombre de tâches traitées par ce processus de travail. |
fiber_address |
varbinary(8) |
Adresse mémoire de la fibre à laquelle ce processus de travail est associé. NULL = SQL Server n'est pas configuré pour le mode lightweight pooling. |
task_address |
varbinary(8) |
Adresse mémoire de la tâche active. Pour plus d'informations, consultez sys.dm_os_tasks (Transact-SQL). |
memory_object_address |
varbinary(8) |
Adresse mémoire de l'objet mémoire du processus de travail. Pour plus d'informations, consultez sys.dm_os_memory_objects (Transact-SQL). |
thread_address |
varbinary(8) |
Adresse mémoire du thread associé au processus de travail. Pour plus d'informations, consultez sys.dm_os_threads (Transact-SQL). |
signal_worker_address |
varbinary(8) |
Adresse mémoire du processus de travail qui a signalé cet objet en dernier lieu. Pour plus d'informations, consultez sys.dm_os_workers (Transact-SQL). |
scheduler_address |
varbinary(8) |
Adresse mémoire du planificateur. Pour plus d'informations, consultez sys.dm_os_schedulers (Transact-SQL). |
Notes
Si le processus de travail est en état RUNNING et qu'il s'exécute de façon non préemptive, son adresse correspond à la valeur de active_worker_address dans sys.dm_os_schedulers.
Lorsqu'un processus de travail en attente sur un événement est signalé, il est placé en tête de la file d'attente exécutable. SQL Server autorise cette situation mille fois de suite, après quoi le processus de travail est placé à la fin de la file d'attente. Le fait de placer un processus de travail à la fin de la file d'attente a un impact sur les performances.
Autorisations
L'autorisation VIEW SERVER STATE est nécessaire sur le serveur.
Exemples
Vous pouvez utiliser la requête suivante pour déterminer la durée d'exécution d'un processus de travail dans l'état SUSPENDED ou RUNNABLE.
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;
Voici l'ensemble des résultats.
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
Dans le résultat, lorsque w_runnable et w_suspended sont identiques, la valeur représente la durée pendant laquelle le processus de travail est dans l'état SUSPENDED. Dans le cas contraire, w_runnable représente la durée pendant laquelle le processus de travail est dans l'état RUNNABLE. Dans le résultat, la session 52 est dans l'état SUSPENDED pendant 35,094 millisecondes.