mysql5.7.9+支持的新参数innodb_numa_interleave

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql5.7.9+支持的新参数innodb_numa_interleave相关的知识,希望对你有一定的参考价值。

        大家都知道,在运行mysql服务的服务器上,linux系统的内存numa特性是强烈建议关闭的。因为这种特性很容易引起内存泄漏的情况:即发现物理内存还有剩余,但是系统已经开始使用swap内存。

        numa内存特性:比如一台机器是有2个处理器,有4个内存块。我们将1个处理器和两个内存块合起来,称为一个NUMA node,这样这个机器就会有两个NUMA node。在物理分布上,NUMA node的处理器和内存块的物理距离更小,因此访问也更快。比如这台机器会分左右两个处理器(cpu1, cpu2),在每个处理器两边放两个内存块(memory1.1, memory1.2, memory2.1,memory2.2),这样NUMA node1的cpu1访问memory1.1和memory1.2就比访问memory2.1和memory2.2更快。所以使用NUMA的模式如果能尽量保证本node内的CPU只访问本node内的内存块,那这样的效率就是最高的。

        其实由于mysql数据库服务器一般只会部署mysql一种服务在运行,而不会部署若干应用在运行。所以一般是希望mysql是独占整个服务器的资源(剔除留给操作系统运行的资源)。所以根据这种业务特性,mysql服务器上是不建议开启numa内存特性。

        那如果关闭numa特性呢?

        1、BLOS层面:

        由于不同系统之间各种BLOS类型的区别,设置各有不同。这里不再展开。

        2、操作系统层面:

        可以直接在/etc/grub.conf的kernel行最后添加numa=off。

        3、MySQL层面:

        直接修改启动脚本:

        numactl --interleave=all mysqld --defaults-file=/etc/my.cnf &

        4、设置innodb_numa_interleave参数:

        MySQL5.7.9版本+,新增了参数innodb_numa_interleave。根据官方文档的描述:当设置innodb_numa_interleave=1的时候,对于mysqld进程的numa内存分配策略设置为MPOL_INTERLEAVE,而一旦Innodb buffer pool分配完毕,则策略重新设置回MPOL_DEFAULT。当然这个参数是否生效,必须建立在mysql是在支持numa特性的linux系统上编译的基础上。

        在MySQL5.7.17版本+, CMake编译软件新增了WITH_NUMA参数,可以在支持numa特性的linux系统上编译mysql。

        注:innodb_numa_interleave目前在mysql5.7.17的二进制包是不支持的,详细的bug信息:https://bugs.mysql.com/bug.php?id=80288 。如果需要规避这种情况,建议下载源码包,直接在系统上进行mysql编译。


以上是关于mysql5.7.9+支持的新参数innodb_numa_interleave的主要内容,如果未能解决你的问题,请参考以下文章

centos6.5-搭建mysql5.7.9

MySQL5.6.26升级到MySQL5.7.9实战方案

mysql5.7.9安装

MYSQL5.7.9改密码相关设置

mysql5.7.9 源码安装 (转)

centos 安装 mysql5.7.9初始密码问题