除了清除计划缓存和(显然)更改内存设置之外,更改 Max Server Memory 还能做什么?

P H*_*man 8 performance sql-server

在 32 GB 内存和 4 个内核、60-80 个并发连接、大量临时工作负载上运行 SQL Server 2012 SP3,我们看到 SQL Server 进程 (CPU) 出现峰值,并且在不可预测的时间每天保持一两次峰值。我们正在努力确定峰值的根本原因。与此同时,我们发现改变最大内存设置(向上或向下)似乎是唯一能让 CPU 负载恢复正常的方法。

检查日志并搜索 StackExchange ( https://dba.stackexchange.com/a/183276 ),我们看到计划缓存正在通过更改最大内存设置进行刷新。但是,如果我们通过 DBCC FREESYSTEMCACHE('SQL Plans') 刷新计划缓存,则 CPU 负载不会恢复正常。

由于无论天气如何增加或减少它,更改最大内存设置都可以解决问题,因此该问题似乎与最大服务器内存设置没有直接关系。因此,我们试图了解更改内存设置还有什么作用,然后使用该信息来帮助确定 CPU 峰值的根本原因。

Sql*_*ide 3

参考:服务器内存服务器配置选项

max server memory控制 SQL Server 内存分配,包括(本质上是 sys.dm_os_memory_clerks 中找到的任何内存管理员):

  • 缓冲池
  • 编译内存
  • 所有缓存
  • qe 内存授予
  • 锁管理器内存
  • 清除内存

因此,所有这些组件都会受到max server memory设置更改的影响。

顺便说一句,要找到导致 CPU 峰值的原因,这将是一条非常困难的途径。我建议您使用以下文章来进行故障排除。

  1. SQL Server CPU 性能问题故障排除作者:Joe Sack
  2. 如何找出是什么在影响我的 SQL Server?