sys.dm_os_waiting_tasks (Transact-SQL)

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

Renvoie les informations sur la file d’attente des tâches en attente de certaines ressources. Pour plus d’informations sur les tâches, consultez le Guide de l’architecture des threads et des tâches.

Remarque

Pour appeler cela à partir d’Azure Synapse Analytics ou du système de plateforme Analytics (PDW), utilisez le nom sys.dm_pdw_nodes_os_waiting_tasks. 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
waiting_task_address varbinary(8) Adresse de la tâche en attente.
session_id smallint ID de la session associée à la tâche.
exec_context_id int ID du contexte d'exécution associé à la tâche.
wait_duration_ms bigint Temps d'attente total de ce type d'attente (en millisecondes). Cette fois-ci est inclusive de signal_wait_time.
wait_type nvarchar(60) Nom du type d'attente.
resource_address varbinary(8) Adresse de la ressource que la tâche attend.
blocking_task_address varbinary(8) Tâche qui mobilise actuellement cette ressource.
blocking_session_id smallint ID de la session qui bloque la demande. Si cette colonne est NULL, la requête n’est pas bloquée ou les informations de session de la session bloquante ne sont pas disponibles (ou ne peuvent pas être identifiées).

-2 = La ressource bloquante appartient à une transaction distribuée orpheline.

-3 = La ressource bloquante appartient à une transaction de récupération différée.

-4 = session_id du propriétaire du verrou bloquant n’a pas pu être déterminé en raison de transitions d’état de verrou interne.
blocking_exec_context_id int ID du contexte d'exécution de la tâche bloquante.
resource_description nvarchar(3072) Description de la ressource actuellement mobilisée. Pour plus d’informations, consultez resource_description colonne.
pdw_node_id int S’applique à : Azure Synapse Analytics, Analytics Platform System (PDW)

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

Colonne resource_description

La colonne resource_description contient les valeurs possibles suivantes.

Propriétaire de la ressource de pool de threads :

  • threadpool id=scheduler<hex-address>

Propriétaire de la ressource de requête parallèle :

  • exchangeEvent id={Port|Pipe}<hex-address> WaitType=<exchange-wait-type> nodeId=<exchange-node-id>

Type d’attente Exchange :

  • e_waitNone
  • e_waitPipeNewRow
  • e_waitPipeGetRow
  • e_waitSynchronizeConsumerOpen
  • e_waitPortOpen
  • e_waitPortClose
  • e_waitRange

Verrouiller le propriétaire de la ressource :

  • <type-specific-description> id=lock<lock-hex-address> mode=<mode> associatedObjectId=<associated-obj-id>
    • <type-specific-description> peut être :
      • Pour DATABASE : databaselock subresource=<databaselock-subresource> dbid=<db-id>
      • Pour FILE : filelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
      • Pour OBJECT : objectlock lockPartition=<lock-partition-id> objid=<obj-id> subresource=<objectlock-subresource> dbid=<db-id>
      • Pour PAGE : pagelock fileid=<file-id> pageid=<page-id> dbid=<db-id> subresource=<pagelock-subresource>
      • Pour clé : keylock hobtid=<hobt-id> dbid=<db-id>
      • Pour EXTENSION : extentlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
      • Pour RID : ridlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
      • Pour APPLICATION : applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
      • Pour LES MÉTADONNÉES : metadatalock subresource=<metadata-subresource> classid=<metadatalock-description> dbid=<db-id>
      • Pour HOBT : hobtlock hobtid=<hobt-id> subresource=<hobt-subresource> dbid=<db-id>
      • Pour ALLOCATION_UNIT : allocunitlock hobtid=<hobt-id> subresource=<alloc-unit-subresource> dbid=<db-id>
    • <mode> peut être : Sch-S, Sch-M, S, U, X, IS, IU, IX, SIU, SIX, UIX, BU, RangeS-S, RangeS-U, RangeI-N, RangeI-S, RangeI-U, RangeI-X, RangeX-U, RangeX-X

Propriétaire de ressource externe :

  • Externe ExternalResource=<wait-type>

Propriétaire de ressource générique :

  • TransactionMutex TransactionInfo Workspace=<workspace-id>
  • Mutex
  • CLRTaskJoin
  • CLRMonitorEvent
  • CLRRWLockEvent
  • resourceWait

Propriétaire de la ressource latch :

  • <db-id>:<file-id>:<page-in-file>
  • <GUID>
  • <latch-class> (<latch-address>)

Le propriétaire de la ressource XACT (transaction) se produit lorsque le verrouillage optimisé est activé :

  • xactlock: xactlock xdesIdLow=<xdesIdLow> xdesIdHigh=<xdesIdHigh> dbid=<dbid> id=<resource id> mode=<mode> UnderlyingResource (<keylock|ridlock>) hobtId=<hobtId> dbid=<dbid>

autorisations

Sur SQL Server et SQL Managed Instance, l’autorisation VIEW SERVER STATE est requise.

Sur les objectifs de service SQL Database Basic, S0 et S1, et pour les bases de données dans les pools élastiques, le compte d’administration du serveur, le compte d’administration Microsoft Entra ou l’appartenance dans ##MS_ServerStateReader## au rôle de serveur est requis. Sur tous les autres objectifs de service SQL Database, l’autorisation VIEW DATABASE STATE sur la base de données ou l’appartenance au rôle serveur ##MS_ServerStateReader## est requise.

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

Nécessite l’autorisation VIEW SERVER PERFORMANCE STATE sur le serveur.

Exemples

R. Identifier les tâches des sessions bloquées

SELECT * FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id IS NOT NULL;

B. Afficher les tâches en attente par connexion

SELECT st.text AS [SQL Text], c.connection_id, w.session_id,
  w.wait_duration_ms, w.wait_type, w.resource_address,
  w.blocking_session_id, w.resource_description, c.client_net_address, c.connect_time
FROM sys.dm_os_waiting_tasks AS w
INNER JOIN sys.dm_exec_connections AS c ON w.session_id = c.session_id
CROSS APPLY (SELECT * FROM sys.dm_exec_sql_text(c.most_recent_sql_handle)) AS st
              WHERE w.session_id > 50 AND w.wait_duration_ms > 0
ORDER BY c.connection_id, w.session_id;
GO

C. Afficher les tâches en attente pour tous les processus utilisateur avec des informations supplémentaires

SELECT 'Waiting_tasks' AS [Information], owt.session_id,
    owt.wait_duration_ms, owt.wait_type, owt.blocking_session_id,
    owt.resource_description, es.program_name, est.text,
    est.dbid, eqp.query_plan, er.database_id, es.cpu_time,
    es.memory_usage*8 AS memory_usage_KB
FROM sys.dm_os_waiting_tasks owt
INNER JOIN sys.dm_exec_sessions es ON owt.session_id = es.session_id
INNER JOIN sys.dm_exec_requests er ON es.session_id = er.session_id
OUTER APPLY sys.dm_exec_sql_text (er.sql_handle) est
OUTER APPLY sys.dm_exec_query_plan (er.plan_handle) eqp
WHERE es.is_user_process = 1
ORDER BY owt.session_id;
GO