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体系结构和存储引 ...
随机推荐
- Android4.0-4.4 加入支持状态栏显示耳机图标方法(支持带不带MIC的两种耳机自己主动识别)
效果如图: 一. 在frameworks/base/packages/SystemUI/res/values/strings.xml 里加入 <string name="headset ...
- 入门Webpack
---恢复内容开始--- 什么是WebPack,为什么要使用它? 为什要使用WebPack 现今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的JavaScript代码和一大堆依赖包.为了简化 ...
- 【SqlServer】【问题收集】删除同一张表中完全相同的记录
1 概述 在Sqlserver中,当通过SqlServer设计器删除同一张表中两条完全相同的记录时,会弹出如下提示: 点击“是” 弹出如下提示,不让删除 2 问题解决 这个问题很简单,用DEL ...
- 【SqlServer系列】表达式(expression)
1 概述 本篇这文章主要概述SqlServer表达式. 2 具体内容 2.1 使用范围 SQL Server(2008开始) :Azure SQL数据库:Azure SQL数据仓库:并行数 ...
- 【quickhybrid】架构一个Hybrid框架
前言 虽然说本系列中架构篇是第一章,但实际过程中是在慢慢演化的第二版中才有这个概念, 经过不断的迭代,演化才逐步稳定 明确目标 首先明确需要做成一个什么样的框架? 大致就是: 一套API规范(统一An ...
- myeclipse无法导入项目
MyEclipse无法导入Java项目时常遇到的两种情况: 1.Some projects cannot be imported because they already exist in the w ...
- 数据分析与展示——Matplotlib基础绘图函数示例
Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...
- C#Lambda表达式Aggregate的用法及内部运行方式的猜想
, , , , }; // 其和为15 var count = nums.Aggregate((body, next) => { // 注意,nums的元素个数至少一个以上(但如果是有seed的 ...
- C++各种指针辨析
1)int *p p与*结合,表明p是一个指针 然后前面int说明p是一个整形的指针 2)int *p[n] 因为[]比*优先级高,所以p先与[]结合,表明p是个数组,然后这个数组在与*结合,说明数组 ...
- Wincc flexable的画面浏览切换组态
1.新建项目和6个画面 2.双击导航控件设置,选择默认设置 3.使用画面浏览编辑器编辑画面层次切换关系,拖拽画面到编辑器中进行关系连接 4.保运并运行