我已经学会了一些诊断 SQL Server 上 RAM 不足的好方法,我想知道是否应该将计划缓存添加到这个工具箱中。
RAM 不足的一个迹象是计划缓存的寿命不长。您可以轻松地在其中找到最旧的缓存计划sys.dm_exec_query_stats
,并且可以从中找到计划缓存使用了多少 RAM SELECT * FROM sys.dm_os_memory_clerks WHERE TYPE = 'CACHESTORE_SQLCP'
。其中任何一个都可以转化为有关缺乏 RAM 的系统的可操作信息吗?
我怀疑这两种观点都没有提供有用的指标。如果我的服务器内存的 2% 或 20% 被计划缓存占用了,那又怎样?同样,如果我最旧的缓存计划是一个月前的,那又怎样?据我所知,这可能只是一个非常常用的计划。
答案是否定的
Update Statistics
,计划可以在结束时失效Index Rebuild
,例如在我的服务器上,Ola Hallengren 的索引重建/更新统计数据(代码足够聪明,可以只重建那些真正需要它的索引)每天晚上都会使计划失效,这样在早上我只有几个计划,下午计划缓存很大,但它无法让您了解我的 RAM。通过这种方式,您可以衡量每个数据库的计划,尝试比较繁忙的 OLTP 服务器上重建/更新统计信息之前和之后的结果
这里可以看到计划重新编译的原因