您的位置:首页 > Web前端

Mysql内核:INNODB存储引擎--《十一》Insert Buffer

2017-08-12 01:09 375 查看

11.2基本概念

innodb对于自增主键值得插入是顺序的,因此插入能有较高的插入性能。但在实际生产环境中,用户表的主键仅有并只能有一个,然后表中可能存在多个辅助索引。辅助索引根据类型在插入时可以分为比较顺序到的插入和随机的插入两种。比较顺序的插入可能是时间字段,随机的插入可能更为广泛。

innodb存储引擎insert buffer的设计思想是,在插入时首先判断插入的辅助索引叶子是否还在缓冲池中。若在则直接插入,否则将插入的记录放到insert buffer中,然后根据一些算法将insert buffer缓存的记录通过后台线程慢慢的合并回辅助索引页中。这样做好处:

减少磁盘的离散读取

将多次插入合并为一次操作

举例子,第一列为人名,第二列为page_no(实际上page_no并不是数据,在这里用来表示页号):

(‘huangweiyang’, 2), (‘licao’, 10), (‘gaomingxi’, 4), (‘lishuai’, 15), (‘hejiejie’, 2)

后面的列表示原先应插入的辅助索引的page_no,可以看到页的访问时无序的。然而当插入到insert buffer中,删除记录可能完全在一个页中,因此减少了李珊读取。在insert buffer中,,记录根据应插入辅助索引的叶子节点的page_no进行排序。排序完毕后,上述记录就会从insert buffer向辅助索引合并,比如(‘huangweiyang’)(‘hejiejie’)此时就可以批量合并了 :)

注意,insert buffer 只能缓存非唯一约束的索引。若是唯一索引,那么在插入时需要判断插入的记录是否唯一,这需要读取辅助索引页。这不就完蛋了,insert buffer不起作用喽!

11.3架构实现

11.3.1 存储结构

不用说,B+树!键值就是待插入到辅助索引页的page_no。B+树索引页的大小一样为16kb,内存同样使用缓冲池。

innodb存储引擎存在一个insert buffer bitmap页,用来追踪每个缓存页的剩余空间,当剩余空间小于某个阈值时,

占坑
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: