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 Regroupement léger. 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 changements 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.

affinity

bigint

Affinité de thread du processus de travail. Représente l'affinité du thread dans sys.dm_os_threads (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 regroupement léger.

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

processor_group

smallint

Stocke l'ID de groupe du processeur attribué à ce thread.

Notes

Si le processus de travail est à l'é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

Nécessite l'autorisation VIEW SERVER STATE 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 à 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.

Voir aussi

Référence

Fonctions et vues de gestion dynamique (Transact-SQL)

Vues de gestion dynamique SQL Server liées au système d'exploitation (Transact-SQL)