Partage via


sys.dm_os_waiting_tasks (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Base de données SQL dans Microsoft Fabric

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 d’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. Pour plus d’informations, consultez sys.dm_os_wait_stats.
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 bloquant la requête. 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 consommée. Pour plus d’informations, consultez la colonne resource_description.
pdw_node_id int Identificateur du nœud sur lequel cette distribution est activée.

S’applique à : Azure Synapse Analytics and Analytics Platform System (PDW)

Colonne resource_description

La resource_description colonne a 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>

  • Voici à quoi <type-specific-description> peut correspondre :

    • 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 Key: keylock hobtid=<hobt-id> dbid=<db-id>
    • Pour EXTENT: 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 METADATA: 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>
  • Voici à quoi <mode> peut correspondre :

    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-, RangeX-U, RangeX-X

Propriétaire de ressources externes

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 Detch

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

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

SQL Server 2019 (15.x) et les versions antérieures nécessitent VIEW SERVER STATE une autorisation.

SQL Server 2022 (16.x) et versions ultérieures, et SQL Server et Azure SQL Managed Instance, nécessitent VIEW SERVER PERFORMANCE STATE une autorisation sur le serveur.

Sur les objectifs de service Azure SQL Database Basic, S0 et S1 , et pour les bases de données dans des pools élastiques, le compte d’administrateur du serveur , le compte d’administrateur Microsoft Entra ou l’appartenance au ##MS_ServerStateReader##rôle serveur est nécessaire. 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.

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 AS owt
     INNER JOIN sys.dm_exec_sessions AS es
         ON owt.session_id = es.session_id
     INNER JOIN sys.dm_exec_requests AS er
         ON es.session_id = er.session_id
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) AS est
OUTER APPLY sys.dm_exec_query_plan(er.plan_handle) AS eqp
WHERE es.is_user_process = 1
ORDER BY owt.session_id;
GO