Freigeben über


sys.dm_os_waiting_tasks (Transact-SQL)

Gilt für:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Datenbank in Microsoft Fabric

Gibt Informationen zur Warteschlange von Tasks zurück, die auf eine Ressource warten. Weitere Informationen zu Aufgaben finden Sie im Leitfaden zur Thread- und Aufgabenarchitektur.

Hinweis

Um dies von Azure Synapse Analytics oder Analytics Platform System (PDW) aufzurufen, verwenden Sie den Namen sys.dm_pdw_nodes_os_waiting_tasks. Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.

Spaltenname Datentyp Beschreibung
waiting_task_address varbinary(8) Adresse des wartenden Tasks.
session_id smallint ID der Sitzung, die dem Task zugeordnet ist.
exec_context_id int ID des Ausführungskontexts, der dem Task zugeordnet ist.
wait_duration_ms bigint Gesamtwartezeit für diesen Wartetyp (in Millisekunden). Diese Zeit ist inklusive von signal_wait_time.
wait_type nvarchar(60) Der Name des Wartetyps. Weitere Informationen finden Sie unter sys.dm_os_wait_stats.
resource_address varbinary(8) Adresse der Ressource, auf die der Task wartet.
blocking_task_address varbinary(8) Task, der derzeit diese Ressource verwendet.
blocking_session_id smallint ID der Sitzung, die die Anforderung blockiert. Wenn diese Spalte lautet NULL, wird die Anforderung nicht blockiert, oder die Sitzungsinformationen der Blockierungssitzung sind nicht verfügbar (oder können nicht identifiziert werden).

-2 = Die Blockierungsressource gehört einer verwaisten verteilten Transaktion.

-3 = Die Blockierungsressource gehört einer verzögerten Wiederherstellungstransaktion.

-4 = session_id der Blockierungssperre konnte aufgrund interner Sperreszustandsübergänge nicht ermittelt werden.
blocking_exec_context_id int ID des Ausführungskontexts des blockierenden Tasks.
resource_description nvarchar(3072) Beschreibung der verbrauchten Ressource. Weitere Informationen finden Sie in der Spalte resource_description.
pdw_node_id int Der Bezeichner für den Knoten, auf dem sich diese Verteilung befindet.

Gilt für: Azure Synapse Analytics and Analytics Platform System (PDW)

Die resource_description Spalte

Die resource_description Spalte weist die folgenden möglichen Werte auf.

Threadpoolressourcenbesitzer

threadpool id=scheduler<hex-address>

Besitzer der parallelen Abfrageressource

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

Exchange-Wait-Typ

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

Ressourcenbesitzer sperren

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

  • <type-specific-description> kann Folgendes sein:

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

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

Besitzer externer Ressourcen

Äußerlich ExternalResource=<wait-type>

Generischer Ressourcenbesitzer

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

Besitzer der Latch-Ressource

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

XACT(Transaction)-Ressourcenbesitzer

Tritt auf, wenn die optimierte Sperrung aktiviert ist:

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

Berechtigungen

SQL Server 2019 (15.x) und frühere Versionen erfordern VIEW SERVER STATE eine Berechtigung.

SQL Server 2022 (16.x) und höhere Versionen sowie SQL Server und Azure SQL Managed Instance erfordern VIEW SERVER PERFORMANCE STATE berechtigungen auf dem Server.

Für Azure SQL Database Basic, S0 und S1-Dienstziele sowie für Datenbanken in elastischen Pools ist das Serveradministratorkonto , das Microsoft Entra-Administratorkonto oder die Mitgliedschaft in der ##MS_ServerStateReader##Serverrolle erforderlich. Für alle anderen SQL-Datenbank-Dienstziele ist entweder die VIEW DATABASE STATE-Berechtigung für die Datenbank oder die Mitgliedschaft in der ##MS_ServerStateReader##-Serverrolle erforderlich.

Beispiele

A. Identifizieren von Aufgaben aus blockierten Sitzungen

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

B. Anzeigen von Wartevorgängen pro Verbindung

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. Anzeigen von Warteaufgaben für alle Benutzerprozesse mit zusätzlichen Informationen

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