• 插入缓冲(change buffer)
  • 两次写(double write)
  • 自适应哈希索引(adaptive hash index)

    插入缓冲

    插入缓冲的作用是把普通索引上的DML操作从随机I/O变成顺序I/O,提供I/O效率。
    工作原理:先判断插入的普通索引页是否在缓冲池中,如果在就直接插入,不在就先放入change buffer中,然后进行change buffer和普通索引的合并操作,可以将多个插入合并到一个操作中

    两次写

    InnoDB使用了一种叫做两次写(double write)的特殊文件flush技术保证写入安全,防止在mysql实例发生宕机时,InnoDB发生数据页部分页写(partial page write)的问题。
    实际上就是在把pages写入data files之前,先写入一个双写缓冲(double write buffer)的连续区域内,在写入双写缓存后,InnoDB才会把pages写入data files,如果在此期间发生意外崩溃,InnoDB就可以在双写缓冲中找到完好的page副本进行恢复。
    双写缓冲是一个位于系统表空间中的存储区域,InnoDB缓冲池中刷出的脏页在被写入数据文件之前,都会写写入双写缓冲。然后从双写缓冲区分两次,每次将1MB大小的数据写入磁盘共享表空间,然后再从双写缓冲写入数据文件。

    自适应哈希索引

    InnoDB存储引擎的一个机制,可以监控索引的搜索,如果InnoDB注意到查询可以通过建立哈希索引得到优化,那么就会自动完成这件事。这一项默认是开启的。
    可以通过innodb_adaptive_hash_index开启和关闭。