InnoDB 关键特性

InnoDB存储引擎的关键特性包括:

  • 插入缓冲(Insert Buffer)
  • 两次写(Double Write)
  • 自适应哈希索引(Adaptive Hash Index)
  • 异步IO(Async IO)
  • 刷新邻接页(Flush Neighbor Page)

上述这些特性为InnoDB存储引擎带来更好的性能以及更高的可靠性。

插入缓冲

给InnoDB 带来性能提升

1. Insert Buffer

对于非聚集索引插入更新操作,不是每一次直接插入到索引页中,而是

  1. 先判断插入的非聚集索引页是否在缓冲池中,若在,则直接插入;若不在,则先放入到一个Insert Buffer中。
  2. 然后再以一定频率和情况进行 Insert Buffer 和辅助索引页 子节点的 merge(合并)操作,这是通常能将多个插入合并到一个操作中(因为在一个索引页中),大大提高对非聚集索引插入的性能。

同时满足两个条件:

  1. 索引是辅助索引(secondary index);
  2. 索引不是唯一(unique)的。

2. Change Buffer

Insert Buffer的升级。对DML操作--Insert、delete、update都进行缓冲,分别是:Insert Buffer、delete Buffer、purge Buffer。

对一条记录的update操作分为2个过程:

  1. 将记录标记为删除;
  2. 真正将记录删除。

delete Buffer 对应update操作的第一个过程。purge Buffer对应第二个过程。

3. Insert Buffer 内部实现

4. Merge Insert Buffer

两次写

给 InnoDB 带来数据页可靠性

当写入失效发生时,先通过页的副本来还原该页,再进行重做,这就是double write。

自适应Hash索引

InnoDB 会监控对表上各索引页的查询。如果观察到简历哈希索引能提升速度,则建立,称之为自适应Hash索引(Adaptive Hash Index,AHI)

AHI 通过缓冲池B+树页构造,因此建立速度很快,且不需要对整张表构建。

InnoDB 会自动根据访问频率模式来自动为某些热点页建立。

异步IO(AIO)

Sync IO,即没进行一次IO,需要等待此次结束后才能继续接下来的操作。但是如果用户发出一条索引扫描查询,可能需要扫描多个索引页,即多次IO。这样做是没必要的。可以发出一个IO请求后立即发另一个,当全部发完,等待所有IO完成,即AIO。

另一个优势是可以进行IO merge操作,即将多个IO合并为1个IO

刷新邻接页(Flush Neighbor Page)

工作原理:当刷新一个脏页时,检测该页所在区(extent)的所有页,如果是脏页,则一起刷新。

问题

  1. 是不是可能将不怎么脏的页进行了写入,而该页之后又会很快变成脏页?
  2. 固态硬盘有较高的IOPS,是否还需要这个特性?

建议

  1. 对传统机械硬盘建议启用;
  2. 对固态硬盘有着超高IOPS性能的磁盘,建议关闭。

你可能感兴趣的:(InnoDB 关键特性)