如何解决MySQL在NUMA架构服务器上出现的内存分配不均性能问题?

风枫姑娘_2441

风枫姑娘_2441

2026-07-18

708人浏览

原创

必须用numactl显式绑定且--interleave=all多数情况下更差;需通过numastat -p查mysqld的numa_hit(应>90%)、禁用transparent_hugepage、按负载选--membind或--interleave策略,并在systemd中配置capabilityboundingset权限。

如何解决mysql在numa架构服务器上出现的内存分配不均性能问题?

必须用 numactl 显式绑定,且默认的 --interleave=all 多数时候反而更差。

查清 mysqld 实际落在哪个 NUMA 节点上

别信 top 或 htop 显示的 CPU 占用——它们不反映内存物理归属。真正要看的是进程运行时的内存落点:

  • 运行 numastat -p $(pgrep mysqld),重点盯 Heap 行的 numa_hit:低于 90% 就说明大量 Buffer Pool 页帧在远端节点
  • numa_miss 和 numa_foreign 同时高于 5%,基本可断定线程在 Node 0 执行,但数据在 Node 1
  • 用 cat /proc/$(pgrep mysqld)/numa_maps | grep heap 看实际分配:如果出现大量 N1= 或 interleave:1,说明内存没集中

禁用 transparent_hugepage 是硬性前提

numactl --membind 对大页无效,内核会绕过绑定直接从任意节点分配 2MB 页。不关它,其他所有操作都白搭:

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 检查状态:cat /sys/kernel/mm/transparent_hugepage/enabled,若含 [always] 或 [madvise],必须改
  • 临时关闭:echo never > /sys/kernel/mm/transparent_hugepage/enabled
  • 永久生效:在 /etc/default/grub 的 GRUB_CMDLINE_LINUX 里加 transparent_hugepage=never,再 update-grub && reboot
  • 验证是否生效:grep AnonHugePages /proc/meminfo 应为 0

根据负载类型选对 numactl 绑定策略

--interleave=all 不是银弹,它只是轮询分配,不解决本地化访问问题,反而让 InnoDB 线程频繁跨节点取页:

  • 单实例高吞吐(如 OLTP 主库):numactl --cpunodebind=0 --membind=0,前提是 innodb_buffer_pool_size ≤ Node 0 可用内存 × 0.8
  • 多实例或混合负载(如备库 + ETL):numactl --interleave=all,但必须同步调大 innodb_buffer_pool_instances(建议 ≥ NUMA 节点数)
  • 绝对不要在 systemd service 里只写 ExecStart=numactl mysqld:systemd 默认禁止 CAP_SYS_NICE,会导致 Operation not permitted
  • 正确写法:ExecStart=/usr/bin/numactl --cpunodebind=0 --membind=0 /usr/sbin/mysqld $MYSQLD_OPTS,并加 CapabilityBoundingSet=CAP_SYS_NICE CAP_SYS_RESOURCE

别忽略线程亲和性与本地内存耗尽的连锁反应

即使绑定了内存,线程仍可能被调度到远端节点执行,导致“人在 Node 0,数据在 Node 0,但线程在 Node 1”:

  • 用 pidstat -t -p $(pgrep mysqld) 1 5 观察 migrate 字段,每秒迁移 >3 次就说明线程在漂移
  • 临时缓解可用 taskset -c 0-15 mysqld 强制 CPU 绑定,再配合 numactl 内存绑定
  • 若 Node 0 numa_free 接近 0 而 Node 1 还有大量空闲,Linux 可能触发隐性 swap:查 cat /proc/meminfo | grep -i "swap\|reclaim",持续增长就是信号
  • 此时需配合 echo 1 > /proc/sys/vm/zone_reclaim_mode 关闭单节点强制回收(仅在 --membind 下有效)

真正难的不是命令怎么写,而是得同时盯住 numastat 输出、numa_maps 分布、transparent_hugepage 状态和 systemd 权限配置这四件事——漏掉任何一环,优化就等于没做。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

880

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2692

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

896

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

809

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

414

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2436

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4492

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

727

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 178人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 286人学习