MySQL 5.7 InnoDB缓冲池NUMA功能支持——但是别高兴的太早
当前CPU都已是NUMA架构,相信除了历史遗留系统,很少会有数据库跑在SMP的CPU上了。NUMA架构带来的优势无言而语,CPU更快的内存访问速度,但是带来的问题也不言而喻,特别是对于数据库的影响。MySQL之前“臭名昭著”的swap问题就是因为NUMA架构导致。大部分同学已经知道应对技巧,即在启动文件中加入:
numactl --interleave=all mysqld ...
or
numactl –cpunodebind=node –localalloc mysqld ...
MongoDB官方的启动文件大致也是这么写的。但是这样的处理方式在Inside君看来并不是最优的。因为NUMA的优势在于本地内存的申请速度。因此,对于数据库来说,一个好的策略应该是诸如缓冲池这样的全局内存可以向所有节点申请内存,而线程级别的内存还是坚持本地分配策略。
MySQL 5.7 InnoDB提供了新的参数innodb_numa_interleave,即缓冲池内存的分配策略采用interleave的方式。官方文档中的说明如下:
Enables the NUMA interleave memory policy for allocation of the InnoDB buffer pool. Wheninnodb_numa_interleave is enabled, the NUMA memory policy is set to MPOL_INTERLEAVE for the mysqld process. After the InnoDB buffer pool is allocated, the NUMA memory policy is set back to MPOL_DEFAULT. For theinnodb_numa_interleave option to be available, MySQL must be compiled on a NUMA-enabled system.
实现代码也比较优雅,有兴趣的同学可以看下。不过当你高兴InnoDB终于支持NUMA特性时,MySQL又给我们泼了冷水:
root@test-1# bin/mysqld -V
bin/mysqld Ver 5.7.12 for linux-glibc2.5 on x86_64 (MySQL Community Server (GPL))
root@test-1# bin/mysqld --help -v | grep numa
最新的5.7.12版本竟然找不到此参数。但是没有关系,开源的魅力在于折腾,于是乎修改了2行代码,编译安装后参数innodb_numa_interleave就又出现了:
root@test-1:/mdata/mysql/mysql-5.7.12/bld# sql/mysqld -v --help | grep numa
--innodb-numa-interleave
innodb-numa-interleave FALSE
小伙伴可尝试自己去解决看看,第一个回复并答对的小伙伴,将获得姜老师提供的价值1000元的某云服务提供商代金券一张哦~~~
不过,相比Microsoft SQL Server,MySQL的NUMA支持依然不够完善,因为Microsoft SQL Server在2005版本就已经支持NUMA特性,并且提供了相应的命令来进行控制,如:
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY CPU=0 TO 3;
这样做的好处是,比如在多实例环境下,用户可以更为灵活的控制内存的分配。但是要实现此功能,貌似也不是一件难事哦,有谁愿意实现给InnoSQL贡献自己的一份力量呢?
PS:Inside君的2016年MySQL网络培训班又将开始啦~~~,具体点击:2016年最好的MySQL数据库网络培训又来了 零基础、Oracle DBA、MySQL DBA的同学们都来吧,跟着姜老师的思考方式来系统的学习MySQL。
MySQL 5.7 InnoDB缓冲池NUMA功能支持——但是别高兴的太早的更多相关文章
- InnoDB缓冲池预加载在MySQL 5.7中的正确打开方式
InnoDB缓冲池预加载在MySQL 5.7中的正确打开方式 https://mp.weixin.qq.com/s/HGa_90XvC22anabiBF8AbQ 在这篇文章里,我将讨论在MySQL 5 ...
- MySQL InnoDB缓冲池(Buffer Pool)
InnoDB缓冲池并不仅仅缓存索引,它还会缓存行的数据.自适应哈希索引.插入缓冲(Insert Buffer).锁,以及其他内部数据结构. InnoDB还使用缓冲池来帮助延迟写入,这样就能合并多个写入 ...
- Mysql 存储引擎 InnoDB与Myisam的主要区别
MySQL默认采用的是MyISAM. 1,事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好. MyISAM不支持事务,而InnoDB支持.InnoD ...
- MySQL内核:InnoDB存储引擎 卷1
MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...
- 初识 MySQL 5.6 新特性、功能
背景: 之前介绍过 MySQL 5.5 新功能.参数,现在要用MySQL5.6,所以就学习和了解下MySQL5.6新的特性和功能,尽量避免踩坑.在后续的学习过程中文章也会不定时更新. 一:参数默认值的 ...
- InnoDB存储引擎介绍-(3)InnoDB缓冲池配置详解
原文链接 http://www.ywnds.com/?p=9886 一.InnoDB缓冲池 InnoDB维护一个称为缓冲池的内存存储区域 ,用于缓存内存中的数据和索引.了解InnoDB缓冲池的工作原 ...
- MySQL 8.0有什么新功能
https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/ 我们自豪地宣布MySQL 8.0的一般可用性. 现在下载 ...
- mysql存储引擎innodb、myisam区别
MyISAM与InnoDB的区别是什么? 1. 存储结构 MyISAM:每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩 ...
- Mysql技术内幕——InnoDB存储引擎
Mysql技术内幕——InnoDB存储引擎 http://jingyan.baidu.com/article/fedf07377c493f35ac89770c.html 一.mysql体系结构和存储引 ...
随机推荐
- JS 循环遍历JSON数据 分类: JS技术 JS JQuery 2010-12-01 13:56 43646人阅读 评论(5) 收藏 举报 jsonc JSON数据如:{"options":"[{
JS 循环遍历JSON数据 分类: JS技术 JS JQuery2010-12-01 13:56 43646人阅读 评论(5) 收藏 举报 jsonc JSON数据如:{"options&q ...
- ML学习分享系列(2)_计算广告小窥[中]
原作:面包包包包包包 改动:寒小阳 && 龙心尘 时间:2016年2月 出处:http://blog.csdn.net/Breada/article/details/50697030 ...
- Explicit Semantic Analysis (ESA)
有别于LSA (Latent Semantic Analysis), 下列文章提出一种ESA (Explicit Semantic Analysis), 并介绍怎样使用ESA来进行语义相关性和文本分类 ...
- ASP.NET Core WebApi 返回统一格式参数(Json 中 Null 替换为空字符串)
相关博文:ASP.NET Core WebApi 返回统一格式参数 业务场景: 统一返回格式参数中,如果包含 Null 值,调用方会不太好处理,需要替换为空字符串,示例: { "respon ...
- Linux计划任务crontab
Linux系统中存在两种工作调度的方式 周期性的(at),每隔一个固定的周期要来办的事项: 一次性的(crontab),做完一次以后就不会再执行: at at是个可以处理仅执行一次就结束调度的指令,不 ...
- effective java学习笔记之不可实例化的类
在没有显式声明一个类的构造方法时,编译器会生成默认的无参构造方法,在设计工具类时,我们通常将方法设置成静态方法,以类名.方法名的形式调用,此时这个类就没有必要创建实例,我们知道抽象类不可以被实例化,但 ...
- 分享一个开源免费、目前最好的API接口管理平台----eoLinker
一.概况 eoLinker 是目前业内领先.国内最大的在线 API 接口管理平台,提供自动生成 API 文档.API 自动化测试.Mock 测试.团队协作等功能,旨在解决由于前后端分离导致的开发效率低 ...
- MongoDB学习笔记(一)
最近有些时间,就抽空研究了一下MongoDB,我以前经常使用关系型数据库,如Oracle.MySQL,对MongoDB只是有些很肤浅的了解,最近下决心要好好研究一下,主要的参考书有两本:<Mon ...
- spring cloud ribbon和fegin
一开始接触spring cloud的时候,还没有听说过微服务这个概念,对于服务直接的沟通是什么个情况,怎么组成微服务的完全懵逼,看到网上的教程都是用ribbong和fegin来调用接口,然后官网也给的 ...
- wait/notify 实现多线程交叉备份
一.任务 创建20个线程,其中10个线程是将数据备份到 A 数据库中,另外10 个线程将数据备份到 B 数据库中,并且备份 A 数据库和 备份 B 数据库的是交叉运行的. 二.实现 1.实现备份 A ...