InnoDB存储引擎读书笔记-插入缓冲(Insert Buffer)

Insert Buffer

对于非聚集索引的插入或者更新操作,不是每一次直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓冲池中,若在,则直接插入;若不在,则先放入到一个Insert Buffer对象中。
数据库这个非聚集索引已经插到叶子节点,而实际并没有,只是存放在另一个位置。然后再以一定频率和情况进行Insert Buffer和辅助索引页子节点的merge(合并)操作,通常可以将多个插入合并到一个操作中(以为在一个索引页中),大大提高了非聚集索引的插入性能。

条件

  1. 索引是辅助索引
  2. 索引不是唯一索引。
    满足以上两个条件时,InnoDB存储引擎会使用Insert Buffer,提高插入操作的性能。

缺点

当MySql数据库发生宕机,大量的Insert Buffer没有合并到实际的非聚集索引中,此时恢复可能需要很长的时间。
Insert Buffer在写密集的情况下,插入缓冲会占用过多的缓冲池内存。

Change Buffer

从InnoDB 1.0.x版本引入Change Buffer,可以对DML操作都进行缓冲——INSERT、DELETE、UPDATE。分别是Insert Buffer,Delete Buffer,Purge Buffer。
对同一条记录进行UPDATE操作可能分为两个过程:

  1. 将记录标记为删除。
  2. 真正将记录删除。
    Delete Buffer对应第一个过程,Purge Buffer对应第二个过程。

Insert Buffer内部实现

全局Insert Buffer B+树,负责对所有表的辅助索引进行Insert Buffer。这棵B+树存放在共享表空间中,默认也就是ibdata1。

Merge Insert Buffer

将Buffer合并到真正的索引页发生在以下几种情况下:

  1. 辅助索引页被读取到缓冲池时。
  2. Insert Buffer Bitmap页追踪到该辅助索引页已无可用空间时。
  3. Master Thread。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值