目录

6.2 磁盘结构

6.2.1 System Tablespace

InnoDB系统表空间包含InnoDB数据字典(InnoDB相关对象的元数据)

它之所以被称为系统表空间,是因为它可以被多个用户表共享。系统表空间可以由一个或多个数据文件构成。在默认情况下,只会创建一个名为ibdata1的共享表空间文件。但可以使用innodb_data_file_path启动选项控制共享表空间的数量和大小。

6.2.2 双写

插入缓冲带来的是针对普通索引插入性能上的提升,而double write就是保证写入的安全性防止在Mysql实例发生宕机时,InnoDB发生数据页部分页写(partialpage write)的问题。数据库实例崩溃,我们可以通过redo log进行恢复,不会有任何问题,但redo log文件记录的是页的物理操作,如果页都损坏了,是无法进行任何恢复操作的巧妇难为无米之炊就是这个道理。所以我们需要页的一个副本,如果实例宕机了,可以先通过副本把原来的页还原出来,再通过redo log进行恢复,重做。这就是double write的作用。

双写系统空间中的存储区域(从8.0.20开始独立出来了) ,InnoDB缓冲池中刷出的脏页在被写入数据文件之前,都先会写入double write buffer,然后从两次写缓冲区分两次,每次将1MB大小的数据写入磁盘共享表空间(double write),最后再从double write buffer写入数据文件。

6.2.3 Undo Logs

用于存放事务修改之前的旧数据(undo log记录了有关如何撤销事务对聚集索引记录的最新更改的信息),基于undo实现了MVCC和一致性非锁定读。

6.2.4 File-Per-Table

设置参数innodb_file_per_table=1启用独立表空间时,每个表都会对应生成一个.ibd文件用于存放自己的索引和数据等;否则,在创建表时数据和索引将被存放在ibdata系统表空间文件中(系统表空间)。

6.2.5 General Tablespaces

使用CREATE TABLESPACE语法创建的InnoDB共享表空间(tablespace_name.ibd)。可以在MySQLdatadir之外创建,能够保存多个表,并支持所有行格式的表。

6.2.6 Undo Tablespace

undo表空间,包含一个或多个undo log文件,文件个数由配置参数innodb_undo_tablespaces控制

6.2.7 Temporary Tablespace

临时表空间用于存放非压缩的InnoDB临时表和相关对象。配置参数innodb_temp_data_file_path为临时表空间的数据文件定义了相对路径和初始大小等。

 innodb_temp_data_file_path参数,则会在数据目录中创建一个名为ibtmp1的自动扩展的12MB初始大小的文件

6.2.8 Redo Logs

重做日志是在崩溃恢复期间使用的基于磁盘的数据结构文件,用于恢复不完整提交事务写入的数据