我有一个问题想更好地理解 NUMA 节点在 SQL Server 中的帮助:
在我们当前的设置中,我们有 4 个 NUMA 节点,具有 20 个内核并启用了超线程,总共有 40 个逻辑处理器。使用 400 GB 的内存,每个 NUMA 获得 100 GB。
它是在 Windows 2012 R2 Standard 上具有 SQL Server 2012 Enterprise(基于核心的许可)的物理服务器。它有 4 个插槽,每个插槽有 10 个内核,每个插槽有 20 个逻辑处理器,从我看到的错误日志中总共有 80 个。
我的理解是,如果我们使用相同数量的 NUMA(而不是我更喜欢 2 个 NUMA)移动(未来 SQL 刷新到 2017/19),可能有 4 个 NUMA 节点可能不会表现更好。
为什么我这么说是因为我认为 2 NUMA 400 GB 将被分配为每个 200 GB。
因此,我的理解是,根据查询在节点之间切换内存的方式来进行配置可能会更好或最好。是的,我们看到了一些内存问题,我知道我们正在处理其他相关问题,但这个问题更具体到为 SQL Server 设置的 NUMA。
有人可以分享他们的经验,或者提供更多的见解,因为我可能在这里认为错误的信念查询与 4 NUMA 相比,在 2 NUMA 上的交换必须更少?
有没有办法或查询我可以检查查询是否花费时间在两个不同的 NUMA 上交换内存并且可能是一个问题?
有没有一种方法可以衡量两个节点在未来的设计(跨节点内存访问)中是否比四个节点工作得更好?
好的。这个盒子上的内存被分成 4 个独立的节点,每个节点都连接到一个插槽。SQL Server 将跨所有套接字使用内存,并且由于大部分 SQL Server 内存用于缓存数据库页面和查询计划,因此将有大量的跨节点内存访问。没关系。查询内存授予将在本地节点上分配给运行任务的工作人员。
SQL Server 为每个 NUMA 节点分配了多个资源,对于 SQL Server 2016+,将使用Automatic Soft-NUMA功能自动细分大型 NUMA 节点。
因此,一方面您对服务器内存的物理配置无能为力,另一方面您无需做任何事情,因为 SQL Server 会自动配置自己以最有效地使用 NUMA 节点。
基本上节点越少越好,但是可以在单个 NUMA 节点上放置多少内核和多少 RAM 是有限制的。
大多数跨 NUMA 节点的内存访问应该在缓冲池中,您可以使用性能计数器对其进行跟踪:
SQL Server: Buffer Node Remote Note page lookups/sec 表示来自该节点且其他节点已满足的查询请求数。