Condividi tramite


sys.dm_os_waiting_tasks (Transact-SQL)

Si applica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema di Piattaforma Analitica (PDW)Database SQL in Microsoft Fabric

Restituisce informazioni sulla coda di attesa relativa alle attività che sono in attesa di una risorsa. Per altre informazioni sulle attività, vedere la Guida all'architettura di thread e attività.

Nota

Per chiamare questa operazione da Azure Synapse Analytics o da Platform System (PDW), usare il nome sys.dm_pdw_nodes_os_waiting_tasks. Questa sintassi non è supportata da pool SQL serverless in Azure Synapse Analytics.

Nome colonna Tipo di dati Descrizione
waiting_task_address varbinary(8) Indirizzo dell'attività in attesa.
session_id smallint ID della sessione associata all'attività.
exec_context_id int ID del contesto di esecuzione associato all'attività.
wait_duration_ms bigint Tempo totale di attesa per questo tipo di attesa, in millisecondi. Questa volta è inclusivo di signal_wait_time.
wait_type nvarchar(60) Nome del tipo di attesa. Per altre informazioni, vedere sys.dm_os_wait_stats.
resource_address varbinary(8) Indirizzo della risorsa attesa dall'attività.
blocking_task_address varbinary(8) Attività che mantiene bloccata la risorsa.
blocking_session_id smallint ID della sessione che blocca la richiesta. Se questa colonna è NULL, la richiesta non è bloccata o le informazioni sulla sessione di blocco non sono disponibili o non possono essere identificate.

-2 = La risorsa di blocco è di proprietà di una transazione distribuita orfana.

-3 = La risorsa di blocco è di proprietà di una transazione di ripristino posticipata.

-4 = session_id non è stato possibile determinare il proprietario del latch di blocco a causa delle transizioni di stato di latch interno.
blocking_exec_context_id int ID del contesto di esecuzione dell'attività di blocco.
resource_description nvarchar(3072) Descrizione della risorsa utilizzata. Per altre informazioni, vedere La colonna resource_description.
pdw_node_id int Identificatore del nodo in cui è attiva la distribuzione.

Si applica a: Azure Synapse Analytics and Analytics Platform System (PDW)

Colonna resource_description

La resource_description colonna contiene i valori possibili seguenti.

Proprietario della risorsa del pool di thread

threadpool id=scheduler<hex-address>

Proprietario della risorsa di query parallela

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

Bloccare il proprietario della risorsa

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

  • <type-specific-description> può essere:

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

    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

Proprietario della risorsa esterna

Esterno ExternalResource=<wait-type>

Proprietario della risorsa generica

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

Proprietario della risorsa latch

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

Proprietario della risorsa XACT (transazione)

Si verifica quando è abilitato il blocco ottimizzato :

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

Autorizzazioni

SQL Server 2019 (15.x) e versioni precedenti richiedono VIEW SERVER STATE l'autorizzazione.

SQL Server 2022 (16.x) e versioni successive e SQL Server e Istanza gestita di SQL di Azure richiedono VIEW SERVER PERFORMANCE STATE l'autorizzazione per il server.

Negli obiettivi di servizio Di base, S0 e S1 del database SQL di Azure e per i database nei pool elastici, nell'account amministratore del server , nell'account amministratore di Microsoft Entra o nell'appartenenza al ruolo del ##MS_ServerStateReader##server è necessaria. Per tutti gli altri obiettivi di servizio database SQL, è necessaria l'autorizzazione VIEW DATABASE STATE per il database o l'adesione ruolo del server ##MS_ServerStateReader##.

Esempi

R. Identificare le attività dalle sessioni bloccate

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

B. Visualizzare le attività in attesa per ogni connessione

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. Visualizzare le attività in attesa per tutti i processi utente con informazioni aggiuntive

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