技术分享 | 浅谈 NUMA 与 MySQL

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

作者:孙祚龙

爱可生南区交付服务部团队 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值