Udostępnij za pomocą


sys.dm_os_waiting_tasks (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w Microsoft Fabric

Zwraca informacje o kolejce oczekiwania zadań oczekujących na jakiś zasób. Aby uzyskać więcej informacji na temat zadań, zobacz Przewodnik po architekturze wątków i zadań.

Uwaga / Notatka

Aby wywołać to z usługi Azure Synapse Analytics lub Analytics Platform System (PDW), użyj nazwy sys.dm_pdw_nodes_os_waiting_tasks. Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Nazwa kolumny Typ danych Description
waiting_task_address varbinary(8) Adres zadania oczekującego.
session_id smallint Identyfikator sesji skojarzonej z zadaniem.
exec_context_id int Identyfikator kontekstu wykonywania skojarzonego z zadaniem.
wait_duration_ms bigint Łączny czas oczekiwania dla tego typu oczekiwania w milisekundach. Ten czas obejmuje wartość signal_wait_time.
wait_type nvarchar(60) Nazwa typu oczekiwania. Aby uzyskać więcej informacji, zobacz sys.dm_os_wait_stats.
resource_address varbinary(8) Adres zasobu, dla którego zadanie oczekuje.
blocking_task_address varbinary(8) Zadanie, które obecnie przechowuje ten zasób
blocking_session_id smallint Identyfikator sesji blokującej żądanie. Jeśli ta kolumna to NULL, żądanie nie jest zablokowane lub informacje o sesji sesji blokującej nie są dostępne (lub nie można ich zidentyfikować).

-2 = Zasób blokujący jest własnością oddzielonej transakcji rozproszonej.

-3 = Zasób blokujący jest własnością transakcji odroczonego odzyskiwania.

-4 = session_id nie można określić właściciela zatrzaśnięć blokującego z powodu wewnętrznych przejść stanu zatrzaśnięć.
blocking_exec_context_id int Identyfikator kontekstu wykonywania zadania blokującego.
resource_description nvarchar(3072) Opis używanego zasobu. Aby uzyskać więcej informacji, zobacz kolumnę resource_description.
pdw_node_id int Identyfikator węzła, w ramach którego znajduje się ta dystrybucja.

Dotyczy: Azure Synapse Analytics and Analytics Platform System (PDW)

Kolumna resource_description

Kolumna resource_description ma następujące możliwe wartości.

Właściciel zasobu puli wątków

threadpool id=scheduler<hex-address>

Właściciel zasobu zapytania równoległego

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

Typ oczekiwania programu Exchange

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

Zablokuj właściciela zasobu

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

  • <type-specific-description> może to być:

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

    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, RangeX-X, RangeX-U, RangeX-X

Właściciel zasobu zewnętrznego

Zewnętrzny ExternalResource=<wait-type>

Ogólny właściciel zasobu

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

Zatrzaśnięć właściciela zasobu

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

Właściciel zasobu XACT (transakcja)

Występuje po włączeniu zoptymalizowanego blokowania :

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

Permissions

Program SQL Server 2019 (15.x) i starsze wersje wymagają VIEW SERVER STATE uprawnień.

Sql Server 2022 (16.x) i nowsze wersje oraz SQL Server i Azure SQL Managed Instance wymagają VIEW SERVER PERFORMANCE STATE uprawnień na serwerze.

W przypadku celów usługi Azure SQL Database Basic, S0 i S1 oraz baz danych w elastycznych pulach wymagane jest konto administratora serwera , konto administratora firmy Microsoft Entra lub członkostwo w ##MS_ServerStateReader##roli serwera . We wszystkich innych celach usługi SQL Database wymagane VIEW DATABASE STATE jest uprawnienie do bazy danych lub członkostwo w ##MS_ServerStateReader## roli serwera.

Przykłady

A. Identyfikowanie zadań z zablokowanych sesji

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

B. Wyświetlanie oczekujących zadań na połączenie

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. Wyświetlanie zadań oczekujących dla wszystkich procesów użytkownika z dodatkowymi informacjami

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