mysql-innodb关键特性

一、insert buffer

1.插入缓冲(insert buffer):数据页一样,是物理页的一个组成部分,其数据结构是一棵B+树,存放在ibdata1(共享表空间)中

注:并不是所有的主键插入都是顺序的,若主键是UUID,则插入和辅助索引一样,同样是随机的

对于非聚集索引的插入或更新操作,不是每一次直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓冲池中,若在,则直接插入;若不在,则先放入一个insert buffer对象中,然后再以一定频率和情况进行insert buffer和辅助索引页子节点的merger(合并)操作。

使用insert buffer的条件:

索引是辅助索引;

索引不是唯一的。

2.change buffer

对于insert buffer的升级,可以对DML操作—insert、delete、update都进行缓冲,change buffer使用的对象是非唯一的辅助索引,可以通过innodb_change_buffer_max_size来控制 change buffer最大使用内存的数量,默认值为25即最多使用1/4的缓冲池内存空间,该参数最大有效值为50

3.insert buffer的内部实现

insert buffer 数据结构是一棵B+树且全局只有一棵,负责对所有的表的辅助索引进行insert buffer,存放在共享表空间中(ibdata1中)。试图通过独立表空间ibd文件恢复表中数据中,会导致check table失败。(由于表的辅助索引中的数据可能还在insert buffer中,所以通过ibd文件恢复后,还需要进行repair table来重建表上所有的辅助索引)

insert buffer由叶节点和非叶节点(search key 键值)组成。

非叶节点的search key如图:

说明:space (占用4字节)表示待插入记录所在表的表空间ID(每张表都有一个唯一的space id);market(占用1字节)用来兼容老版本insert buffer;offset(占用4字节)t表示页所在的偏移量。

过程:当辅助索引要插入到页时,如果这个页不在缓冲池中,那么innodb会先构造一个search key,接下来查询insert buffer这棵B+树,然后将这条记录插入到insert buffer B+树的叶节点中

原文链接:http://blog.itpub.net/31523382/viewspace-2151661

发表于

hh

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

程序猿的日常——Mybatis现学现卖

最近有一个小项目需求,需要用spring mvc + mybatis实现一个复杂的配置系统。其中遇到了很多不太常见的问题,在这里特意记录下: 主要涉及的内容有...

37670
来自专栏精讲JAVA

Java面试之数据库面试题

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可...

16340
来自专栏IT笔记

聊聊Java中的四种单例模式

近期在做支付,一开始图省事,也是为了调试方便,支付的alipayClient和tradeService都是使用的时候去拿,这样就会导致创建多次。为了节省资源,统...

27270
来自专栏kwcode

C# 读取指定文件夹下所有文件

#region 读取文件 //返回指定目录中的文件的名称(绝对路径) string[] files = S...

33370
来自专栏landv

金蝶k3密码批量修改

18760
来自专栏AILearning

Apache Zeppelin 中 Cassandra CQL 解释器

Name Class Description %cassandra CassandraInterpreter 为Apac...

32690
来自专栏java思维导图

数据库常见的面试题大全

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可...

15840
来自专栏精讲JAVA

Java面试之数据库面试题

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可...

16820
来自专栏加米谷大数据

技术分享 | Kafka之Log存储方法

Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的。每个topic又可以分成几个不同的partition(每个topi...

37380
来自专栏Snova云数仓

Greenplum资源队列初识

在Greenplum的4.x版本之后,加入了资源队列的概念,其主要作用就是限制用户或者单个SQL对资源的消耗。避免出现消耗过多资源,影响其他用户或者SQL计算。...

889140

扫码关注云+社区

领取腾讯云代金券