非一致存储访问结构 (NUMA : Non-Unif
ORM Memory Access) 也是最新的内存管理技术。它和对称多处理器结构 (SMP : Symmetric Multi-Processor) 是对应的。
Mysql在NUMA
架构上会出现的问题:
1).CPU规模因摩尔定律指数级发展,而总线发展缓慢,导致多核CPU通过一条总线共享内存成为瓶颈
2).于是NUMA出现了,CPU平均划分为若干个Chip(不多于4个),每个Chip有自己的内存控制器及内存插槽
3).CPU访问自己Chip上所插的内存时速度快,而访问其他CPU所关联的内存(下文称Remote Access)的速度相较慢三倍左右
4).于是
linux内核默认使用CPU亲和的内存分配策略,使内存页尽可能的和调用
线程处在同一个Core/Chip中
5).由于内存页没有动态调整策略,使得大部分内存页都集中在CPU 0上
6).又因为Recl
aim默认策略优先淘汰/Swap本Chip上的内存,使得大量有用内存被换出
7).当被换出页被访问时问题就以
数据库响应时间飙高甚至阻塞的形式出现了
因此
mysql单机单实例,建议关闭NUMA,关闭的方法有三种:
1.硬件层,在B
iOS中设置关闭;
2.OS内核,启动时设置numa=off;
3.可以用nu
Mactl命令将内存分配策略修改为interleave(交叉)
登录Linux系统,修改/etc/init.d/my
sqld文件,加上numactl --interleave all
vi /etc/init.d/mysqld
找到如下行
# Give extra arguments to mysqld with the my.cnf file. This script
# may be overwritten at next upgrade.
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
将$bindir/mysqld_safe --datadir="$datadir"这一行修改为:
/usr/bin/numactl --interleave all $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
然后重启MySQL服务.
#service mysqld restart
0