每隔几分钟到大约一小时,进程缓存就会被刷新(但不是完全!)。如果我运行:
SELECT count (*) FROM sys.dm_exec_cached_plans
Run Code Online (Sandbox Code Playgroud)
……刚刚清零之后,计划的数量下降到几百个,然后逐渐增加到大约2000个,然后再次清零,依此类推。
服务器在 VMWare 上运行,它有128 GB的 RAM(SQL Server 最大服务器内存设置为102 GB,最小服务器内存设置为72 GB)。根据 SentryOne 的输出,我可以看到缓冲池消耗了~61 GB。我没有看到任何内存压力指标。
我还观察到,当我将最小服务器内存减少到 16 GB 时,进程缓存清除的频率急剧增加。
我的SQL Server版本如下:
Microsoft SQL Server 2016 (SP1-CU3) (KB4019916) - 13.0.4435.0 (X64)
Run Code Online (Sandbox Code Playgroud)
还有什么:
我怀疑 VMWare 可能在这里扮演了一些角色,但是当我检查来宾端可用的 perfmon 计数器时,我没有发现任何可疑的东西。
**Priority 10: Performance**:
- Query Store Disabled - The new SQL Server 2016 Query Store …
Run Code Online (Sandbox Code Playgroud)