作者:孙祚龙
爱可生南区交付服务部团队 DBA,负责客户 MySQL 的故障处理以及我司数据库集群管理平台 DMP 的日常运维。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
背景
该问题来自于在给客户部署 MySQL 前进行服务器环境配置时,涉及到服务器配置项关闭 numa,客户对此配置项的必要性产生了疑虑。针对这一疑虑,进行了以下关于 numa 的研究。
一、NUMA 简介
NUMA(Non-Uniform Memory Access,非一致性内存访问)
NUMA 服务器的基本特征是 Linux 将系统的硬件资源划分为多个软件抽象,称为节点(Node),每个节点上有单独的 CPU、内存和 I/O 槽口等。CPU 访问自身 Node 内存的速度将远远高于访问远地内存(系统内其它节点的内存)的速度,这也是非一致内存访问 NUMA 的由来。
二、NUMA 与 MySQL 分析
NUMA 的 4 种内存分配策略:
-
缺省(default):总是在本地节点分配(当前进程运行的节点上)
-
绑定(bind):强制分配到指定节点上
-
交叉(interleavel):在所有节点或者指定节点上交叉分配内存
-
优先(preferred):在指定节点上分配,失败则在其他节点上分配
NUMA 的内存分配策略对于进程来说,并不是乐观的。因为 NUMA 默认是使用 CPU 亲和的内存分配策略,即请求进程会从当前所处的 CPU 的 Node 请求分配内存。当某个需要消耗大量内存的进程耗尽了所处的 Node 的内存时,就会导致产生 swap,不会从远程 Node 分配内存,这就是 swap insanit
MySQL与NUMA:理解与优化

本文探讨了NUMA(非一致性内存访问)在MySQL服务器中的影响,包括内存分配策略及其可能导致的性能问题。当MySQL在NUMA系统上运行时,可能会遇到swapinsanity现象,即进程因内存分配策略限制而使用磁盘交换,而非远程节点的物理内存。为解决此问题,文章提出了关闭NUMA或使用innodb_numa_interleave参数的解决方案,并提供了关闭NUMA的硬件、内核及数据库层面的方法。此外,还澄清了numactl命令缺失并不意味着NUMA未开启的误解。
最低0.47元/天 解锁文章
314

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



