=============================================================

NUMA(Non-Uniform Memory Access),非一致性内存访问
NUMA服务器的基本特征是具有多个CPU模块,每个CPU模块由多个CPU(如4个)组成,并且具有独立的本地内存、I/O槽口等。由于其节点之间可以通过互联模块(如称为Crossbar Switch)进行连接和信息交互,因此每个CPU可以访问整个系统的内存(这是NUMA系统与MPP系统的重要差别)。显然,访问本地内存的速度将远远高于访问远地内存(系统内其它节点的内存)的速度,这也是非一致存储访问NUMA的由来。
利用NUMA技术,可以较好地解决原来SMP系统的扩展问题,在一个物理服务器内可以支持上百个CPU。但NUMA技术同样有一定缺陷,由于访问远地内存的延时远远超过本地内存,因此当CPU数量增加时,系统性能无法线性增加。

=============================================================

查看CPU和MUMA的拓扑信息

numactl --hardware

上面是2U服务器,配置64G内存

=============================================================

MySQL与NUMA问题

在单实例的MySQL服务器上,通过会为MySQL的Buffer Pool分配50%至70%甚至更高的内存,让MySQL 服务会尽可能多地占用系统资源。在基于NUMA系统中,内存被分配到各NUMA节点上,系统的默认为进程分配该进程所在NUMA节点的内存,而数据库应用又希望使用到所有CPU节点和内存,由于MySQL对NUMA支持不是很完善,在特殊场景中容易出现系统拥有空闲内存但发生SWAP导致性能问题的情况。

如对于2个NUMA节点64GB内存的MySQL服务器来说,为MySQL Buffer Pool配置48GB的内存,在默认NUMA策略下,会存在以下问题:
1、节点0和节点1的内存分配不平衡,内存会优先分配给节点0,节点1被用于备份,如:

2、当属于节点0的内存完全分配给节点0,如果位于NODE0上的进程调度需要大量内存,尽管节点1仍有大量空闲物理内存,也不会将NODE1上的内存分配给该进程使用,由于节点0已无空闲内存,因此会导致NODE0上部分内存被SWAP到磁盘上,引发性能问题。

=============================================================

为MySQL关闭NUMA

在MUMA架构下,虽然访问其他节点内存的性能低于访问本地节点内存,但并不是导致性能问题的主要原因,为解决系统存在空闲内存而部分NUMA发生SWAP操作的问题.

解决方式:

1、在BIOS层关闭NUMA
2、在Linux Kernel启动参数中加上numa=off(这样也会影响到其他进程使用NUMA);
3、在mysqld_safe脚本中加上“numactl –interleave all”来启动mysqld。

参数--interleave=nodes用于设定内存的交织分配模式,即系统在为多个节点分配内存空间时,将以轮询分发的方式分配给多个节点,如果当前众多的交织分配内存节点中的目标节点无法正确地分配内存空间的话,内存空间将会由其他节点来分配。

修改后MySQL内存分配如:

=============================================================

参考资料:
http://mysql.taobao.org/monthly/2015/07/06/
http://linux.51yip.com/search/numactl
http://sohulinux.blog.sohu.com/181968823.html
http://imysql.com/2016/11/30/mysql-faq-find-who-cause-mysql-swap.shtml?utm_source=tuicool&utm_medium=referral

=============================================================

