码迷,mamicode.com
首页 > 数据库 > 详细

mysql5.7.9+支持的新参数innodb_numa_interleave

时间:2018-01-16 12:18:59      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:https   数据库服务   lin   mysql   --   php   物理   node   com   

大家都知道,在运行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

标签:https   数据库服务   lin   mysql   --   php   物理   node   com   

原文地址:http://blog.51cto.com/linzhijian/2061476

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!