sys.dm_os_tasks (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
为 SQL Server 实例中处于活动状态的每个任务返回一行。 任务是 SQL Server 中执行的基本单元。 任务的示例包括查询、登录、注销和系统任务,例如虚影清理活动、检查点活动、日志编写器、并行重做活动。 有关任务的详细信息,请参阅 “线程和任务体系结构指南”。
注意
若要从 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 数据库“基本”、“S0”和“S1”服务目标中,对于“弹性池”中的数据库,服务器管理员帐户、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