共用方式為


sys.dm_os_workers

更新: 2006 年 4 月 14 日

針對系統中每一個工作者,各傳回一個資料列。

資料行名稱 資料類型 描述

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

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

int

當這個工作者進入 SUSPENDED 狀態時,在 ms_ticks 中的時間點。從 sys.dm_os_sys_info 中的 ms_ticks 減去這個值會傳回工作者等候的毫秒數。

wait_resumed_ms_ticks

int

當這個工作者進入 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)

擲出例外狀況的程式碼位址

locale

int

這個工作者的地區設定 LCID 設定。

affinity

bigint

這個工作者的相似性設定。如需詳細資訊,請參閱<sys.dm_os_schedulers>。

state

nvarchar(60)

工作者狀態。它可以是下列值之一:

INIT = 目前正在初始化的工作者。

RUNNING = 工作者目前以非先佔式或先佔式執行。

RUNNABLE = 工作者準備在排程器執行。

SUSPENDED = 工作者目前暫停,等待事件傳送信號給它。

start_quantum

bigint

這個工作者目前執行作業開始時,在 cpu_ticks 中的時間。

end_quantum

bigint

這個工作者目前執行作業結束時,在 cpu_ticks 中的時間。

last_wait_type

nvarchar(60)

最後等待的類型。如需等待類型的清單,請參閱<sys.dm_os_wait_stats>。

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)

這個工作者相關聯之 Fiber 的記憶體位址。

NULL = SQL Server 未設定為輕量型共用。

task_address

varbinary(8)

目前工作的記憶體位址。如需詳細資訊,請參閱<sys.dm_os_tasks>。

memory_object_address

varbinary(8)

工作者記憶體物件的記憶體位址。如需詳細資訊,請參閱<sys.dm_os_memory_objects>。

thread_address

varbinary(8)

與這個工作者相關聯之執行緒的記憶體位址。如需詳細資訊,請參閱<sys.dm_os_threads>。

signal_worker_address

varbinary(8)

最後立即通知這個物件之工作者的記憶體位址。如需詳細資訊,請參閱<sys.dm_os_workers>。

scheduler_address

varbinary(8)

排程器的記憶體位址。如需詳細資訊,請參閱<sys.dm_os_schedulers>。

備註

如果工作者狀態是 RUNNING,且工作者是以非先佔式執行,則工作者位址符合 sys.dm_os_schedulers 中的 active_worker_address

當立即通知等待事件的工作者時,會將工作者放在可執行佇列的開頭。SQL Server 可讓它在資料列出現一千次,在這之後工作者會放在佇列結尾。將工作者移到佇列結尾,會有一些效能隱含作用。

權限

需要伺服器的 VIEW SERVER 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_runnablew_suspended 相等時,這代表工作者處於 SUSPENDED 狀態的時間。否則,w_runnable 便代表工作者在 RUNNABLE 狀態中所花的時間。在此輸出中,工作階段 52 處於 SUSPENDED 狀態的時間為 35,094 毫秒。

請參閱

參考

動態管理檢視和函數
SQL Server 作業系統相關動態管理檢視

其他資源

記憶體架構

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

變更的內容:

修改 wait_resumed_ms_ticks 的描述。