- SQL Server 2008 R2 多实例集群(在 VMware vSphere 5.1 上)
- 2个节点,每个节点运行2个实例(共4个实例)
- 每个节点 16GB RAM。
实例在同一个节点上的唯一一次是在我修补另一个节点时。
Brent Ozar 的“最大服务器内存”建议是保留 Windows 4GB 或 10%,以较大者为准。
既然这是一个集群,我应该如何设置每个节点的最大内存?我应该将每个服务器视为独立服务器吗?这将确保不会浪费每个节点上的内存。但是,在节点故障中,所有 4 个实例的最大内存总量将超过单个节点的系统内存。在我们恢复第二个节点之前,这会导致时间范围内的任何问题吗?是否需要降低 4 个实例的最大内存设置,直到辅助节点恢复?或者 SQL Server 是否足够聪明以继续工作(必要时使用页面文件)。
当您处于最佳配置时,您绝对应该充分利用硬件,并在您处于维护模式时进行调整。是的,当两个(或所有四个?)实例在同一个节点上处于活动状态时,您会遇到问题。由于故障转移会在现在处于活动状态的节点上启动服务,因此您可以使用启动过程调整该事件中每个服务器的最大内存。我在这里写了一篇博客,但出于不同的原因(故障转移到具有不同内存量的节点):
基本上,您只需要检查两个实例是否在同一个节点上(这将需要在两个方向上设置链接服务器),并进行相应的调整。基于我的博客文章的一个非常快速且完全未经测试的示例,并假设目前每个节点上一次只有一个实例(如果您总共有 2 个或 4 个实例,这个问题有点模棱两可):
当然,在另一个实例上再次创建它,交换使用的链接服务器名称。
如果您必须根据是否与 1、2 或 3 个其他实例共享当前节点进行调整,这会变得更加复杂。
请注意,这将导致其他副作用,例如清除计划缓存(如果其中一个实例不只是重新启动或故障转移,在这种情况下计划缓存无论如何都是空的),但这些可以说比让这两个实例假设它们仍有 12 GB 的内存可供使用 - 如果它们都被大量使用,将会有很多颠簸。
您可能还需要考虑其他选项,例如全局 maxdop、NUMA/CPU 关联等,具体取决于系统对可用资源量的敏感程度。
社区 Wiki 答案收集了最初作为对该问题的评论而留下的部分答案
Jon Seigel:是的,它会的,但你不想那样做。我听到的最好的建议(也来自布伦特)是为最好的情况设置最大值,为最坏的情况设置最小值。
Kin:这些链接将帮助您编写脚本:
标记:请参阅动态内存管理(TechNet)
我建议将最大服务器内存设置为默认值 2147483647,这意味着 SQL Server 将动态管理内存。