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>
- Per DATABASE:
<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