sys.dm_os_workers (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Retourne une ligne pour chaque processus de travail du système. Pour plus d’informations sur les Workers, consultez le Guide de l’architecture des threads et des tâches.

Remarque

Pour un appel à partir d’Azure Synapse Analytics ou Analytics Platform System (PDW), utilisez le nom sys.dm_pdw_nodes_os_workers. Cette syntaxe n’est pas prise en charge par le pool SQL serverless dans Azure Synapse Analytics.

Nom de la colonne Type de données Description
worker_address varbinary(8) Adresse mémoire du processus de travail.
statut int Utilisation 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 Worker 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 bigint Point dans le temps, exprimé par la valeur ms_ticks, auquel ce Worker est passé à l’état SUSPENDED. Quand cette valeur est soustraite de ms_ticks dans sys.dm_os_sys_info, le nombre de millisecondes d’attente du Worker est retourné.
wait_resumed_ms_ticks bigint Point dans le temps, exprimé par la valeur ms_ticks, auquel ce Worker est passé à l’état RUNNABLE. Lorsque cette valeur est soustraite de ms_ticks dans sys.dm_os_sys_info, le nombre de millisecondes passées dans la file d’attente exécutable par le Worker est retourné.
task_bound_ms_ticks bigint Point dans le temps, exprimé par la valeur ms_ticks, auquel une tâche est liée à ce Worker.
worker_created_ms_ticks bigint Point dans le temps, exprimé par la valeur ms_ticks, auquel un Worker 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.
affinité bigint Affinité de thread du processus de travail. Correspond à l’affinité du thread dans sys.dm_os_threads (Transact-SQL).
state nvarchar(60) État du processus de travail. Peut avoir 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 la liste des types d’attente, consultez sys.dm_os_wait_stats (Transact-SQL).
return_code int Valeur retournée par la dernière attente. Peut avoir l’une des valeurs suivantes :

0 =SUCCESS

3 = DEADLOCK

4 = PREMATURE_WAKEUP

258 = TIMEOUT
quantum_used bigint Utilisation interne uniquement.
max_quantum bigint Utilisation interne uniquement.
boost_count int Utilisation 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.
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.
pdw_node_id int S’applique à : Azure Synapse Analytics, Analytics Platform System (PDW)

Identificateur du nœud sur lequel cette distribution est activée.

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

Sur SQL Server, nécessite l’autorisation VIEW SERVER STATE.
Sur les niveaux Premium de SQL Database, nécessite l’autorisation VIEW DATABASE STATE dans la base de données. Sur les niveaux Standard et De base de SQL Database, nécessite l’appartenance au rôle Server Admin ou un compte Azure Active Directory admin.

Autorisations pour SQL Server 2022 (et versions plus récentes)

Nécessite l’autorisation VIEW SERVER PERFORMANCE 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 le jeu de 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

Vues de gestion dynamique SQL Server liées au système d'exploitation (Transact-SQL)
Guide d’architecture de traitement des requêtes
Guide d’architecture de thread et de tâche