你的位置:首页 > 软件开发 > 数据库 > 【mysql】Innodb三大特性之insert buffer

【mysql】Innodb三大特性之insert buffer

发布时间:2015-10-15 23:00:03
一、什么是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 (#换成@)。