MySQL那些事(InnoDB架构和存储结构)-四、InnoDB磁盘结构

InnoDB磁盘结构主要包含索引表空间Doublwrite BufferRedo LogUndo Logs,下面我们具体讲讲后面几项的作用。

1、表空间

表空间主要分为系统表空间File-Per-Table表空间General表空间Undo表空间临时表空间

  • 系统表空间:针对Double write buffer和Change buffer的一块存储区域。如果表建立在系统表空间内,那么也会包含表和索引的数据。
  • File-Per-Table表空间:过去InnoDB都是把表数据存储在系统表空间内,这种方式适用于专门用于数据库处理的机器,而File-Per-Table允许每个表数据都可以存储在自己的表空间数据文件里(.ibd文件)。默认都是用这种方式存储表数据。
  • General表空间:共享表空间,可以通过CREATE TABLESPACE语法创建共享表空间。
  • Undo表空间:该表空间包含undo日志,通过该日志可以撤销事务对聚簇索引数据的最新修改,即我们常说的数据回滚。
  • 临时表空间: 除了用于存放临时表数据,还会保存对临时表修改的回滚段。

2、Doublewrite Buffer(双写缓冲区)

双写缓冲区是位于系统表空间内的一块存储区域,InnoDB会在该存储区域完成Buffer Pool中已刷新的page写入。

为什么说叫做双写缓冲区呢?因为数据页在落地数据文件前,首先会往双写缓冲区写入数据,用来保证数据的完整性。

3、Redo Log

Redo log是一种基于磁盘的数据结构,主要用于未完成事务的数据恢复。Redo Log会编码更新表数据的请求,未完成更新数据文件的修改在数据库初始化期间自动重放。

默认情况下,Redo Log在磁盘上分为两个文件:ib_logfile0ib_logfile1,MySQL将会循环写入数据到redo log文件中。

4、Undo Log

Undo log是与单个读写事务相关联的Undo log日志记录的集合,该日志会包含如何撤销事务最新修改的一些信息。

一个事务最多分配4个undo日志文件,每个日志文件对应的操作类型如下:

  • 对表的INSERT操作。
  • 对表的UPADATE和DELETE操作。
  • 对临时表的INSERT操作。
  • 对临时表的UPADATE和DELETE操作。

上一篇:*学习记录


下一篇:【springboot】使用代码生成器快速开发