Sql server 几乎为空的计划缓存

Sql server 几乎为空的计划缓存,sql-server,performance,Sql Server,Performance,我遇到了一个奇怪的情况-我的计划缓存几乎是空的。我使用以下查询查看其中的内容: SELECT dec.plan_handle,qs.sql_handle, dec.usecounts, dec.refcounts, dec.objtype , dec.cacheobjtype, des.dbid, des.text,deq.query_plan FROM sys.dm_exec_cached_plans AS dec join sys.dm_exec_query_stats AS qs on

我遇到了一个奇怪的情况-我的计划缓存几乎是空的。我使用以下查询查看其中的内容:

SELECT dec.plan_handle,qs.sql_handle, dec.usecounts, dec.refcounts, dec.objtype
  , dec.cacheobjtype, des.dbid, des.text,deq.query_plan
FROM sys.dm_exec_cached_plans AS dec
join sys.dm_exec_query_stats AS qs on dec.plan_handle=qs.plan_handle
CROSS APPLY sys.dm_exec_sql_text(dec.plan_handle) AS des
CROSS APPLY sys.dm_exec_query_plan(dec.plan_handle) AS deq
WHERE cacheobjtype = N'Compiled Plan'
AND objtype IN (N'Adhoc', N'Prepared')
前一刻,它显示了82行,下一行是50行,然后是40行,然后是55行,依此类推,而一个小时后,我无法到达计划缓存的末尾,发出了相同的命令。关键是SQL Server使计划缓存非常小。 我调查的主要原因是,与没有任何高负载的基线相比,在白天的正常工作负载下,CPU高-持续65-80%

Perfmon计数器显示的计划缓存命中率值较低-约为30-50%,编译率较高-每秒2000批处理请求中有400个,CPU平均值较高-73。是什么导致这种行为

问题的主要目的是了解计划缓存为空的可能原因

内存正常-最小值:0最大值:245000

我也没有注意到任何内存压力的迹象,例如,延迟写入,空闲列表暂停,磁盘活动正常,日志没有告诉我任何事情。 我来这里是为了调查可能的原因

编辑:我也考虑过这个线程:

但这些建议/可能的原因都不相关

问题的主要目的是了解计划缓存为空的可能原因

如果是为了学习,马丁·史密斯的答案是

若你们特别想知道为什么计划会被清空,我建议你们使用扩展事件,然后在扩展事件下面试试

问题的主要目的是了解计划缓存为空的可能原因

如果是为了学习,马丁·史密斯的答案是

若你们特别想知道为什么计划会被清空,我建议你们使用扩展事件,然后在扩展事件下面试试


您应该在dba.stackexchange.com上问这个问题。您应该在dba.stackexchange.com上问这个问题。非常感谢。我一定会考虑你的意见。然而,还有其他方法吗?例如,profiler?我有SQL Server 2008 R2I刚检查了探查器,我暂时没有在探查器中看到任何事件。假设查询非常糟糕,没有缓存计划。这可能吗?这行中有什么问题吗?我假设您在问,如果查询不好,它会被缓存吗。?只有当SQL看起来合适时,查询才会被缓存。我记得读过描述这一点的确切短语,但我现在记不起来了。请阅读以下内容了解更多信息:@KumarHarshThanks。我的意思完全一样。非常感谢。我一定会考虑你的意见。然而,还有其他方法吗?例如,profiler?我有SQL Server 2008 R2I刚检查了探查器,我暂时没有在探查器中看到任何事件。假设查询非常糟糕,没有缓存计划。这可能吗?这行中有什么问题吗?我假设您在问,如果查询不好,它会被缓存吗。?只有当SQL看起来合适时,查询才会被缓存。我记得读过描述这一点的确切短语,但我现在记不起来了。请阅读以下内容了解更多信息:@KumarHarshThanks。我的意思完全一样。