1、InnoDB 体系架构简述
InnoDB 存储引擎架构分为两部分:
一个是InnoDB内存结构
一个是InnoDB磁盘结构
-
InnoDB 表(Tables)
-
InnoDB 索引(Indexes)
-
InnoDB 表空间(Tablespaces)
-
InnoDB 双写缓冲区(Doublewrite Buffer)
-
InnoDB 重做日志(Redo Log)
-
InnoDB 撤销日志(Undo Logs)
InnoDB 存储引擎采用了后写机制(还有人称为日志先行策略),也就是说当对数据进行修改时,先记录在内存中,然后由数据库线程刷新到磁盘文件。
事务的操作就会记录成 Redo Log (重做日志),然后转换为顺序的IO来提交事务。也就是说当事务记录到日志中之后,就表示事务已经完成了,会立即返回信息给用户。实际上,数据的操作可能还在内存中,并没有刷新到磁盘。所以,如果这时机器出现故障,那么这部分数据就会丢失。
InnoDB 存储引擎通过 Redo Log 来保证数据的一致性。有人会说那就保存所有的 Redo Log 不就万无一失了,这样系统出现故障或者崩溃后,根据日志重建数据,很显然这样是理想状态。InnoDB 存储引擎为了解决这个问题,引入了检查点机制,通过定时检查,可以保证在检查点之前的日志都写入磁盘,只会丢失一小部分数据。那么这些机制具体是怎么运转的呢,小编会另起文章详细参数。下面先上两张图,从整体上看一下 InnoDB 存储引擎的架构,后文会对其进行分解阐述。
官网的InnoDB 存储引擎图:
下图是网上找到的InnoDB 存储引擎架构图,很遗憾最终没有找到出处,感谢绘制这张图的作者。