Share via


sys.dm_os_tasks (Transact-SQL)

針對 SQL Server 執行個體的每一個作用中的工作,各傳回一個資料列。

資料行名稱

資料類型

說明

task_address

varbinary(8)

物件的記憶體位址。

task_state

nvarchar(60)

工作的狀態。這可以是下列項目之一:

PENDING;等待工作者執行緒。

RUNNABLE:可執行的,但等待接收配量。

RUNNING:目前在排程器上執行。

SUSPENDED:有工作者,但等待事件。

DONE:已完成。

SPINLOOP:卡在微調鎖定中。

context_switches_count

int

這項工作已完成的排程器內容切換數目。

pending_io_count

int

這項工作執行的實體 I/O 數目。

pending_io_byte_count

bigint

這項工作執行之 I/O 的總位元組計數。

pending_io_byte_average

int

這項工作執行之 I/O 的平均位元組計數。

scheduler_id

int

父排程器的識別碼。這是這項工作之排程器資訊的控制代碼。如需詳細資訊,請參閱<sys.dm_os_schedulers (Transact-SQL)>。

session_id

smallint

與這項工作相關聯的工作階段識別碼。

exec_context_id

int

與這項工作相關聯的執行內容識別碼。

request_id

int

工作的要求識別碼。如需詳細資訊,請參閱<sys.dm_exec_requests (Transact-SQL)>。

worker_address

varbinary(8)

執行工作之工作者的記憶體位址。

NULL = 工作正等待工作者執行,或工作剛執行完畢。

如需詳細資訊,請參閱<sys.dm_os_workers (Transact-SQL)>。

host_address

varbinary(8)

主機的記憶體位址。

0 = 不會利用主控作業來建立工作。這可幫助您識別用來建立這項工作的主機。

如需詳細資訊,請參閱<sys.dm_os_hosts (Transact-SQL)>。

parent_task_address

varbinary(8)

屬於物件父項之工作的記憶體位址。

權限

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

範例

A. 監視平行要求

如果是並行執行的要求,您會看到相同組合 (<session_id>、<request_id>) 的多個資料行。請使用下列查詢來尋找所有使用中查詢的平行處埋原則之程度

[!附註]

request_id 在工作階段中是唯一的。

SELECT
    task_address,
    task_state,
    context_switches_count,
    pending_io_count,
    pending_io_byte_count,
    pending_io_byte_average,
    scheduler_id,
    session_id,
    exec_context_id,
    request_id,
    worker_address,
    host_address
  FROM sys.dm_os_tasks
  ORDER BY session_id, request_id;

B. 將工作階段識別碼與 Windows 執行緒相關聯

您可以使用下列查詢,將工作階段識別碼值與 Windows 執行緒識別碼產生關聯。然後您可以在 Windows 效能監視器中監控執行緒的效能。下列查詢不會傳回目前睡眠中的工作階段之資訊。

SELECT STasks.session_id, SThreads.os_thread_id
  FROM sys.dm_os_tasks AS STasks
  INNER JOIN sys.dm_os_threads AS SThreads
    ON STasks.worker_address = SThreads.worker_address
  WHERE STasks.session_id IS NOT NULL
  ORDER BY STasks.session_id;
GO