一、什么是insert bufferinsert buffer是一种特殊的数据结构(B+ tree)并不是缓存的一部分,而是物理页,当受影响的索引页不在buffer pool时缓存 secondary index pages的变化,当buffer page读入buffer poo ...
一、什么是insert buffer
insert buffer是一种特殊的数据结构(B+ tree)并不是缓存的一部分,而是物理页,当受影响的索引页不在buffer pool时缓存 secondary index pages的变化,当buffer page读入buffer pool时,进行合并操作,这些操作可以是 INSERT
, UPDATE
, or DELETE
operations (DML)
最开始的时候只能是insert操作,所以叫做insert buffer,现在已经改叫做change buffer了
insert buffer 只适用于 non-unique secondary indexes 也就是说只能用在非唯一的索引上,原因如下
1、primary key 是按照递增的顺序进行插入的,异常插入聚族索引一般也顺序的,非随机IO
2 写唯一索引要检查记录是不是存在,所以在修改唯一索引之前,必须把修改的记录相关的索引页读出来才知道是不是唯一、这样Insert buffer就没意义了,要读出来(随机IO)
所以只对非唯一索引有效
二、insert buffer的原理
对于为非唯一索引,辅助索引的修改操作并非实时更新索引的叶子页,而是把若干对同一页面的更新缓存起来做,合并为一次性更新操 作,减少IO,转随机IO为顺序IO,这样可以避免随机IO带来性能损耗,提高数据库的写性能
具体流程
先判断要更新的这一页在不在缓冲池中
a、若在,则直接插入;
b、若不在,则将index page 存入Insert Buffer,按照Master Thread的调度规则来合并非唯一索引和索引页中的叶子结点Master Thread的调度规则
a、主动merger[innodb主线程定期完成,用户线程无感知]
主动merge通过innodb主线程(svr_master_thread)判断:若过去1s之内发生的I/O小于系统I/O能力的5%,则主动进行一次insert buffer的merge操作。merge的页面数为系统I/O能力的5%,读取采用async io模式。每10s,必定触发一次insert buffer meger操作。meger的页面数仍旧为系统 I/O能力的5%。
1)主线程发出async io请求,async读取需要被merge的索引页面
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:【mysql】Innodb三大特性之insert buffer
关键词:MYSQL
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。