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