Dela via


sys.dm_os_waiting_tasks (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Returnerar information om väntekön med uppgifter som väntar på en resurs. Mer information om aktiviteter finns i guiden Tråd- och aktivitetsarkitektur.

Anmärkning

Om du vill anropa detta från Azure Synapse Analytics eller Analytics Platform System (PDW) använder du namnet sys.dm_pdw_nodes_os_waiting_tasks. Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.

Kolumnnamn Datatyp Description
waiting_task_address varbinary(8) Adressen till den väntande uppgiften.
session_id smallint ID för sessionen som är associerad med uppgiften.
exec_context_id int ID för körningskontexten som är associerad med uppgiften.
wait_duration_ms bigint Total väntetid för den här väntetypen i millisekunder. Den här gången ingår signal_wait_time.
wait_type nvarchar(60) Namnet på väntetypen. Mer information finns i sys.dm_os_wait_stats.
resource_address varbinary(8) Adressen till den resurs som aktiviteten väntar på.
blocking_task_address varbinary(8) Uppgift som för närvarande innehåller den här resursen
blocking_session_id smallint ID för sessionen som blockerar begäran. Om den här kolumnen är NULLblockeras inte begäran eller sessionsinformationen för den blockerande sessionen är inte tillgänglig (eller kan inte identifieras).

-2 = Den blockerande resursen ägs av en överbliven distribuerad transaktion.

-3 = Den blockerande resursen ägs av en uppskjuten återställningstransaktion.

-4 = session_id av den blockerande låsägaren kunde inte fastställas på grund av interna spärrtillståndsövergångar.
blocking_exec_context_id int ID för körningskontexten för den blockerande uppgiften.
resource_description nvarchar(3072) Beskrivning av resursen som förbrukas. Mer information finns i kolumnen resource_description.
pdw_node_id int Identifieraren för noden som den här fördelningen är på.

Gäller för: Azure Synapse Analytics and Analytics Platform System (PDW)

Kolumnen resource_description

Kolumnen resource_description har följande möjliga värden.

Resursägare för trådpool

threadpool id=scheduler<hex-address>

Resursägare för parallell fråga

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

Exchange-wait-type

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

Lås resursägare

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

  • <type-specific-description> kan vara:

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

    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

Extern resursägare

Extern ExternalResource=<wait-type>

Allmän resursägare

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

Spärrresursägare

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

XACT-resursägare (transaktion)

Inträffar när optimerad låsning är aktiverad :

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

Permissions

SQL Server 2019 (15.x) och tidigare versioner kräver VIEW SERVER STATE behörighet.

SQL Server 2022 (16.x) och senare versioner samt SQL Server och Azure SQL Managed Instance kräver VIEW SERVER PERFORMANCE STATE behörighet på servern.

I tjänstmålen för Azure SQL Database Basic, S0 och S1 och för databaser i elastiska pooler krävs serveradministratörskontot, Microsoft Entra-administratörskontot eller medlemskap i serverrollen##MS_ServerStateReader##. För alla andra SQL Database-tjänstmål krävs antingen VIEW DATABASE STATE behörighet för databasen eller medlemskap i ##MS_ServerStateReader## serverrollen.

Examples

A. Identifiera uppgifter från blockerade sessioner

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

B. Visa väntande uppgifter per anslutning

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. Visa väntande uppgifter för alla användarprocesser med ytterligare information

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