MySQL :: MySQL 8.4 参考手册 :: 17.6.5 重做日志

配置重做日志容量

innodb_redo_log_capacity 系统变量控制重做日志文件占用的磁盘空间量。您可以在启动时或在运行时使用SET GLOBAL 语句在选项文件中设置此变量;例如,以下语句将重做日志容量设置为 8GB:

SET GLOBAL innodb_redo_log_capacity = 8589934592;当在运行时设置时,配置更改会立即发生,但新限制可能需要一些时间才能完全实施。如果重做日志文件占用的空间小于指定值,则脏页将不那么积极地从缓冲池刷新到表空间数据文件,最终会增加重做日志文件占用的磁盘空间。如果重做日志文件占用的空间大于指定值,则脏页将更积极地刷新,最终会减少重做日志文件占用的磁盘空间。

如果未定义 innodb_redo_log_capacity,并且未定义 innodb_log_file_size 或 innodb_log_files_in_group,则使用默认的 innodb_redo_log_capacity 值。

如果未定义 innodb_redo_log_capacity,并且定义了 innodb_log_file_size 和/或 innodb_log_files_in_group,则 InnoDB 重做日志容量计算为 (innodb_log_files_in_group * innodb_log_file_size)。此计算不会修改未使用的 innodb_redo_log_capacity 设置的值。

Innodb_redo_log_capacity_resized 服务器状态变量指示所有重做日志文件的总重做日志容量。

重做日志文件位于数据目录中的 #innodb_redo 目录中,除非innodb_log_group_home_dir 变量指定了其他目录。如果定义了innodb_log_group_home_dir,则重做日志文件位于该目录中的 #innodb_redo 目录中。重做日志文件有两种类型:普通日志文件和备用日志文件。普通重做日志文件是正在使用的文件。备用重做日志文件是等待使用的文件。InnoDB 尝试总共维护 32 个重做日志文件,每个文件的大小等于 1/32 * innodb_redo_log_capacity;但是,在修改 innodb_redo_log_capacity 设置后的一段时间内,文件大小可能会有所不同。

重做日志文件使用 #ib_redoN 命名约定,其中 N 是重做日志文件编号。备用重做日志文件由 _tmp 后缀表示。以下示例显示了 #innodb_redo 目录中的重做日志文件,其中有 21 个活动重做日志文件和 11 个备用重做日志文件,按顺序编号。

'#ib_redo582' '#ib_redo590' '#ib_redo598' '#ib_redo606_tmp'

'#ib_redo583' '#ib_redo591' '#ib_redo599' '#ib_redo607_tmp'

'#ib_redo584' '#ib_redo592' '#ib_redo600' '#ib_redo608_tmp'

'#ib_redo585' '#ib_redo593' '#ib_redo601' '#ib_redo609_tmp'

'#ib_redo586' '#ib_redo594' '#ib_redo602' '#ib_redo610_tmp'

'#ib_redo587' '#ib_redo595' '#ib_redo603_tmp' '#ib_redo611_tmp'

'#ib_redo588' '#ib_redo596' '#ib_redo604_tmp' '#ib_redo612_tmp'

'#ib_redo589' '#ib_redo597' '#ib_redo605_tmp' '#ib_redo613_tmp'每个普通重做日志文件都与特定范围的 LSN 值相关联;例如,以下查询显示了上一个示例中列出的活动重做日志文件的 START_LSN 和 END_LSN 值

mysql> SELECT FILE_NAME, START_LSN, END_LSN FROM performance_schema.innodb_redo_log_files;

+----------------------------+--------------+--------------+

| FILE_NAME | START_LSN | END_LSN |

+----------------------------+--------------+--------------+

| ./#innodb_redo/#ib_redo582 | 117654982144 | 117658256896 |

| ./#innodb_redo/#ib_redo583 | 117658256896 | 117661531648 |

| ./#innodb_redo/#ib_redo584 | 117661531648 | 117664806400 |

| ./#innodb_redo/#ib_redo585 | 117664806400 | 117668081152 |

| ./#innodb_redo/#ib_redo586 | 117668081152 | 117671355904 |

| ./#innodb_redo/#ib_redo587 | 117671355904 | 117674630656 |

| ./#innodb_redo/#ib_redo588 | 117674630656 | 117677905408 |

| ./#innodb_redo/#ib_redo589 | 117677905408 | 117681180160 |

| ./#innodb_redo/#ib_redo590 | 117681180160 | 117684454912 |

| ./#innodb_redo/#ib_redo591 | 117684454912 | 117687729664 |

| ./#innodb_redo/#ib_redo592 | 117687729664 | 117691004416 |

| ./#innodb_redo/#ib_redo593 | 117691004416 | 117694279168 |

| ./#innodb_redo/#ib_redo594 | 117694279168 | 117697553920 |

| ./#innodb_redo/#ib_redo595 | 117697553920 | 117700828672 |

| ./#innodb_redo/#ib_redo596 | 117700828672 | 117704103424 |

| ./#innodb_redo/#ib_redo597 | 117704103424 | 117707378176 |

| ./#innodb_redo/#ib_redo598 | 117707378176 | 117710652928 |

| ./#innodb_redo/#ib_redo599 | 117710652928 | 117713927680 |

| ./#innodb_redo/#ib_redo600 | 117713927680 | 117717202432 |

| ./#innodb_redo/#ib_redo601 | 117717202432 | 117720477184 |

| ./#innodb_redo/#ib_redo602 | 117720477184 | 117723751936 |

+----------------------------+--------------+--------------+执行检查点时,InnoDB 会将检查点 LSN 存储在包含此 LSN 的文件的标头中。在恢复期间,将检查所有重做日志文件,并从最新的检查点 LSN 开始恢复。

提供了一些状态变量用于监控重做日志和重做日志容量调整操作;例如,您可以查询 Innodb_redo_log_resize_status 以查看调整操作的状态

mysql> SHOW STATUS LIKE 'Innodb_redo_log_resize_status';

+-------------------------------+-------+

| Variable_name | Value |

+-------------------------------+-------+

| Innodb_redo_log_resize_status | OK |

+-------------------------------+-------+Innodb_redo_log_capacity_resized 状态变量显示当前的重做日志容量限制

mysql> SHOW STATUS LIKE 'Innodb_redo_log_capacity_resized';

+----------------------------------+-----------+

| Variable_name | Value |

+----------------------------------+-----------+

| Innodb_redo_log_capacity_resized | 104857600 |

+----------------------------------+-----------+其他适用的状态变量包括

Innodb_redo_log_checkpoint_lsn

Innodb_redo_log_current_lsn

Innodb_redo_log_flushed_to_disk_lsn

Innodb_redo_log_logical_size

Innodb_redo_log_physical_size

Innodb_redo_log_read_only

Innodb_redo_log_uuid

有关更多信息,请参阅状态变量说明。

您可以通过查询 innodb_redo_log_files Performance Schema 表来查看有关活动重做日志文件的信息。以下查询从表的所有列中检索数据

SELECT FILE_ID, START_LSN, END_LSN, SIZE_IN_BYTES, IS_FULL, CONSUMER_LEVEL

FROM performance_schema.innodb_redo_log_files;