非一致存储访问结构(NUMA:非一致内存访问)也是最新的内存管理技术。它和对称多处理器结构(SMP:对称多处理器)是对应的。
MySQL在NUMA架构上会出现的问题:
1).CPU规模因摩尔定律指数级发展,而总线发展缓慢,导致多核CPU通过一条总线共享内存成为瓶颈
2)。于是NUMA出现了,CPU平均划分为若干个芯片(不多于4个),每个芯片有自己的内存控制器及内存插槽
3).CPU访问自己芯片上所插的内存时速度快,而访问其他CPU所关联的内存(下文称远程访问)的速度相较慢三倍左右
4)。于是Linux内核默认使用CPU亲和的内存分配策略,使内存页尽可能的和调用线程处在同一个核心/芯片中
5)。由于内存页没有动态调整策略,使得大部分内存页都集中在CPU 0上
6)。又因为回收默认策略优先淘汰/交换本芯片上的内存,使得大量有用内存被换出
7)。当被换出页被访问时问题就以数据库响应时间飙高甚至阻塞的形式出现了
因此MySQL单机单实例,建议关闭NUMA,关闭的方法有三种:
1.硬件层,在BIOS中设置关闭,
2.操作系统内核,启动时设置numa=,
3.可以用numactl命令将内存分配策略修改为交错(交叉)
登录Linux系统,修改/etc/init。d/mysqld文件,加上numactl——交错
vi/etc/init.d/mysqld
找到如下行
#给文件mysqld在my . cnf中所做额外的参数。这个脚本
,,,#下升级可能被覆盖。
,,,美元bindir/mysqld_safe——datadir=" $ datadir”——pid文件=" $ mysqld_pid_file_path "美元other_args在/dev/null,
,,,wait_for_pid创建“美元!”“mysqld_pid_file_path美元”;return_value=https://www.yisu.com/zixun/$ ?
将$ bindir/mysqld_safe——datadir=" $ datadir "这一行修改为:
,,,/usr/bin/numactl——交错所有bindir美元/mysqld_safe datadir=" $ datadir”——pid文件=" $ mysqld_pid_file_path " other_args美元在/dev/null,
,,,wait_for_pid创建“美元!”“mysqld_pid_file_path美元”;return_value=https://www.yisu.com/zixun/$ ?
然后重启MySQL服务。
#服务mysqld重启
MySQL在NUMA架构上会出现的问题:
1).CPU规模因摩尔定律指数级发展,而总线发展缓慢,导致多核CPU通过一条总线共享内存成为瓶颈
2)。于是NUMA出现了,CPU平均划分为若干个芯片(不多于4个),每个芯片有自己的内存控制器及内存插槽
3).CPU访问自己芯片上所插的内存时速度快,而访问其他CPU所关联的内存(下文称远程访问)的速度相较慢三倍左右
4)。于是Linux内核默认使用CPU亲和的内存分配策略,使内存页尽可能的和调用线程处在同一个核心/芯片中
5)。由于内存页没有动态调整策略,使得大部分内存页都集中在CPU 0上
6)。又因为回收默认策略优先淘汰/交换本芯片上的内存,使得大量有用内存被换出
7)。当被换出页被访问时问题就以数据库响应时间飙高甚至阻塞的形式出现了
因此MySQL单机单实例,建议关闭NUMA,关闭的方法有三种:
1.硬件层,在BIOS中设置关闭,
2.操作系统内核,启动时设置numa=,
3.可以用numactl命令将内存分配策略修改为交错(交叉)
登录Linux系统,修改/etc/init。d/mysqld文件,加上numactl——交错
vi/etc/init.d/mysqld
找到如下行
#给文件mysqld在my . cnf中所做额外的参数。这个脚本
,,,#下升级可能被覆盖。
,,,美元bindir/mysqld_safe——datadir=" $ datadir”——pid文件=" $ mysqld_pid_file_path "美元other_args在/dev/null,
,,,wait_for_pid创建“美元!”“mysqld_pid_file_path美元”;return_value=https://www.yisu.com/zixun/$ ?
将$ bindir/mysqld_safe——datadir=" $ datadir "这一行修改为:
,,,/usr/bin/numactl——交错所有bindir美元/mysqld_safe datadir=" $ datadir”——pid文件=" $ mysqld_pid_file_path " other_args美元在/dev/null,
,,,wait_for_pid创建“美元!”“mysqld_pid_file_path美元”;return_value=https://www.yisu.com/zixun/$ ?
然后重启MySQL服务。
#服务mysqld重启