sys.dm_os_waiting_tasks (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

Restituisce informazioni sulla coda di attesa relativa alle attività che sono in attesa di una risorsa. Per altre informazioni sulle attività, vedere 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.
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 sta bloccando 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 attualmente occupata. Per altre informazioni, vedere resource_description colonna.
pdw_node_id int Si applica a: Azure Synapse Analytics, Piattaforma di analisi (PDW)

Identificatore del nodo in cui è attiva la distribuzione.

Colonna resource_description

La colonna resource_description include i valori possibili seguenti.

Proprietario della risorsa del pool di thread:

  • threadpool id=scheduler<hex-address>

Proprietario della risorsa di query parallela:

  • exchangeEvent id={Porta|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 PAGINA: pagelock fileid=<file-id> pageid=<page-id> dbid=<db-id> subresource=<pagelock-subresource>
      • Per Chiave: 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 APPLICAZIONE: applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
      • Per METADATI: 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-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>)

Il 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

In SQL Server e Istanza gestita di SQL è richiesta l'autorizzazione VIEW SERVER STATE.

Negli obiettivi del servizio Basic del Database SQL, S0 e S1 e per i database nei pool elastici, è richiesto l'account amministratore del server, l'account amministratore di Microsoft Entra o l’adesione nel ##MS_ServerStateReader## al ruolo del server. 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##.

Autorizzazioni per SQL Server 2022 e versioni successive

È richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE per il server.

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 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