Mysql5.7 InnoDB特性 insert buffer

一、什么是insert buffer

insert buffer是一种特殊的数据结构,并不是缓存的一部分,而是物理页,当mysql更新数据,受影响的索引页不在buffer pool缓冲池中时,它会缓存二级索引页的更改,后面更新(DML)操作 ,二级索引页进入buffer pool缓冲池中时,insert buffer则进行合并操作。

最开始的时候只能是insert操作,所以叫做insert buffer,Mysql5.6以后已经改叫做change buffer了

这里的二级索引指的是非唯一索引

二、insert buffer 原理

对于非唯一索引,如果索引页没有在buffer pool中,每次操作磁盘则代价太高(因为会修改B+树),mysql把这些索引操作放入insert buffer,当这些索引页被加载到buffer pool后,主线程会合并这些更改。意思就是必须要等索引页加载到buffer pool内存中后,在进行修改,内存修改肯定比磁盘修改效率高。

流程:

① 更新二级非唯一索引A

② 假如索引A在buffer pool中,则直接修改

③ 假如索引A没有在buffer pool中,则会把更新缓冲起来,等待A索引被加载到buffer pool中后,insert buffer在内存中的A索引进行合并。从而完成了索引A的修改。

三、 insert buffer 缺点

1、可能导致数据库宕机后实例恢复时间变长。如果应用程序执行大量的插入和更新操作,且涉及非唯一的聚集索引,一旦出现宕机,这时就有大量内存中的插入缓冲区数据没有合并至索引页中,导致实例恢复时间会很长

2、在写密集的情况下,插入缓冲会占用过多的缓冲池内存(innodb_buffer_pool),默认情况下最大可以占用1/2,这在实际应用中会带来一定的问题

3、insert buffer 无法进行控制,for different workloads and hardware configuration,特别是在SSD盛行的今天

四、 查看iinsert buffer的情况

命令 show engine innodb status;

 

Ibuf: size 使用了多少页

free list len  空闲的多少页

seg size = size + free list len  - 1

merges :合并了多少页

merged operations:    合并成功的情况
 insert 0, delete mark 0, delete 0   
discarded operations: 丢弃的情况
 insert 0, delete mark 0, delete 0
 

 

参考:

https://www.cnblogs.com/chenpingzhao/p/4883884.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值