14.6.6 重做日志
重做日志是基于磁盘的数据结构,在崩溃恢复期间用于纠正不完整事务写入的数据。在正常操作期间,重做日志对更改 table 数据的请求进行编码,这些请求是由 SQL 语句或低级 API 调用引起的。在初始化期间以及接受连接之前,会自动重播未完成意外关闭之前未完成更新数据文件的修改。有关重做日志在崩溃恢复中的作用的信息,请参阅第 14.19.2 节“ InnoDB 恢复”。
默认情况下,重做日志在磁盘上由名为ib_logfile0
和ib_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 log。 InnoDB
使用group commit功能将多个此类刷新请求分组在一起,以避免每次提交都进行一次刷新。使用组提交,InnoDB
向日志文件发出一次写入操作,以对大约同时提交的多个用户事务执行提交操作,从而显着提高了吞吐量。
有关COMMIT
和其他事务操作的性能的更多信息,请参见第 8.5.2 节“优化 InnoDB 事务 Management”。