目录标题
SQL Server 启动日志,已经透露出 NUMA 和 CPU 使用异常的明显信号,我们可以据此进一步确认和解决。
✅ 核心问题定位
从日志中最关键的一段是:
Node configuration: node 4: CPU mask: 0x0000000000555555:1 Active CPU mask: 0x0000000000000000:1.
Node configuration: node 5: CPU mask: 0x0000555555000000:1 Active CPU mask: 0x0000000000000000:1.
Node configuration: node 6: CPU mask: 0x0000000000aaaaaa:1 Active CPU mask: 0x0000000000000000:1.
Node configuration: node 7: CPU mask: 0x0000aaaaaa000000:1 Active CPU mask: 0x0000000000000000:1.
❗注意:这些节点的
Active CPU mask都是0x0000000000000000,意味着:
➤ SQL Server 在 NUMA Node 4~7 上发现 CPU,但没有启用任何核心,等于不能调度任务!
🎯 问题核心:SQL Server on Linux 在多 NUMA 架构下,未能正确识别或绑定 CPU
这通常发生于:
- 容器被 cgroup 限制了 CPU 核心(比如
cpuset-cpus限定了一部分核心); - Kubernetes 中设置了 CPU 请求/上限,但未正确映射到 SQLPAL 内核层;
- 系统 NUMA 配置异常,导致 CPU mask 在 MSSQL 中不可用;
- 部分核心为“isolated”或关闭(如 BIOS 设置),系统层可见但 MSSQL 无法使用。
✅ 诊断与修复建议
🔍 1. 确认当前系统可用 NUMA 配置
numactl --hardware
查看结果类似:
available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3 4 5
node 1 cpus: 6 7 8 9 10 11
...
如果你看到 Node 4~7,是不是被 BIOS 设置成了一种 dummy NUMA 节点(如 Intel Sub-NUMA Clustering)?
🔍 2. 查看容器内是否绑定了 CPU 核心
cat /sys/fs/cgroup/cpuset/cpuset.cpus
如果这里限制了 MSSQL 容器只能用部分 CPU(例如 0-3),那就会导致其他 NUMA 节点的 CPU 不可用。
✅ 解决方式一:显式绑定 MSSQL 到一个正常的 NUMA Node
你可以用 numactl 来强制绑定:
numactl --cpunodebind=0 --membind=0 /opt/mssql/bin/sqlservr
这会强制 SQL Server 使用 NUMA Node 0 的 CPU 和内存。
✅ 解决方式二:调整容器配置,释放 NUMA mask 绑定限制
如果你用 Docker:
确保没有使用 --cpuset-cpus="x-y" 限制 CPU,同时放宽限制:
docker run --memory="16g" --cpus="8" ... mssql
如果你用 Kubernetes:
调整容器的资源限制为:
resources:
requests:
cpu: "4"
memory: "8Gi"
limits:
cpu: "8"
memory: "16Gi"
✅ 解决方式三(长期建议):在 MSSQL 配置文件中禁用 NUMA 自动分配
编辑或新增配置 /var/opt/mssql/mssql.conf:
[fabric]
numa_optimized = false
然后重启 SQL Server:
systemctl restart mssql-server
这个设置可能在某些版本中不生效,但对 NUMA 兼容性较差的平台会有帮助。
🔧 附加建议:强烈推荐为 NUMA 问题添加启动诊断日志级别
临时加启动参数:
/opt/mssql/bin/sqlservr -m -d -T845
其中 -T845 是启用 NUMA 分区/分配的跟踪标志。
✅ 总结
| 检查项 | 当前情况 | 建议 |
|---|---|---|
| NUMA Node | 多个 node(4~7),但 Active CPU mask 为 0 | ➤ 错误或无效 NUMA 绑定 |
| cgroup 限制 | 可能限制了 CPU | ➤ 检查 cpuset 和 limits |
| 修复方式 | numactl 强制绑定,调整容器资源限制 | ✅ 推荐 |
| MSSQL 配置 | 可以尝试禁用 NUMA 优化 | 可做为兼容方案 |

2053

被折叠的 条评论
为什么被折叠?



