sys.dm_os_waiting_tasks (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

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.
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 verwendeten Ressource. Weitere Informationen finden Sie in resource_description Spalte.
pdw_node_id int Gilt für: Azure Synapse Analytics, Analytics Platform System (PDW)

Der Bezeichner für den Knoten, auf dem sich diese Verteilung befindet.

resource_description-Spalte

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

Besitzer der Threadpoolressource:

  • 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 sein:
      • Für DATENBANK: databaselock subresource=<databaselock-subresource> dbid=<db-id>
      • Für DATEI: filelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
      • Für OBJEKT: 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 Schlüssel: keylock hobtid=<hobt-id> dbid=<db-id>
      • Für UMFANG: 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 ANWENDUNG: applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
      • Für METADATEN: 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 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-, RangeX-U, RangeX-X

Besitzer externer Ressourcen:

  • Externen 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-Ressourcenbesitzer im Zusammenhang mit der optimierten Sperre:

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

Berechtigungen

Für SQL Server und SQL Managed Instance ist die VIEW SERVER STATE-Berechtigung erforderlich.

Für SQL-Datenbank Standard-, 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.

Berechtigungen für SQL Server 2022 und höher

Erfordert die VIEW SERVER PERFORMANCE STATE-Berechtigung auf dem Server.

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