InnoDB On-Disk Structures 是指存储在磁盘上的 InnoDB 存储引擎的数据结构。
1、 表(Tables)
InnoDB 存储引擎中的表是存储数据的基本单位。每个表由一系列的行组成,每行包含了不同的列和对应的数据。
表操作包括:
- Creating InnoDB Tables
- Creating Tables Externally
- Importing InnoDB Tables
- Moving or Copying InnoDB Tables
- Converting Tables from MyISAM to InnoDB
- AUTO_INCREMENT Handling in InnoDB
参考地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-tables.html
2、索引(Indexes)
索引是用于加速数据查询的数据结构。InnoDB 存储引擎支持多种类型的索引,包括:主键索引、唯一索引和普通索引等。索引可以根据特定的列值快速定位和访问数据。
索引相关,主要包括:
- Clustered and Secondary Indexes
- The Physical Structure of an InnoDB Index
- Sorted Index Builds
- InnoDB Full-Text Indexes
参考地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-indexes.html
3、表空间(Tablespaces)
表空间是 InnoDB 存储引擎中用于存储表和索引的逻辑结构。每个表空间对应一个或多个表,它们可以存储在不同的文件中。
表空间包括:
- The System Tablespace
- File-Per-Table Tablespaces
- General Tablespaces
- Undo Tablespaces
- The Temporary Tablespace
参考地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace.html
4、InnoDB 数据字典(InnoDB Data Dictionary)
InnoDB 数据字典是用于存储和管理数据库对象(如表、索引、列等)的元数据。它包含了数据库结构的定义和描述信息。
InnoDB数据字典,由内部系统表组成,这些表包含用于跟踪表、索引和表列等对象的元数据。元数据物理上位于InnoDB系统中。由于历史原因,数据字典元数据在某种程度上与存储在InnoDB表元数据文件(.frm文件)中的信息重叠。
参考地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-data-dictionary.html
5、双写缓冲(Doublewrite Buffer)
双写缓冲是一种机制,用于确保数据在发生故障时的一致性。它将数据写入两个不同的位置,以提供额外的保护和恢复能力。
参考地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-doublewrite-buffer.html
6、重做日志(Redo Log)
重做日志是 InnoDB 存储引擎中的一种日志文件,用于记录事务的操作。它用于恢复数据的一致性,并支持事务的持久性。
若要更改InnoDB Redo Log 文件的数量或大小,请执行以下步骤:
1、停止MySQL服务器,并确保它关闭没有错误。
2、编辑my.cnf以更改日志文件配置。要更改日志文件大小,请配置innodb_log_file_size。要增加日志文件的数量,请配置innodb_log_files_in_group。
3、重新启动MySQL服务器。
如果InnoDB检测到innodb_log_file_size与重做日志文件大小不同,它会写入日志检查点,关闭并删除旧日志文件,以请求的大小创建新日志文件,并打开新日志文件。
参考地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-redo-log.html
7、撤销日志(Undo Logs)
撤销日志用于回滚事务的操作,以实现数据的一致性。它记录了事务执行前的数据状态,以便在需要时进行回滚操作。
撤消日志是与单个读写事务相关联的撤消日志记录的集合。撤消日志记录包含有关如何撤消事务对聚集索引记录的最新更改的信息。如果另一个事务需要查看作为一致性读取操作的一部分的原始数据,则从撤消日志记录中检索未修改的数据。撤消日志存在于撤消日志段中,撤消日志段包含在回滚段中。回滚段驻留在系统磁盘、撤消表空间和临时磁盘中。
驻留在临时表中的撤消日志用于修改用户定义的临时表中的数据的事务。这些撤消日志不会被重新记录,因为它们不是崩溃恢复所必需的。它们仅用于服务器运行时的回滚。这种类型的撤消日志通过避免重做日志记录I/O来提高性能。
InnoDB最多支持128个回滚段,其中32个分配给临时回滚段。这就留下了96个回滚段,可以分配给修改常规表中数据的事务。innodb_rollback_segments变量定义了InnoDB使用的回滚段的数量。
回滚段支持的事务数取决于回滚段中的撤消槽数和每个事务所需的撤消日志数。回滚段中的撤销槽数量根据InnoDB页面大小而不同。
参考地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-undo-logs.html
On-Disk Structures 在 InnoDB 存储引擎中起着重要的作用,它们的组织和管理方式对于数据库的性能和数据的持久性至关重要。