sys.dm_os_waiting_tasks (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Devuelve información sobre la cola de tareas que están esperando en algún recurso. Para obtener más información sobre las tareas, consulte la Guía de arquitectura de subprocesos y tareas.

Nota:

Para llamar a esto desde Azure Synapse Analytics o Analytics Platform System (PDW), use el nombre sys.dm_pdw_nodes_os_waiting_tasks. El grupo de SQL sin servidor no admite esta sintaxis en Azure Synapse Analytics.

Nombre de la columna Tipo de datos Descripción
waiting_task_address varbinary(8) Dirección de la tarea a la espera.
session_id smallint Id. de la sesión asociada a la tarea.
exec_context_id int Id. del contexto de ejecución asociado a la tarea.
wait_duration_ms bigint Tiempo de espera total para este tipo de espera, en milisegundos. Esta vez es inclusiva de signal_wait_time.
wait_type nvarchar(60) Nombre del tipo de espera.
resource_address varbinary(8) Dirección del recurso por el que la tarea está esperando.
blocking_task_address varbinary(8) Tarea que alberga actualmente este recurso.
blocking_session_id smallint Id. de la sesión que bloquea la solicitud. Si esta columna es NULL, la solicitud no está bloqueada o la información de sesión de la sesión de bloqueo no está disponible (o no se puede identificar).

-2 = El recurso de bloqueo es propiedad de una transacción distribuida huérfana.

-3 = El recurso de bloqueo es propiedad de una transacción de recuperación diferida.

-4 = session_id del propietario del bloqueo del bloqueo temporal no se pudo determinar debido a las transiciones de estado de bloqueo temporal interno.
blocking_exec_context_id int Id. del contexto de ejecución de la tarea de bloqueo.
resource_description nvarchar(3072) Descripción del recurso utilizado. Para obtener más información, consulte resource_description columna.
pdw_node_id int Se aplica a: Azure Synapse Analytics, Sistema de la plataforma de análisis (PDW)

Identificador del nodo en el que se encuentra esta distribución.

Columna resource_description

La columna resource_description tiene los siguientes valores posibles.

Propietario del recurso del grupo de subprocesos:

  • threadpool id=scheduler<hex-address>

Propietario del recurso de consulta en paralelo:

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

Tipo de espera de Exchange:

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

Bloquear propietario del recurso:

  • <type-specific-description> id=lock<lock-hex-address> mode=<mode> associatedObjectId=<associated-obj-id>
    • <type-specific-description> puede ser:
      • Para DATABASE: databaselock subresource=<databaselock-subresource> dbid=<db-id>
      • Para FILE: filelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
      • Para OBJECT: objectlock lockPartition=<lock-partition-id> objid=<obj-id> subresource=<objectlock-subresource> dbid=<db-id>
      • Para PAGE: pagelock fileid=<file-id> pageid=<page-id> dbid=<db-id> subresource=<pagelock-subresource>
      • Para clave: keylock hobtid=<hobt-id> dbid=<db-id>
      • Para EXTENT: extentlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
      • Para RID: ridlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
      • Para APPLICATION: applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
      • Para METADATOS: metadatalock subresource=<metadata-subresource> classid=<metadatalock-description> dbid=<db-id>
      • Para HOBT: hobtlock hobtid=<hobt-id> subresource=<hobt-subresource> dbid=<db-id>
      • Para ALLOCATION_UNIT: allocunitlock hobtid=<hobt-id> subresource=<alloc-unit-subresource> dbid=<db-id>
    • <mode> puede ser: 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, RangeX-X

Propietario del recurso externo:

  • Externos ExternalResource=<wait-type>

Propietario del recurso genérico:

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

Propietario del recurso de bloqueo temporal:

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

Propietario del recurso XACT, relacionado con el bloqueo optimizado:

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

Permisos

En SQL Server y SQL Managed Instance, requiere el permiso VIEW SERVER STATE.

En los objetivos de servicio de SQL Database Basic, S0 y S1, y para las bases de datos de grupos elásticos, se requiere la cuenta de administrador del servidor, la cuenta de administrador de Microsoft Entra o la pertenencia al rol de ##MS_ServerStateReader##servidor. En el resto de objetivos del servicio de SQL Database, se requiere el permiso VIEW DATABASE STATE en la base de datos o la pertenencia en el rol del servidor ##MS_ServerStateReader##.

Permisos para SQL Server 2022 y versiones posteriores

Requiere el permiso VER ESTADO DE RENDIMIENTO DEL SERVIDOR en el servidor.

Ejemplos

A Identificación de tareas de sesiones bloqueadas

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

B. Visualización de tareas en espera por conexión

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. Visualización de tareas en espera para todos los procesos de usuario con información adicional

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