新上8卡RTX 5090 限时特惠 Read more

香港云主机 AMD EPYC 的 NUMA 绑定:MySQL 单实例怎么绑到同一个 CCD 上 - 云数方舟

香港云主机 AMD EPYC 的 NUMA 绑定:MySQL 单实例怎么绑到同一个 CCD 上

香港云主机(AMD EPYC 7742/7H12)上跑 MySQL 单实例时,如果不做 NUMA 绑定,操作系统可能把 MySQL 的线程调度到不同的 CCD(Core Complex Die)上,导致跨 CCD 内存访问延迟增加 20-30%。下面教你用 numactl 把 MySQL 绑到同一个 CCD。

第一步:查看 NUMA 拓扑。执行:
numactl --hardware
输出类似:

available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16384 MB
node 1 cpus: 8 9 10 11 12 13 14 15
node 1 size: 16384 MB

这里显示 2 个 NUMA 节点,每个节点 8 个 CPU。在 EPYC 架构中,每个 NUMA 节点通常对应一个 CCD(实际更复杂,但 VPS 层面通常如此)。

第二步:绑定 MySQL 到单个 NUMA 节点。编辑 MySQL 的 systemd 服务文件或启动脚本:
numactl --cpunodebind=0 --membind=0 /usr/sbin/mysqld --daemonize
--cpunodebind=0:MySQL 的线程只在 NUMA 节点 0 的 CPU 上运行。
--membind=0:MySQL 的内存分配只在 NUMA 节点 0 的内存上。
这样 MySQL 的所有操作都在同一个 CCD 内完成,避免跨 CCD 的内存访问延迟。

第三步:验证绑定。执行:
numactl --show
应显示 cpu bind: 0mem bind: 0。同时用 htop 观察,MySQL 线程应只在 CPU 0-7 上运行。

配置跨 NUMA 访问延迟MySQL QPS建议
不绑定(默认)100ns+(跨 CCD)基准不推荐
绑定单 NUMA< 80ns(同 CCD)+15-25%强烈推荐
绑定 + innodb_numa_interleave取决于配置+20-30%MySQL 8.0+ 可用

行动建议。对于 香港云主机 上的 MySQL 单实例,NUMA 绑定是最简单的性能优化手段之一。如果 MySQL 版本 ≥ 8.0,还可以在 my.cnf 中设置 innodb_numa_interleave=ON,让 InnoDB 缓冲池跨 NUMA 节点交错分配(适合大内存实例)。对于多实例部署(如 2 个 MySQL 实例),可以分别绑定到不同 NUMA 节点:实例 A 绑 node 0,实例 B 绑 node 1,互不干扰。记住:NUMA 绑定的本质是”让数据走最短的路”,在 EPYC 的多 CCD 架构下,这条路能快 20% 以上。


📌 查看云数方舟香港云主机方案:
云数方舟官网香港云主机(AMD EPYC)

本文由 云数方舟 技术团队原创发布,转载请注明出处。

云数方舟
  • 3216651636
  • support@yunark.cn