InnoDB Insert Buffer(插入缓冲)
InnoDB Insert Buffer(插入缓冲)
每个存储存储引擎自身都有自己的特性(决定性能以及更高可靠性),而InnoDB的关键特性有:
- 插入缓冲(Insert Buffer)--》Change Buffer
- 两次写(Double Write)
- 自适应哈希索引(Adaptive Hash Page)
- 异步IO(Async IO)
- 刷新邻接页(Flush Neighbor Page)
今天主要聊一下插入缓冲(Insert Buffer)在InnoDB存储引擎中的作用。
Insert Buffer其实是一种重要的数据变更日志,在MySQL5.1 之前称为Insert Buffer, 优化2级非唯一索引上插入操作的读IO,在MySQL5.5之后改名为Change Buffer, 功能也扩展为2级非唯一索引上的插入、删除、更新、purge的读IO优化。也就是说Change buffer的主要目的是将对二级索引的数据操作缓存下来,以此减少二级索引的随机IO,并达到操作合并的效果。值得提的一点是,Change Buffer也是物理页的组成部分。
struct ibuf_struct{
ulint size; //当前ibuf btree 页面数
ulint max_size; //ibuf最大页面数
ulint seg_size; //所属段的页面数
ibool empty; //是否为空
ulint free_list_len; //空闲链表长度
ulint height; //树高度
dict_index_t* index; //ibuf索引 ulint n_merges; //合并的页面数
ulint n_merged_ops[IBUF_OP_COUNT]; //各种操作合并的页面数
ulint n_discarded_ops[IBUF_OP_COUNT]; //放弃的操作涉及的页面数
};
从上述的结构体可以得知,Ibuf实际上也是一棵B+树索引,它与innodb中其他的b+树有着完全一样的结构。Ibuf树中的记录其实就是包含了记录本身,还有记录所在页面号的信息。
值得注意的点是,ibuf只适用于 non-unique secondary indexes 也就是说只能用在非唯一的索引上,原因如下:
1. primary key 是按照递增的顺序进行插入的,异常插入聚族索引一般也顺序的,非随机IO
2. 写唯一索引要检查记录是不是存在,所以在修改唯一索引之前,必须把修改的记录相关的索引页读出来才知道是不是唯一、这样ibuf就没意义了,要读出来(随机IO)所以只对非唯一索引有意义。
ibuf可以对三种类型的操作进行缓存:INSERT、DELETE-MARK 、DELETE操作,前两种对应用户线程操作,第三种则由purge操作触发。
用户可以通过参数innodb_change_buffering来控制缓存何种操作:
static const char* innobase_change_buffering_values[IBUF_USE_COUNT] = {
"none", /* IBUF_USE_NONE */
"inserts", /* IBUF_USE_INSERT */
"deletes", /* IBUF_USE_DELETE_MARK */
"changes", /* IBUF_USE_INSERT_DELETE_MARK */
"purges", /* IBUF_USE_DELETE */
"all" /* IBUF_USE_ALL */
};
ibuf默认值为all,表示缓存所有操作。注意由于在二级索引上的更新操作总是先delete-mark,再insert新记录,因此update会产生两条ibuf entry。
因此delete buffer对应update操作的第一个过程,即将记录标记为删除。purge buffer对应update操作的第二个过程,即将记录真正的删除。同时InnoDB存储引擎提供了参数innodb_change_buffering,用来开启各种buffer选项。该参数的可选值为:inserts、deletes、purges、changes、all、none。inserts、deletes、purges就是前面讨论过的三种情况。changes表示启用inserts和deletes,all表示启用所有,none表示都不启用。
InnoDB Insert Buffer(插入缓冲)的更多相关文章
- innodb insert buffer 插入缓冲区的理解
今天在做一个大业务的数据删除时,看到下面的性能曲线图 在删除动作开始之后,insert buffer 大小增加到140.对于这些状态参数的说明 InnoDB Insert Buffer 插入缓冲,并不 ...
- InnoDB Insert Buffer(插入缓冲 转)
一,插入缓冲(Insert Buffer/Change Buffer):提升插入性能 只对于非聚集索引(非唯一)的插入和更新有效,对于每一次的插入不是写到索引页中,而是先判断插入的非聚集索引页是否在缓 ...
- INNODB insert buffer 简单分析
在mysql5.1 之前称为Insert Buffer, 优化2级非唯一索引上插入操作的读IO, 在5.5之后改名为Change Buffer, 功能也扩展为2级非唯一索引上的插入.删除.更新.pur ...
- InnoDB Insert(插入)操作(下)--mysql技术内幕
接上一篇文章,最后做的那个实验,我是想证明mysql innodb存储引擎,commit操作与flush数据到磁盘之间的关系,当与同事交流之后,他说,你应该把innodb_buffer_size的大小 ...
- InnoDB关键特性之insert buffer
insert buffer 是InnoDB存储引擎所独有的功能.通过insert buffer,InnoDB存储引擎可以大幅度提高数据库中非唯一辅助索引的插入性能. 数据库对于自增主键值的插入是顺序的 ...
- innodb 关键特性(insert buffer)
一.insert buffer 性能改善 insert buffer和数据页一样,也是物理页的一个组成部分. 在innodb存储引擎中,主键是行唯一的标识符.通常应用程序中行记录的插入顺序是按照主键递 ...
- 【mysql】Innodb三大特性之insert buffer
一.什么是insert buffer insert buffer是一种特殊的数据结构(B+ tree)并不是缓存的一部分,而是物理页,当受影响的索引页不在buffer pool时缓存 secondar ...
- 重要,知识点:InnoDB的插入缓冲
世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. InnoDB引擎有几个重点特性,为其带来了更好的性能和可靠性: 插入缓冲(Insert Buffer) 两次写(Do ...
- insert buffer/change buffer double write buffer,双写 adaptive hash index(AHI) innodb的crash recovery innodb重要参数 innodb监控
https://yq.aliyun.com/articles/41000 http://blog.itpub.net/22664653/viewspace-1163838/ http://www.cn ...
随机推荐
- 把多个字符串里面的项写到不同的对象中,然后在push到一个数组中
otherUserNames: "甲,乙,丙,丁"otherUserIds: "10008750,10008711,10003348,10008747" oth ...
- supermap数据库型数据源的数据索引问题
按如下方式查看帮助文档,根据不同的场景选用不同的索引
- linux学习第十三天 (Linux就该这么学)找到一本不错的Linux电子书
今天主要讲了vftp 服务的配置,不家三种访问方式 一,匿名访问模式 二,本地访问模式 三,虚拟用户模式 和,tftp简单文件传输协议 也讲了要孝试的服务,sabma服务的配置,及wind ...
- 服务管理之openssh
1. 使用 SSH 访问远程命令行 1.1 OpenSSH 简介 OpenSSH这一术语指系统中使用的Secure Shell软件的软件实施.用于在远程系统上安全运行shell.如果您在可提供ssh服 ...
- 《Java并发编程的艺术》Java并发机制的底层实现原理(二)
Java并发机制的底层实现原理 1.volatile volatile相当于轻量级的synchronized,在并发编程中保证数据的可见性,使用 valotile 修饰的变量,其内存模型会增加一个 L ...
- c语言实验一
#include <stdio.h> int main(){ int a,b,sum; a=123; b=456; sum = a + b; printf("sum is %d\ ...
- 《Miracle-House团队》项目需求分析改进
(一)团队项目需求分析改进 一.<西小餐项目需求规格说明书>的不足 通过老师和其他同学的指正和建议,我们发现上次的需求规格说明书存在以下不足: 1.需求规格文档不够完整和规范: 2.系统设 ...
- MongoDB + Express 环境搭建记
最近项目需要使用 MongoDB,所以不得不搭建 MongoDB 环境,此文记录搭建过程及使用过程中需要了解的问题. Linux + Windows 混合搭建调试 MongoDB 记录 版本介绍 : ...
- 第九周助教工作总结——NWNU李泓毅
1.助教博客链接: https://www.cnblogs.com/NWNU-LHY/ 2.作业要求博客链接: https://www.cnblogs.com/nwnu-daizh/p/1072688 ...
- 【翻译】Flume 1.8.0 User Guide(用户指南)
翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...