MySQL--NUMA与MySQL的更多相关文章

  1. numa对MySQL多实例性能影响

     numa对MySQL多实例性能影响,通过对numa将MySQL绑定在不同的CPU节点上,并且采用绑定的内存分配策略,强制在本节点内分配内存.具体测试如下:1.关闭numa(numa= interle ...

  2. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  3. Ubuntu彻底删除MySQL然后重装MySQL

    删除 mysql sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-server sudo apt- ...

  4. Navicat for mysql 远程连接 mySql数据库10061、1045错误

    原文地址:http://www.111cn.net/database/mysql/46377.htm 有朋友可能会碰到使用Navicat for mysql 远程连接 mySql数据库会提示10061 ...

  5. 利用JDBC连接MySQL并使用MySQL

    driver为JDBC的驱动. url为数据库的地址. usrname和password分别为数据库的用户名和密码. Connection类用来连接MySQL. PreparedStatement类用 ...

  6. 对于新安装的MySQL如何提升MySQL的安全级别

    一 作为最流行的开源数据库引擎,MySQL本身是非常安全的.即便如此,你仍然需要添加额外的安全层来保护你的MySQL数据库不受攻击,毕竟任何经营网上在线业务的人都不想冒数据库受到损坏的风险.接下来,我 ...

  7. MySql安装与MySQL添加用户、删除用户与授权

    1.安装MySql       目前MySQL有两种形式的文件,一个是msi格式,一个是zip格式的.msi格式的直接点击setup.exe就好,按照步骤进行.但是很多人下了zip格式的解压发现没有s ...

  8. Mysql-报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost

    报错:1130-host ... is not allowed to connect to this MySql server   解决方法: 1. 改表法. 可能是你的帐号不允许从远程登陆,只能在l ...

  9. MySQL监控系统MySQL MTOP的搭建(转VIII)

    MySQLMTOP是一个由Python+PHP开发的MySQL企业级监控系统.系统由Python实现多进程数据采集和告警,PHP实现WEB展示和管理.最重要是MySQL服务器无需安装任何Agent,只 ...

  10. 报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost

    执行如下命令报错 mysql -uroot -h${hostIp} -p Enter password:********* ERROR (HY000): Host '$hostIp' is not a ...

随机推荐

  1. Guns后台管理系统框架(毕业设计神器)

    Guns后台管理系统, 基于Spring Boot + Maven构建  + MyBatis + MySql数据库 导入Eclipse即可使用 十分钟即可搞定,做毕业设计的好帮手啊 最终效果图 登陆页 ...

  2. (C/C++学习笔记) 二十一. 异常处理

    二十一. 异常处理 ● 异常的概念 程序的错误通常包括:语法错误.逻辑错误.运行异常. 语法错误指书写的程序语句不合乎编译器的语法规则,这种错误在编译.连接时由编译器指出. 逻辑错误是指程序能顺利运行 ...

  3. update-alternatives关键解疑

    update-alternatives的用法网上到处又有,但有2个知识点好像都没怎么提到: 1.--install 里的参数link到底是啥意思,其实update-alternatives本质就是在/ ...

  4. Find the Missing Number II

    Giving a string with number from 1-n in random order, but miss 1 number.Find that number. Notice n & ...

  5. 深入理解java虚拟机---虚拟机工具jconsole(十八)

    Jconsole,Java Monitoring and Management Console. Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到.它用于连接正在运行的本地或者远 ...

  6. Linux下安装微信(转)

    扩展:https://www.cnblogs.com/dunitian/p/9124806.html 安装过程如下: 1.下载最新版本tar.gz压缩包https://github.com/geeee ...

  7. 一次练习 发现的问题,malloc free 无效;findfirstfile失败,writefile失败的原因

    #include <windows.h> #include <stdio.h> #include <shlwapi.h> #pragma comment(lib,& ...

  8. Codeforces Round #506 (Div. 3) D. Concatenated Multiples

    D. Concatenated Multiples You are given an array aa, consisting of nn positive integers. Let's call ...

  9. GNU C的定义长度为0的数组

    在标准C和C++中,长度为0的数组是被禁止使用的.不过在GNU C中,存在一个非常奇怪的用法,那就是长度为0的数组,比如Array[0];很多人可能觉得不可思议,长度为0的数组是没有什么意义的,不过在 ...

  10. python自学第6天,文件修改,字符编码

    文件的修改: 一般是把旧文件的内容改了,在写入到新的文件中去. file_old=open("test","r",encoding="utf-8&qu ...