sys.dm_os_workers (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

傳回系統中每個背景工作角色的資料列。 如需背景工作角色的詳細資訊,請參閱 執行緒和工作架構指南

注意

若要從 Azure Synapse Analytics 或 Analytics Platform System (PDW) 呼叫此專案,請使用名稱 sys.dm_pdw_nodes_os_workers 。 Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。

資料行名稱 資料類型 描述
worker_address Varbinary(8) 背景工作角色的記憶體位址。
status int 僅供內部使用。
is_preemptive bit 1 = 背景工作角色正在執行先占式排程。 執行外部程式碼的任何背景工作角色都是在先占式排程下執行。
is_fiber bit 1 = 背景工作正在執行輕量型共用。 如需詳細資訊,請參閱 sp_configure (Transact-SQL)
is_sick bit 1 = 背景工作角色在嘗試取得微調鎖定時停滯。 如果設定此位,這可能表示在經常存取的物件上發生爭用的問題。
is_in_cc_exception bit 1 = 背景工作角色目前正在處理非 SQL Server 例外狀況。
is_fatal_exception bit 指定此背景工作角色是否收到嚴重例外狀況。
is_inside_catch bit 1 = 背景工作角色目前正在處理例外狀況。
is_in_polling_io_completion_routine bit 1 = 背景工作角色目前正在執行擱置 I/O 的 I/O 完成常式。 如需詳細資訊,請參閱 sys.dm_io_pending_io_requests (Transact-SQL)
coNtext_switch_count int 此背景工作角色所執行的排程器內容切換數目。
pending_io_count int 此背景工作角色所執行的實體 I/O 數目。
pending_io_byte_count bigint 此背景工作角色所有暫止實體 I/O 的位元組總數。
pending_io_byte_average int 此背景工作角色之實體 I/O 的平均位元組數目。
wait_started_ms_ticks bigint 當此背景工作角色進入 SUSPENDED 狀態時,ms_ticks 時間點。 從 sys.dm_os_sys_info 中的 ms_ticks減去此值,會傳回背景工作角色等候的毫秒數。
wait_resumed_ms_ticks bigint 當此背景工作角色進入 RUNNABLE 狀態時,ms_ticks 時間點。 從 sys.dm_os_sys_info 中的 ms_ticks減去此值,會傳回背景工作角色在可執行佇列中已發生的毫秒數。
task_bound_ms_ticks bigint 時間點,在 ms_ticks ,當工作系結至此背景工作時。
worker_created_ms_ticks bigint 建立背景工作角色時,ms_ticks 時間點。
exception_num int 此背景工作角色遇到的最後一個例外狀況的錯誤號碼。
exception_severity int 此背景工作角色遇到最後一個例外狀況的嚴重性。
exception_address Varbinary(8) 擲回例外狀況的程式碼位址
相似性 bigint 背景工作角色的執行緒親和性。 比對 sys.dm_os_threads 中 執行緒的親和性(Transact-SQL)。
state nvarchar(60) 背景工作狀態。 可以是下列值之一:

INIT = 背景工作角色目前正在初始化。

RUNNING = 背景工作目前正在非先占或先占執行。

RUNNABLE = 背景工作角色已準備好在排程器上執行。

SUSPENDED = 背景工作角色目前已暫停,等待事件傳送訊號。
start_quantum bigint 時間,以毫秒為單位,在這個背景工作角色的目前執行開始時。
end_quantum bigint 時間,以毫秒為單位,在此背景工作角色的目前執行結束時。
last_wait_type nvarchar(60) 上次等候的類型。 如需等候類型清單,請參閱 sys.dm_os_wait_stats (Transact-SQL)
return_code int 從上次等候傳回值。 可以是下列值之一:

0 =SUCCESS

3 = DEADLOCK

4 = PREMATURE_WAKEUP

258 = TIMEOUT
quantum_used bigint 僅供內部使用。
max_quantum bigint 僅供內部使用。
boost_count int 僅供內部使用。
tasks_processed_count int 此背景工作所處理的工作數目。
fiber_address Varbinary(8) 與此背景工作角色相關聯之光纖的記憶體位址。

Null = 未針對輕量型共用設定 SQL Server。
task_address Varbinary(8) 目前工作的記憶體位址。 如需詳細資訊,請參閱 sys.dm_os_tasks (Transact-SQL)
memory_object_address Varbinary(8) 背景工作記憶體物件的記憶體位址。 如需詳細資訊,請參閱 sys.dm_os_memory_objects (Transact-SQL)
thread_address Varbinary(8) 與此背景工作角色相關聯的執行緒記憶體位址。 如需詳細資訊,請參閱 sys.dm_os_threads (Transact-SQL)
signal_worker_address Varbinary(8) 上次發出這個物件訊號之背景工作角色的記憶體位址。 如需詳細資訊,請參閱 sys.dm_os_workers
scheduler_address Varbinary(8) 排程器的記憶體位址。 如需詳細資訊,請參閱 sys.dm_os_schedulers (Transact-SQL)
processor_group smallint 儲存指派給此執行緒的處理器群組識別碼。
pdw_node_id int 適用於:Azure Synapse Analytics、Analytics Platform System (PDW)

此散發節點的識別碼。

備註

如果背景工作狀態為 RUNNING,且背景工作角色非先占執行,則背景工作位址會比對sys.dm_os_schedulers中的active_worker_address。

當等候事件的背景工作角色收到訊號時,背景工作角色會放在可執行佇列的前端。 SQL Server 允許在一個資料列中發生一千次,之後背景工作角色就會放在佇列結尾。 將背景工作角色移至佇列結尾具有一些效能影響。

權限

在 SQL Server 上,需要 VIEW SERVER STATE 許可權。
在 SQL Database 進階版層級需要資料庫的 VIEW DATABASE STATE 權限。 在 SQL Database 標準和基本層上,需要 Server Admin 角色成員資格或 Azure Active Directory admin 帳戶。

SQL Server 2022 和更新版本的權限

需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。

範例

您可以使用下列查詢來瞭解背景工作角色在 SUSPENDED 或 RUNNABLE 狀態中執行的時間長度。

SELECT   
    t1.session_id,  
    CONVERT(varchar(10), t1.status) AS status,  
    CONVERT(varchar(15), t1.command) AS command,  
    CONVERT(varchar(10), t2.state) AS worker_state,  
    w_suspended =   
      CASE t2.wait_started_ms_ticks  
        WHEN 0 THEN 0  
        ELSE   
          t3.ms_ticks - t2.wait_started_ms_ticks  
      END,  
    w_runnable =   
      CASE t2.wait_resumed_ms_ticks  
        WHEN 0 THEN 0  
        ELSE   
          t3.ms_ticks - t2.wait_resumed_ms_ticks  
      END  
  FROM sys.dm_exec_requests AS t1  
  INNER JOIN sys.dm_os_workers AS t2  
    ON t2.task_address = t1.task_address  
  CROSS JOIN sys.dm_os_sys_info AS t3  
  WHERE t1.scheduler_id IS NOT NULL;  

以下為結果集。

 session_id status     command         worker_state w_suspended w_runnable  
 ---------- ---------- --------------- ------------ ----------- --------------------  
 4          background LAZY WRITER     SUSPENDED    688         688  
 6          background LOCK MONITOR    SUSPENDED    4657        4657
 19         background BRKR TASK       SUSPENDED    603820344   603820344  
 14         background BRKR EVENT HNDL SUSPENDED    63583641    63583641  
 51         running    SELECT          RUNNING      0           0  
 2          background RESOURCE MONITO RUNNING      0           603825954  
 3          background LAZY WRITER     SUSPENDED    422         422  
 7          background SIGNAL HANDLER  SUSPENDED    603820485   603820485  
 13         background TASK MANAGER    SUSPENDED    603824704   603824704  
 18         background BRKR TASK       SUSPENDED    603820407   603820407  
 9          background TRACE QUEUE TAS SUSPENDED    454         454  
 52         suspended  SELECT          SUSPENDED    35094       35094  
 1          background RESOURCE MONITO RUNNING      0           603825954  

在輸出中,當 和 w_suspended 相等時 w_runnable ,這代表背景工作角色處於 SUSPENDED 狀態的時間。 否則, w_runnable 表示背景工作角色在 RUNNABLE 狀態所花費的時間。 在輸出中,會話 52SUSPENDED35,094 毫秒。

另請參閱

SQL Server 作業系統相關動態管理檢視 (Transact-SQL)
查詢處理架構指南
執行緒和工作架構指南