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>) 的多個資料行。 請使用下列查詢來尋找所有使用中要求的設定 max degree of parallelism 伺服器組態選項。
[!附註]
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