最大和最小内存设置

最大和最小内存设置

一个故障转移群集有 2 个节点,每个节点有 64GB RAM:- 节点 A 和节点 B。节点 A 运行 2 个 SQL 实例 (SQL1 和 SQL2)。节点 B 运行 1 个 SQL 实例 (SQL3)。

SQL1 has a max server setting of 30,720MB and min server setting of 1024MB.
SQL2 has a max server setting of 8192 MB and Min server setting of 1024 MB.
SQL3 doesn’t have any min & max settings.

经过跟踪Available mbytetarget server memorytotal server memory从 perfmon 中,我收集到以下信息:-

SQL1:- Available MByte: 26GB, Target Server Memory: 30GB, Total Server Memory: 29.8GB
SQL2:- Available MByte: 24GB, Target Server Memory: 8GB, Total Server Memory: 7GB
SQL3:- Available MByte: 58GB, Target Server Memory: 54GB, Total Server Memory: 1GB

请注意,这是主动/主动故障转移群集。我的问题是如何设置最大和最小内存?这是带有 SQL 2008 R2 实例的 64 位 Win2k8 R2 服务器。我已经计算并达到了 7GB,用于操作系统、工作线程、多页和其他应用程序。但是,我需要弄清楚如何平衡 SQL 实例的最小和最大内存设置。我如何知道每个实例所需的内存?设置最小值的最佳做法是什么?请帮忙。

有人已经在实例上设置了这个最大值和最小值,我认为这在 HA 场景中不会准确。因此,我需要调整它,并需要您就如何调整它提供意见。或者,我如何确定哪个实例需要这么多 RAM 左右。我想简而言之,我如何确定每个实例的内存利用率。

答案1

您需要设置最小值以便能够适应完全故障转移,否则您的 HA 方案将无法工作。我对 SQL 了解不多,但我很确定 MS 仅支持 SQL 的主动/主动 HA,而不是负载共享。

答案2

这里没有太多的信息可供参考,例如,SQL 数据库在做什么以及为什么集群处于主动/主动状态。

我只能从上述细节推断:

  • 节点 1 正在运行两个“低优先级”数据库(SQL1/SQL2)
  • 节点 2 正在运行更重要的数据库 (SQL3),该数据库需要专用 CPU / RAM,并且您希望对其进行故障转移(至节点 1)
  • 您拥有当前不受磁盘 IO 限制的共享存储(即,所使用的 CPU 不是因为它正在等待缓冲区被填满)
  • 你已经完成了所有常见的性能瓶颈检查

在故障转移系统上,您只有 18GB 的​​ RAM 可用于 SQL3。SQL3 如何在不到常规 RAM 的 1/3 的条件下运行?“目标大小”表明它需要大量 RAM。

答案3

最小和最大服务器内存选项告诉 SQL Server 应分配多少缓冲区内存。我在构建 SQL 集群的笔记中提到了这一点,显然它来自 MSDN这里

在负载下检查 SQLServer:Buffer Manager 性能对象,并记下 Stolen pages 和 Reserved pages 计数器的当前值。这些计数器将内存报告为 8K 页数。最大服务器内存应设置为高于这两个值的总和,以避免内存不足错误。最低合理最大服务器内存设置的近似值(以 MB 为单位)为 ([Stolen pages] + [Reserved pages])/ 100。

当您发现 1 个节点上没有足够的 RAM 让每个人都满意最小服务器内存时,棘手的部分就来了。现在,您必须选择您最不喜欢的实例并让它受苦,或者分担痛苦并选择几个来受苦。

“最小服务器内存”定义 SQL 停止动态释放内存的限制。此设置通常是不必要的。它不能保证至少为 SQL Server 分配这么多内存。当 SQL Server 启动时,它会提交所需的内存,即使该内存小于“最小服务器内存”限制。随着缓存的数据页和查询计划越来越多,SQL 提交的内存也会增加。当提交的内存增加到“最小服务器内存”限制以上时,SQL 可以根据需要释放页面(降至该限制),以将最小可用物理内存保持在 10 MB 左右

相关内容