inf*_*ent 3 sql-server clustering sql-server-2008-r2 configuration cpu
我有一个带有被动节点和主动节点的 SQL Server 2008 R2 故障转移群集。服务器在物理上是相同的。我有两个 SQL Server 实例,一个设置为使用前 3 个 NUMA 节点中的所有 CPU,另一个设置为使用第 4 个 NUMA 节点中的所有 CPU。
这似乎工作正常,即使发生故障转移,但这是一个坏主意吗?
如果无源服务器没有那么多处理器,故障转移会发生什么?
我不会说这是一个坏主意,但它总是不希望触及sql server 上的 CPU 亲和性,除非您确定问题是由于过度的上下文切换造成的(这也可能不是实际问题,而只是一种症状)。
这似乎工作正常,即使发生故障转移,但这是一个坏主意吗?
强制关联意味着您剥夺了 sql server 在调度程序之间移动进程的能力。
考虑以下示例:(使用来自 sysinternals 的 coreinfo)在 2 插槽、12 个 CPU(启用超线程的 24 个逻辑 CPU)和 2 个 NUMA 节点机器上,我们每个 NUMA 节点获得 12 个 CPU。
Logical to Physical Processor Map:
**---------------------- Physical Processor 0 (Hyperthreaded)
--**-------------------- Physical Processor 1 (Hyperthreaded)
----**------------------ Physical Processor 2 (Hyperthreaded)
------**---------------- Physical Processor 3 (Hyperthreaded)
--------**-------------- Physical Processor 4 (Hyperthreaded)
----------**------------ Physical Processor 5 (Hyperthreaded)
------------**---------- Physical Processor 6 (Hyperthreaded)
--------------**-------- Physical Processor 7 (Hyperthreaded)
----------------**------ Physical Processor 8 (Hyperthreaded)
------------------**---- Physical Processor 9 (Hyperthreaded)
--------------------**-- Physical Processor 10 (Hyperthreaded)
----------------------** Physical Processor 11 (Hyperthreaded)
Logical Processor to Socket Map:
************------------ Socket 0
------------************ Socket 1
Logical Processor to NUMA Node Map:
************------------ NUMA Node 0
------------************ NUMA Node 1
Run Code Online (Sandbox Code Playgroud)
请记住,调度程序不绑定到内核,SQL Server 执行自己的线程调度。出于某种原因,如果一个非 SQL 进程最大化 CPU 1,它在调度程序 1 上运行一个线程,那么 SQL Server 有能力将该调度程序放到任何可用的 CPU 上,例如 CPU 4。SQL Server 有自己的负载平衡器,它将移动从一个 CPU 到另一个 CPU 的线程。
如果您设置了处理器关联,那么您将从 sql server 中删除切换调度程序的能力。所以调度器 1 绑定到 CPU 1,它只能在那里运行。
一些摘自我的图书馆...
来自 SQL Server Professional Internals and Troubleshooting Book :
软 NUMA 的一个常见用途是当 SQL Server 托管一个应用程序时,该应用程序具有多个不同的用户组,这些用户组具有非常不同的查询要求。在为软 NUMA 配置理论上的 16 处理器服务器后,将 2 × 4 CPU 节点和一个 8 CPU 节点分配给第三个 NUMA 节点,您接下来会做什么?确定三个节点到不同端口的连接亲和性,然后更改每个工作负载类别的连接设置,使工作负载 A“亲和”到端口 x,端口 x 连接到第一个 NUMA 节点;工作负载 B 是 af?尼化到端口 y,该端口连接到第二个 NUMA 节点,并且所有其他工作负载都是 af?nitized 到端口 z,该端口设置为连接到第三个 NUMA 节点。
来自 Microsoft SQL Server 2008 Internals 书:
在某些情况下,您可能希望限制可用 CPU 的数量,但不想将特定调度程序绑定到单个 CPU — 例如,如果您使用多 CPU 机器进行服务器整合。假设您有一台 64 处理器的计算机,在该计算机上运行八个 SQL Server 实例,并且您希望每个实例使用八个处理器。每个实例都有不同的af?nity 掩码指定了 64 个处理器的不同子集,所以您可能有 af?nity 掩码值 255 (0xFF)、65280 (0xFF00)、16711680 (0xFF0000) 和 4278190080 (0xFF000000)。因为af?设置 nity 掩码,每个实例都将调度程序硬绑定到 CPU。如果您想限制 CPU 的数量但仍不限制特定调度程序在特定 CPU 上运行,您可以使用以下命令启动 SQL Server跟踪标记 8002。这允许您将 CPU 映射到实例,但在实例内,调度程序不绑定到 CPU。
如果要限制 SQL 实例在服务器上使用的 CPU,请改用Windows 系统资源管理器。
由于总是测试,测试和测试你的整个工作量以避免任何严重的性能问题,如果你决定使用“CPU亲和力”。
建议:将其保留为默认值 - 如果您弄错了,事情会更糟,故障排除会更加困难!
如果无源服务器没有那么多处理器,故障转移会发生什么?
参考 :
| 归档时间: |
|
| 查看次数: |
4148 次 |
| 最近记录: |