AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 50433
Accepted
SomeGuy
SomeGuy
Asked: 2013-09-25 08:52:23 +0800 CST2013-09-25 08:52:23 +0800 CST 2013-09-25 08:52:23 +0800 CST

多实例 SQL Server 2008 R2 集群上的最大内存设置

  • 772
  • SQL Server 2008 R2 多实例集群(在 VMware vSphere 5.1 上)
  • 2个节点,每个节点运行2个实例(共4个实例)
  • 每个节点 16GB RAM。

实例在同一个节点上的唯一一次是在我修补另一个节点时。

Brent Ozar 的“最大服务器内存”建议是保留 Windows 4GB 或 10%,以较大者为准。

既然这是一个集群,我应该如何设置每个节点的最大内存?我应该将每个服务器视为独立服务器吗?这将确保不会浪费每个节点上的内存。但是,在节点故障中,所有 4 个实例的最大内存总量将超过单个节点的系统内存。在我们恢复第二个节点之前,这会导致时间范围内的任何问题吗?是否需要降低 4 个实例的最大内存设置,直到辅助节点恢复?或者 SQL Server 是否足够聪明以继续工作(必要时使用页面文件)。

sql-server memory
  • 3 3 个回答
  • 5384 Views

3 个回答

  • Voted
  1. Best Answer
    Aaron Bertrand
    2013-09-25T12:16:17+08:002013-09-25T12:16:17+08:00

    当您处于最佳配置时,您绝对应该充分利用硬件,并在您处于维护模式时进行调整。是的,当两个(或所有四个?)实例在同一个节点上处于活动状态时,您会遇到问题。由于故障转移会在现在处于活动状态的节点上启动服务,因此您可以使用启动过程调整该事件中每个服务器的最大内存。我在这里写了一篇博客,但出于不同的原因(故障转移到具有不同内存量的节点):

    • https://sqlblog.org/2009/09/18/managing-multi-instance-cluster-failovers-with-different-hardware

    基本上,您只需要检查两个实例是否在同一个节点上(这将需要在两个方向上设置链接服务器),并进行相应的调整。基于我的博客文章的一个非常快速且完全未经测试的示例,并假设目前每个节点上一次只有一个实例(如果您总共有 2 个或 4 个实例,这个问题有点模棱两可):

    CREATE PROCEDURE dbo.OptimizeInstanceMemory
    AS
    BEGIN
       SET NOCOUNT ON;
    
       DECLARE
         @thisNode      NVARCHAR(255) = CONVERT(NVARCHAR(255),
                                      SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
         @otherNode     NVARCHAR(255),
         @optimalMemory INT = 12288, -- 12 GB
         @sql           NVARCHAR(MAX);
    
      SET @sql = N'SELECT @OtherNode = CONVERT(NVARCHAR(255), 
                            SERVERPROPERTY(N''ComputerNamePhysicalNetBIOS''));';
    
      EXEC [SERVER\INSTANCE].master..sp_executesql @sql, 
        N'@OtherNode NVARCHAR(255) OUTPUT', @OtherNode OUTPUT;
    
      IF @thisNode = @otherNode
      BEGIN -- we're on the same node, let's make everyone happy
        SET @optimalMemory = 6144;
      END
    
      SET @sql = N'EXEC sp_configure N''max server memory'', @om;
        RECONFIGURE WITH OVERRIDE;';
    
      EXEC                   master..sp_executesql @sql, N'@om INT', @optimalMemory;
      EXEC [SERVER\INSTANCE].master..sp_executesql @sql, N'@om INT', @optimalMemory;
    END
    GO
    
    EXEC [master].dbo.sp_procoption 
      N'dbo.OptimizeInstanceMemory', 'startup', 'true';
    

    当然,在另一个实例上再次创建它,交换使用的链接服务器名称。

    如果您必须根据是否与 1、2 或 3 个其他实例共享当前节点进行调整,这会变得更加复杂。

    请注意,这将导致其他副作用,例如清除计划缓存(如果其中一个实例不只是重新启动或故障转移,在这种情况下计划缓存无论如何都是空的),但这些可以说比让这两个实例假设它们仍有 12 GB 的内存可供使用 - 如果它们都被大量使用,将会有很多颠簸。

    您可能还需要考虑其他选项,例如全局 maxdop、NUMA/CPU 关联等,具体取决于系统对可用资源量的敏感程度。

    • 10
  2. Paul White
    2016-09-10T10:35:29+08:002016-09-10T10:35:29+08:00

    社区 Wiki 答案收集了最初作为对该问题的评论而留下的部分答案


    ...(必要时使用页面文件)。

    Jon Seigel:是的,它会的,但你不想那样做。我听到的最好的建议(也来自布伦特)是为最好的情况设置最大值,为最坏的情况设置最小值。

    Kin:这些链接将帮助您编写脚本:

    • 故障转移群集中的 SQL Server 资源重新平衡
    • SQL Server 2008 和 R2 群集最佳实践
    • 使用 PowerShell 脚本来平衡内存

    标记:请参阅动态内存管理(TechNet)

    • 2
  3. Mark
    2016-09-10T07:24:12+08:002016-09-10T07:24:12+08:00

    我建议将最大服务器内存设置为默认值 2147483647,这意味着 SQL Server 将动态管理内存。

    • -5

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve