Поделиться через


sys.dm_os_waiting_tasks (Transact-SQL)

Относится к:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsСистема аналитической платформы (PDW)SQL база данных в Microsoft Fabric

Возвращает сведения об очереди задач, ожидающих освобождения определенного ресурса. Дополнительные сведения о задачах см. в руководстве по архитектуре потоков и задач.

Примечание.

Чтобы вызвать это из Azure Synapse Analytics или Analytics Platform System (PDW), используйте имя sys.dm_pdw_nodes_os_waiting_tasks. Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.

Имя столбца Тип данных Description
waiting_task_address varbinary(8) Адрес ожидающей задачи.
session_id smallint Идентификатор сеанса, связанного с этой задачей.
exec_context_id int Идентификатор контекста выполнения, связанного с этой задачей.
wait_duration_ms bigint Общее время ожидания для этого типа ожиданий в миллисекундах. Это время включает в себя signal_wait_time.
wait_type nvarchar(60) Имя типа ожидания. Дополнительные сведения см. в sys.dm_os_wait_stats.
resource_address varbinary(8) Адрес ресурса, освобождения которого ожидает задача.
blocking_task_address varbinary(8) Задача, которая в настоящий момент блокирует этот ресурс.
blocking_session_id smallint Идентификатор сеанса, блокирующего запрос. Если этот столбец NULLуказан, запрос не блокируется или сведения о сеансе блокирующего сеанса недоступны (или не могут быть идентифицированы).

-2 = блокирующий ресурс принадлежит потерянным распределенным транзакциям.

-3 = блокирующий ресурс принадлежит отложенной транзакции восстановления.

-4 = session_id Не удалось определить владельца блокировки из-за внутренних переходов состояния блокировки.
blocking_exec_context_id int Идентификатор контекста выполнения блокирующей задачи.
resource_description nvarchar(3072) Описание используемого ресурса. Дополнительные сведения см. в столбце resource_description.
pdw_node_id int Идентификатор узла, на который находится данное распределение.

Область применения: Azure Synapse Analytics и система платформы аналитики (PDW)

Столбец resource_description

Столбец resource_description имеет следующие возможные значения.

Владелец ресурса пула потоков

threadpool id=scheduler<hex-address>

Владелец ресурса параллельного запроса

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

Тип exchange-wait

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

Блокировка владельца ресурса

<type-specific-description> id=lock<lock-hex-address> mode=<mode> associatedObjectId=<associated-obj-id>

  • <type-specific-description> может принимать следующие значения:

    • Для DATABASE: databaselock subresource=<databaselock-subresource> dbid=<db-id>
    • Для FILE: filelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
    • Для OBJECT: objectlock lockPartition=<lock-partition-id> objid=<obj-id> subresource=<objectlock-subresource> dbid=<db-id>
    • Для PAGE: pagelock fileid=<file-id> pageid=<page-id> dbid=<db-id> subresource=<pagelock-subresource>
    • Для Key: keylock hobtid=<hobt-id> dbid=<db-id>
    • Для EXTENT: extentlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
    • Для RID: ridlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
    • Для APPLICATION: applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
    • Для METADATA: metadatalock subresource=<metadata-subresource> classid=<metadatalock-description> dbid=<db-id>
    • Для HOBT: hobtlock hobtid=<hobt-id> subresource=<hobt-subresource> dbid=<db-id>
    • Для ALLOCATION_UNIT: allocunitlock hobtid=<hobt-id> subresource=<alloc-unit-subresource> dbid=<db-id>
  • <mode> может принимать следующие значения:

    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

Внешний владелец ресурса

Внешний ExternalResource=<wait-type>

Универсальный владелец ресурса

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

Владелец ресурса блокировки

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

Владелец ресурса XACT (транзакция)

Происходит при включенной оптимизированной блокировке :

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

Разрешения

ДЛЯ SQL Server 2019 (15.x) и более ранних версий требуется VIEW SERVER STATE разрешение.

SQL Server 2022 (16.x) и более поздних версий, а также SQL Server и Управляемого экземпляра SQL Azure требуют VIEW SERVER PERFORMANCE STATE разрешения на сервере.

В базах данных SQL Azure Basic, S0 и S1 , а также для баз данных в эластичных пулах, учетной записи администратора сервера , учетной записи администратора Microsoft Entra или членства в ##MS_ServerStateReader##роли сервера требуется. Для всех остальных целей обслуживания базы данных SQL требуется разрешение VIEW DATABASE STATE в базе данных или членство в роли сервера ##MS_ServerStateReader##.

Примеры

А. Определение задач из заблокированных сеансов

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

B. Просмотр задач ожидания на подключение

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

В. Просмотр задач ожидания для всех пользовательских процессов с дополнительными сведениями

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