Sdílet prostřednictvím


sys.dm_os_waiting_tasks (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

Vrátí informace o frontě čekání úkolů, které čekají na nějaký prostředek. Další informace o úkolech najdete v průvodci architekturou vláken a úloh.

Poznámka:

Pokud to chcete volat ze služby Azure Synapse Analytics nebo systému PDW (Analytics Platform System), použijte název sys.dm_pdw_nodes_os_waiting_tasks. Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics.

Název sloupce Datový typ Description
waiting_task_address varbinary(8) Adresa čekající úlohy.
session_id smallint ID relace přidružené k úkolu.
exec_context_id int ID kontextu spuštění přidruženého k úloze.
wait_duration_ms bigint Celková doba čekání pro tento typ čekání v milisekundách Tento čas je inkluzivní .signal_wait_time
wait_type nvarchar(60) Název typu čekání. Další informace najdete v tématu sys.dm_os_wait_stats.
resource_address varbinary(8) Adresa zdroje, na který úkol čeká.
blocking_task_address varbinary(8) Úkol, který aktuálně tento zdroj drží
blocking_session_id smallint ID relace blokující požadavek. Pokud se jedná NULLo tento sloupec, požadavek není zablokovaný nebo informace o relaci blokující relace nejsou k dispozici (nebo se nedají identifikovat).

-2 = Blokující prostředek je vlastněn osamocenou distribuovanou transakcí.

-3 = Blokující prostředek je vlastněn odloženou transakcí obnovení.

-4 = session_id vlastníka blokující západky nebylo možné určit z důvodu vnitřních přechodů stavu západky.
blocking_exec_context_id int ID kontextu provádění blokující úlohy.
resource_description nvarchar(3072) Popis spotřebovaného prostředku Další informace naleznete v tématu resource_description sloupec.
pdw_node_id int Identifikátor uzlu, na který je tato distribuce zapnutá.

Platí pro: Azure Synapse Analytics a Analytics Platform System (PDW)

Sloupec resource_description

Sloupec resource_description obsahuje následující možné hodnoty.

Vlastník prostředku fondu vláken

threadpool id=scheduler<hex-address>

Vlastník prostředku paralelního dotazu

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

Typ exchange-wait

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

Uzamknout vlastníka prostředku

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

  • <type-specific-description> může být:

    • Pro DATABASE: databaselock subresource=<databaselock-subresource> dbid=<db-id>
    • Pro FILE: filelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
    • Pro OBJECT: objectlock lockPartition=<lock-partition-id> objid=<obj-id> subresource=<objectlock-subresource> dbid=<db-id>
    • Pro PAGE: pagelock fileid=<file-id> pageid=<page-id> dbid=<db-id> subresource=<pagelock-subresource>
    • Pro Key: keylock hobtid=<hobt-id> dbid=<db-id>
    • Pro EXTENT: extentlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
    • Pro RID: ridlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
    • Pro APPLICATION: applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
    • Pro METADATA: metadatalock subresource=<metadata-subresource> classid=<metadatalock-description> dbid=<db-id>
    • Pro HOBT: hobtlock hobtid=<hobt-id> subresource=<hobt-subresource> dbid=<db-id>
    • Pro ALLOCATION_UNIT: allocunitlock hobtid=<hobt-id> subresource=<alloc-unit-subresource> dbid=<db-id>
  • <mode> může být:

    Sch-S, Sch-M, Sch-M, U, X, IS, IU, IX, SIU, SIX, UIX, BU, RangeS-S, RangeS-U, RangeI-N, RangeI-U, RangeI-X, RangeX-, RangeX-U, RangeX-X

Vlastník externího prostředku

Externí ExternalResource=<wait-type>

Obecný vlastník prostředku

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

Vlastník prostředku západky

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

Vlastník prostředku XACT (transakce)

Nastane, když je povolené optimalizované uzamčení :

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

Povolení

SQL Server 2019 (15.x) a starší verze vyžadují VIEW SERVER STATE oprávnění.

SQL Server 2022 (16.x) a novější verze a SQL Server a Azure SQL Managed Instance vyžadují VIEW SERVER PERFORMANCE STATE oprávnění k serveru.

U cílů služby Azure SQL Database Basic, S0 a S1 a pro databáze v elastických fondech se vyžaduje účet správce serveru , účet správce Microsoft Entra nebo členství v ##MS_ServerStateReader##roli serveru . U všech ostatních cílů VIEW DATABASE STATE služby SQL Database se vyžaduje buď oprávnění k databázi, nebo členství v ##MS_ServerStateReader## roli serveru.

Examples

A. Identifikace úkolů z blokovaných relací

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

B. Zobrazení čekajících úkolů na připojení

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. Zobrazení čekajících úkolů pro všechny uživatelské procesy s dalšími informacemi

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