sys.dm_exec_query_profiles (Transact-SQL)

正执行查询时监视实时查询进度。 计数器基于每个运算符和每个线程。 当查询完成后,所收集的数据将序列化为 SHOWPLAN XML。 可使用此 DMV 监视查询执行的进度和确定查询使用最多时间的位置。 可使用说明字段中标识的列,将此 DMV 与其他系统 DMV 相联接。 可使用时间戳列,将此 DMV 与其他性能计数器(如性能监视器 xperf)相联接。

重要说明重要提示

要返回信息,必须设置 SET STATISTICS PROFILE ON; 或 SET STATISTICS XML ON;。

适用范围:SQL Server(SQL Server 2014 到当前版本)。

返回的表

列名

数据类型

说明

session_id

smallint

标识运行此查询的会话。 引用 dm_exec_sessions.session_id。

request_id

int

确定目标请求。 引用 dm_exec_sessions.request_id。

sql_handle

varbinary(64)

确定目标查询。 引用 dm_exec_query_stats.sql_handle。

plan_handle

varbinary(64)

确定目标查询(引用 dm_exec_query_stats.plan_handle)。

physical_operator_name

nvarchar(256)

物理运算符类型名称。

node_id

int

标识查询树中的运算符节点。

thread_id

int

区分属于同一个查询运算符节点的线程(针对并行查询)。

task_address

varbinary(8)

确定此线程正在使用的 SQLOS 任务。 引用 dm_os_tasks.task_address。

row_count

bigint

运算符迄今返回的行数。

rewind_count

bigint

迄今为止的重绕数。

rebind_count

bigint

迄今为止的重新绑定数。

end_of_scan_count

bigint

迄今为止的扫描结束次数。

first_active_time

bigint

首次调用构造函数的时间(毫秒)。

estimate_row_count

bigint

估计的行数。 可用于将 estimated_row_count 与实际 row_count 进行比较。

last_active_time

bigint

上次调用构造函数的时间(毫秒)。

open_time

bigint

目标节点的操作(例如 open/close/getrow)迄今为止累积的总 CPU 时间(毫秒)。

first_row_time

bigint

打开时的时间戳(毫秒)。

last_row_time

bigint

获取第一行时的时间戳(毫秒)。

close_time

bigint

关闭时的时间戳(毫秒)。

elapsed_time_ms

bigint

迄今为止,看到节点处于执行状态的最新时间。

cpu_time_ms

bigint

目标节点的操作(例如 open/close/getrow)迄今为止累积的总占用时间(毫秒)。

database_id

smallint

打开其行集的数据库。

object_id

int

打开其行集的表。

index_id

int

打开其行级的索引(如果有)。

scan_count

bigint

迄今为止的表/索引扫描数。

logical_read_count

bigint

迄今为止的逻辑读取数。

physical_read_count

bigint

迄今为止的物理读取数。

read_ahead_count

bigint

迄今为止的预读数。

write_page_count

bigint

迄今为止由于溢出而导致的页写入数。

lob_scan_count

bigint

迄今为止的 LOB 表/索引扫描数。

lob_logical_read_count

bigint

迄今为止的 LOB 逻辑读取数。

lob_physical_read_count

bigint

迄今为止的 LOB 物理读取数。

lob-read_ahead_count

bigint

迄今为止的 LOB 预读数。

segment_read_count

int

迄今为止的段预读数。

segment_skip_count

int

迄今为止跳过的段数。

注释

这些 ID 列是此 DMV 的主键以及将此 DMV 与其他 DMV 关联的外键。 计数器粗略可分为两类:一类是累积计数器(如 row_count、elapsed_time_ms),第二类是时间戳。 时间戳标记特定事件发生的时间,可用来将这些事件与 SQL Server 外部的数据相关联。 此类数据的示例有 perfmon、XPerf 等。

计数器提供数据的粒度比 SET STATISTICS IO ON 更精细,因为这些计数器是按每个迭代器和每个线程来计数的。 线程的总和应等于原始 STATISTICS IO 结果的总数。 如果节点没有 IO 计数器,则 SE 字段将为 NULL。

权限

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

关系基数

sys.dm_exec_query_profiles.session_id

sys.dm_exec_sessions.session_id

一对一

sys.dm_exec_query_profiles.request_id

sys.dm_exec_sessions.request_id

多对一

sys.dm_exec_query_profiles.sql_handle

sys.dm_exec_query_stats.sql_handle

多对一

sys.dm_exec_query_profiles.plan_handle

ys.dm_exec_query_stats.plan_handle

多对一

sys.dm_exec_query_profiles.task_address

sys.dm_os_tasks.task_address

多对一

sys.dm_exec_query_profiles.database_id

sys.databases.database_id

多对一

sys.dm_exec_query_profiles.object_id

sys.objects.object_id

多对一

sys.dm_exec_query_profiles.index_id

sys.indexes.index_id

多对一

示例

以下语句返回有关查询运算符的信息。

SET STATISTICS PROFILE ON;
GO

SELECT  
       node_id,physical_operator_name, SUM(row_count) row_count, SUM(estimate_row_count) AS estimate_row_count, 
   CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)
FROM sys.dm_exec_query_profiles 
WHERE session_id=54
GROUP BY node_id,physical_operator_name
ORDER BY node_id;

请参阅

参考

动态管理视图和函数 (Transact-SQL)

与执行有关的动态管理视图和函数 (Transact-SQL)