sys.dm_os_waiting_tasks (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics sìParallel Data Warehouse

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 il metodo da Azure Synapse Analytics o , usare il nome Piattaforma di strumenti analitici (PDW) 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. Questo tempo è 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 oppure non sono disponibili o identificabili informazioni di sessione per la sessione da cui è bloccata.

-2 = La risorsa di blocco appartiene a una transazione distribuita orfana.

-3 = La risorsa di blocco appartiene a una transazione di recupero posticipata.

-4 = Non è possibile determinare l'ID di sessione del proprietario del latch di blocco a causa di transizioni nello stato del 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 ulteriori informazioni, vedere l'elenco riportato di seguito.
pdw_node_id int Si applica a: Azure Synapse Analytics , Piattaforma di strumenti analitici (PDW)

Identificatore del nodo in cui si trova la distribuzione.

Colonna resource_description

La colonna resource_description dispone dei valori possibili seguenti.

Proprietario risorsa pool di thread:

  • threadpool id=scheduler<hex-address>

Proprietario risorsa query parallela:

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

Tipo di attesa Exchange

  • e_waitNone

  • e_waitPipeNewRow

  • e_waitPipeGetRow

  • e_waitSynchronizeConsumerOpen

  • e_waitPortOpen

  • e_waitPortClose

  • e_waitRange

Proprietario risorsa di blocco:

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

    • Ad 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 risorsa esterna:

  • External ExternalResource=<wait-type>

Proprietario risorsa generica:

  • TransactionMutex TransactionInfo Workspace=<workspace-id>

  • Mutex

  • CLRTaskJoin

  • CLRMonitorEvent

  • CLRRWLockEvent

  • resourceWait

Proprietario risorsa latch:

  • <db-id>:<file-id>:<page-in-file>

  • <GUID>

  • <latch-class> (<latch-address>)

Autorizzazioni

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

Negli database SQL di servizio Basic, S0 e S1 e per i database nei pool elastici è necessario l'account amministratore del server, l'account amministratore di Azure Active Directory o l'appartenenza al ruolo del ##MS_ServerStateReader## server. In tutti gli altri database SQL di servizio, è necessaria l'autorizzazione per il database o l'appartenenza VIEW DATABASE STATE al ruolo del ##MS_ServerStateReader## server.

Esempio

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

Vedere anche

SQL Server Viste a gestione dinamica correlate al sistema operativo (Transact-SQL)
Guida sull'architettura dei thread e delle attività