sys.dm_os_tasks

更新日期: 2006 年 4 月 14 日

为 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

父计划程序的 ID。这是此任务的计划程序信息的句柄。有关详细信息,请参阅 sys.dm_os_schedulers

session_id

smallint

与任务关联的会话 ID。

exec_context_id

int

与任务关联的执行上下文 ID。

request_id

int

此任务的请求的 ID。有关详细信息,请参阅 sys.dm_exec_requests

worker_address

varbinary(8)

运行任务的工作线程的内存地址。

NULL = 任务正在等待工作线程以便运行,或者任务刚刚完成运行。

有关详细信息,请参阅 sys.dm_os_workers

host_address

varbinary(8)

主机的内存地址。

0 = 不使用宿主创建任务。这有助于标识用于创建此任务的主机。

有关详细信息,请参阅 sys.dm_os_hosts

权限

需要对服务器具有 VIEW SERVER STATE 权限。

示例

A. 监视并行请求

对于以并行方式执行的请求,您将看到具有相同组合 (<session_id>, <request_id>) 的多个行。使用下面的查询找到用于所有活动请求的并行度

ms174963.note(zh-cn,SQL.90).gif注意:
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. 使会话 ID 与 Windows 线程关联

可以使用以下查询将会话 ID 值与 Windows 线程 ID 进行关联。然后可以通过 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

请参阅

参考

动态管理视图和函数
与 SQL Server 操作系统相关的动态管理视图

其他资源

内存体系结构

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本 历史记录

2006 年 4 月 14 日

新增内容:
  • 添加了示例 B。

2005 年 12 月 5 日

新增内容:
  • 添加了一个示例。