香港云主机 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: 0 和 mem 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)
本文由 云数方舟 技术团队原创发布,转载请注明出处。