sys.dm_os_tasks (Transact-SQL)

Retourne une ligne pour chaque tâche active dans l'instance de SQL Server.

Nom de colonne

Type de données

Description

task_address

varbinary(8)

Adresse mémoire de l'objet.

task_state

nvarchar(60)

État de la tâche. Il peut s'agir de l'un des états suivants :

PENDING : En attente d'un thread de travail.

RUNNABLE : Exécutable, mais en attente d'un quantum.

RUNNING : En cours d'exécution sur le planificateur.

SUSPENDED : Doté d'un processus de travail, mais en attente d'un événement.

DONE : Terminé.

SPINLOOP : Bloqué dans une boucle.

context_switches_count

int

Nombre de commutateurs de contexte de planificateur exécutés par cette tâche.

pending_io_count

int

Nombre d'E/S physiques qui sont effectuées par cette tâche.

pending_io_byte_count

bigint

Nombre total d'octets d'E/S qui sont traités par cette tâche.

pending_io_byte_average

int

Nombre moyen d'octets d'E/S qui sont traités par cette tâche.

scheduler_id

int

ID du planificateur parent. Handle pointant vers les informations de planification associées à cette tâche. Pour plus d'informations, consultez sys.dm_os_schedulers (Transact-SQL).

session_id

smallint

ID de la session qui est associée à la tâche.

exec_context_id

int

ID du contexte d'exécution qui est associé à la tâche.

request_id

int

ID de la demande de la tâche. Pour plus d'informations, consultez sys.dm_exec_requests (Transact-SQL).

worker_address

varbinary(8)

Adresse mémoire du processus de travail qui exécute la tâche.

NULL = La tâche est en attente d'un processus de travail pour s'exécuter ou son exécution vient de se terminer.

Pour plus d'informations, consultez sys.dm_os_workers (Transact-SQL).

host_address

varbinary(8)

Adresse mémoire de l'hôte.

0 = Aucun hôte n'a été utilisé pour créer la tâche. Cela permet d'identifier l'hôte utilisé pour créer cette tâche.

Pour plus d'informations, consultez sys.dm_os_hosts (Transact-SQL).

Autorisation

L'autorisation VIEW SERVER STATE est nécessaire sur le serveur.

Exemples

A. Surveillance des demandes parallèles

Pour les requêtes qui sont exécutées en parallèle, vous observerez plusieurs lignes pour la même combinaison de (<session_id>, <request_id>). Utilisez la requête suivante pour trouver le degré de parallélisme de toutes les demandes actives.

[!REMARQUE]

Un request_id est unique dans une session.

SELECT
    task_address,
    task_state,
    context_switches_count,
    pending_io_count,
    pending_io_byte_count,
    pending_io_byte_average,
    scheduler_id,
    session_id,
    exec_context_id,
    request_id,
    worker_address,
    host_address
  FROM sys.dm_os_tasks
  ORDER BY session_id, request_id;

B. Association d'ID de session à des threads Windows

Vous pouvez utiliser la requête suivante pour associer une valeur d'ID de session à un ID de thread Windows. Vous pouvez ensuite surveiller les performances du thread dans l'Analyseur de performances Windows. La requête suivante ne renvoie pas d'informations pour les sessions en veille.

SELECT STasks.session_id, SThreads.os_thread_id
  FROM sys.dm_os_tasks AS STasks
  INNER JOIN sys.dm_os_threads AS SThreads
    ON STasks.worker_address = SThreads.worker_address
  WHERE STasks.session_id IS NOT NULL
  ORDER BY STasks.session_id;
GO