sys.dm_os_tasks (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

为 SQL Server 实例中处于活动状态的每个任务返回一行。 任务是 SQL Server 中执行的基本单元。 任务示例包括查询、登录、注销和系统任务,如虚影清理活动、检查point 活动、日志编写器、并行重做活动。 有关任务的详细信息,请参阅 “线程和任务体系结构指南”。

注意

若要从 Azure Synapse Analytics 或 Analytics 平台系统(PDW)调用此名称,请使用名称 sys.dm_pdw_nodes_os_tasks。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。

列名称 数据类型 描述
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 (Transact-SQL)
session_id smallint 与任务关联的会话 ID。
exec_context_id int 与任务关联的执行上下文 ID。
request_id int 此任务的请求的 ID。 有关详细信息,请参阅 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) 作为该对象的父对象的任务的内存地址。
pdw_node_id int 适用于:Azure Synapse Analytics、Analytics Platform System (PDW)

此分发所在节点的标识符。

权限

对于 SQL Server 和 SQL 托管实例,需要 VIEW SERVER STATE 权限。

在SQL 数据库基本、S0S1 服务目标以及弹性池中的数据库、服务器管理员帐户、Microsoft Entra 管理员帐户或服务器角色的成员##MS_ServerStateReader##身份是必需的。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE 权限或 ##MS_ServerStateReader## 服务器角色中的成员身份。

SQL Server 2022 及更高版本的权限

要求对服务器具有 VIEW SERVER PERFORMANCE 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. 使会话 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 操作系统相关的动态管理视图 (Transact-SQL)
线程和任务体系结构指南