谷歌、脸书、魔兽世界都在用!InnoDB是什么?有哪些关键特性?( 二 )


文章插图
▲图2-1 InnoDB存储引擎体系架构
后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据 。此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态 。
InnoDB存储引擎是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务 。
InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理 。因此可将其视为基于磁盘的数据库系统(Disk-base Database) 。在数据库系统中,由于CPU速度与磁盘速度之间的鸿沟,基于磁盘的数据库系统通常使用缓冲池技术来提高数据库的整体性能 。
缓冲池简单来说就是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响 。
在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中,这个过程称为将页“FIX”在缓冲池中 。下一次再读相同的页时,首先判断该页是否在缓冲池中 。若在缓冲池中,称该页在缓冲池中被命中,直接读取该页 。否则,读取磁盘上的页 。

谷歌、脸书、魔兽世界都在用!InnoDB是什么?有哪些关键特性?

文章插图
▲图2-2 InnoDB内存数据对象
通常来说,数据库中的缓冲池是通过LRU(Latest Recent Used,最近最少使用)算法来进行管理的 。即最频繁使用的页在LRU列表的前端,而最少使用的页在LRU列表的尾端 。当缓冲池不能存放新读取到的页时,将首先释放LRU列表中尾端的页 。
04 InnoDB关键特性InnoDB存储引擎的关键特性包括:
  • 插入缓冲(Insert Buffer)
  • 两次写(Double Write)
  • 自适应哈希索引(Adaptive Hash Index)
  • 异步IO(Async IO)
  • 刷新邻接页(Flush Neighbor Page)
上述这些特性为InnoDB存储引擎带来更好的性能以及更高的可靠性 。
关于作者:姜承尧(David Jiang),资深MySQL数据库专家,擅长于数据库的故障诊断、性能调优、容灾处理、高可用和高扩展研究,同时一直致力于MySQL数据库底层实现原理的研究和探索 。此外,对高性能数据库和数据仓库也有深刻而独到的理解 。曾为MySQL编写了许多开源工具和性能扩展补丁,如广受好评的InnoDB引擎二级缓存项目 。
本文摘编自《MySQL技术内幕:InnoDB存储引擎(第2版)》,经出版方授权发布 。
  




推荐阅读