14.6.6 重做日志

重做日志是基于磁盘的数据结构,在崩溃恢复期间用于纠正不完整事务写入的数据。在正常操作期间,重做日志对更改 table 数据的请求进行编码,这些请求是由 SQL 语句或低级 API 调用引起的。在初始化期间以及接受连接之前,会自动重播未完成意外关闭之前未完成更新数据文件的修改。有关重做日志在崩溃恢复中的作用的信息,请参阅第 14.19.2 节“ InnoDB 恢复”

默认情况下,重做日志在磁盘上由名为ib_logfile0ib_logfile1的两个文件物理 table 示。 MySQL 以循环方式写入重做日志文件。重做日志中的数据根据受影响的记录进行编码;此数据统称为重做。数据通过重做日志的传递由不断增加的LSN值 table 示。

有关相关信息,请参见重做日志文件配置第 8.5.4 节“优化 InnoDB 重做日志”

更改 InnoDB 重做日志文件的数量或大小

要更改InnoDB redo log文件的数量或大小,请执行以下步骤:

  • 停止 MySQL 服务器,并确保它关闭且没有错误。

  • 编辑my.cnf以更改日志文件配置。要更改日志文件的大小,请配置innodb_log_file_size。要增加日志文件的数量,请配置innodb_log_files_in_group

  • 再次启动 MySQL 服务器。

如果InnoDB检测到innodb_log_file_size与重做日志文件大小不同,则会写入日志检查点,关闭并删除旧的日志文件,以请求的大小创建新的日志文件,然后打开新的日志文件。

组提交以重做日志刷新

InnoDB像其他任何符合ACID的数据库引擎一样,在提交事务之前先刷新该事务的redo logInnoDB使用group commit功能将多个此类刷新请求分组在一起,以避免每次提交都进行一次刷新。使用组提交,InnoDB向日志文件发出一次写入操作,以对大约同时提交的多个用户事务执行提交操作,从而显着提高了吞吐量。

有关COMMIT和其他事务操作的性能的更多信息,请参见第 8.5.2 节“优化 InnoDB 事务 Management”