当查询正在执行时,监控实时查询过程。这个动态性能视图,可以确定查询的哪个部分运行的慢。
具体的用法:
1、开启跟踪
SET STATISTICS PROFILE ON;
GO
2、在一个会话中运行一个sql
注意,这个sql是写法有问题的,是笛卡尔积,会产生大量垃圾数据。
select *
from [dbo].t1
cross join t1 t2
3、监控
SELECT node_id,
physical_operator_name 物理操作符,
SUM(row_count) 这个操作返回的行数,
SUM(estimate_row_count) AS 估计行数,
CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count) [行数占估计行数%]
FROM sys.dm_exec_query_profiles
WHERE session_id=52
GROUP BY node_id,physical_operator_name
ORDER BY node_id;
下图是返回的结果,而且每次查询都会变化,特别是“这个操作返回的行数”,一开始很小,随着查询一直在运行,返回的行数会越来越多。
通过这个profile,我们可以实时跟踪执行计划中的操作,都返回了多少行,把这个行数和实际的行数对比,来判断执行计划是否正确合理。