并基于相同的创建扩展事件
CREATE EVENT SESSION [PerfStats_Node] ON SERVER
ADD EVENT sqlserver.query_thread_profile(
ACTION(sqlos.scheduler_id,sqlserver.database_id,sqlserver.is_system,sqlserver.plan_handle,sqlserver.query_hash_signed,sqlserver.query_plan_hash_signed,sqlserver.server_instance_name,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.sql_text))
ADD TARGET package0.event_file(SET filename=N'C:\Temp\PerfStats_Node.xel',max_file_size=(50),max_rollover_files=(2))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
然而,在查看目标文件时,我看到捕获的计划似乎是估计的,即使目标事件中出现了一些实际数字,但是当我在 sys.dm_exec_query_plan 中传递计划句柄时,出现的计划似乎有所有估计
博客上明明说会打开实际计划,那为什么我看不到呢?
我也尝试使用 SSMS 17.9,但仍然没有运气。
那篇博文中有很多信息,看起来你混淆了几个部分。
SQL Server 2014 SP2 及更高版本上可用的
query_thread_profile
XE 将实际运行时指标放在事件输出中。缓存计划只是一个普通的缓存(估计)计划。Pedro 指出您负责将执行计划节点(及其估计的行)映射到存储在扩展事件输出中的运行时统计信息的繁琐任务:
稍后在博客文章中,当讨论新版本(
query_plan_profile
和query_post_execution_plan_profile
)中可用的其他 XE 时,Pedro 提到能够获得包含“实际计划”运行时指标子集的计划。但是,这些不会存储在计划缓存中 - 它们存储在 XE 事件中。