了解 sys.dm_exec_query_stats execution_count vs creation_time

Mar*_*son 5 performance sql-server dmv sql-server-2012 performance-tuning

我刚刚下载了 SQL Server 2012 'Performance Dashboard Reports',并且在解释其中一个结果显示的数据并将其链接回 DMV 时遇到了一些问题sys.dm_exec_query_stats

根据 CPU 报告,我执行最差的查询是已运行约 27K 次的插入语句。

当我使用query_hashfor 查询并将其放入下面的查询中时,我得到 62 个结果,每个结果都相同query_hashquery_plan_hash但具有不同的plan_handle值。

SELECT * FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS dest
WHERE query_hash = 0x1561B563078359C1
Run Code Online (Sandbox Code Playgroud)

根据BOLexecution_count显示:

自上次编译计划以来执行的次数。

creation_time显示

编制计划的时间。

我 99.9% 确定查询每 5 分钟运行一次,但结果集中的每个查询都有creation_time今天早上的计划,但每个查询都execution_count显示约 400。

SQL Server 如何确定这个数字?这些数字是通过某种方式联系起来的plan_hash还是每个人都是独一无二的plan_handle

小智 5

sys.dm_exec_query_stats 返回计划的汇总统计信息,但每个查询都有一行。

因此,如果一个过程有 2 个查询,sys.dm_exec_query_stats则将返回 2 行,但与计划相关的列(例如编译时间、执行计数等)是计划级别的统计信息,无法进一步聚合。