Aracılığıyla paylaş


sys.dm_os_waiting_tasks (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft Fabric'te SQL Veritabanı

Bazı kaynaklarda bekleyen görevlerin bekleme kuyruğu hakkındaki bilgileri döndürür. Görevler hakkında daha fazla bilgi için bkz. İş parçacığı ve görev mimarisi kılavuzu.

Uyarı

Bunu Azure Synapse Analytics veya Analytics Platform Sistemi'nden (PDW) çağırmak için adını sys.dm_pdw_nodes_os_waiting_taskskullanın. Bu söz dizimi, Azure Synapse Analytics'teki sunucusuz SQL havuzu tarafından desteklenmez.

Sütun adı Veri türü Description
waiting_task_address varbinary(8) Bekleyen görevin adresi.
session_id smallint Görevle ilişkili oturumun kimliği.
exec_context_id int Görevle ilişkili yürütme bağlamının kimliği.
wait_duration_ms bigint Bu bekleme türü için milisaniye cinsinden toplam bekleme süresi. Bu süre öğesini kapsar signal_wait_time.
wait_type nvarchar(60) Bekleme türünün adı. Daha fazla bilgi için bkz. sys.dm_os_wait_stats.
resource_address varbinary(8) Görevin beklediği kaynağın adresi.
blocking_task_address varbinary(8) Şu anda bu kaynağı tutan görev
blocking_session_id smallint İsteği engelleyen oturumun kimliği. Bu sütun ise NULListek engellenmez veya engelleme oturumunun oturum bilgileri kullanılamaz (veya tanımlanamaz).

-2 = Engelleyici kaynak yalnız bırakılmış dağıtılmış bir işleme aittir.

-3 = Engelleyen kaynak ertelenen bir kurtarma işlemine aittir.

-4 = session_id engelleyici mandal sahibinin iç mandal durumu geçişleri nedeniyle belirlenemedi.
blocking_exec_context_id int Engelleme görevinin yürütme bağlamının kimliği.
resource_description nvarchar(3072) Tüketilen kaynağın açıklaması. Daha fazla bilgi için bkz . resource_description sütunu.
pdw_node_id int Bu dağıtımın üzerinde olduğu düğümün tanımlayıcısı.

Şunlar için geçerlidir: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

Sütun resource_description

Sütun resource_description aşağıdaki olası değerlere sahiptir.

İş parçacığı havuzu kaynak sahibi

threadpool id=scheduler<hex-address>

Paralel sorgu kaynağı sahibi

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

Exchange bekleme türü

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

Kaynak sahibini kilitleme

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

  • <type-specific-description> şu olabilir:

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

    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

Dış kaynak sahibi

Dış ExternalResource=<wait-type>

Genel kaynak sahibi

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

Mandal kaynağı sahibi

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

XACT (işlem) kaynak sahibi

İyileştirilmiş kilitleme etkinleştirildiğinde gerçekleşir:

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

Permissions

SQL Server 2019 (15.x) ve önceki sürümler için izin gerekir VIEW SERVER STATE .

SQL Server 2022 (16.x) ve sonraki sürümleri ile SQL Server ve Azure SQL Yönetilen Örneği, sunucuda izin gerektirir VIEW SERVER PERFORMANCE STATE .

Azure SQL Veritabanı Temel, S0 ve S1 hizmet hedeflerinde ve elastik havuzlardaki veritabanları için sunucu yönetici hesabı, Microsoft Entra yönetici hesabı veya ##MS_ServerStateReader## üyeliği gereklidir. Diğer tüm SQL Veritabanı hizmet hedeflerinde, veritabanında VIEW DATABASE STATE izni veya ##MS_ServerStateReader## sunucu rolü üyeliği gereklidir.

Örnekler

A. Engellenen oturumlardan görevleri tanımlama

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

B. Bağlantı başına bekleyen görevleri görüntüleme

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. Ek bilgilerle tüm kullanıcı işlemleri için bekleyen görevleri görüntüleme

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