8.0 新特性-Redo 配置的变化

文若1年前技术文章400

说明

本篇文章将介绍 MySQL Redo 日志的作用,及需要关注的参数,在 5.7、8.0 Redo 的变化。

1. Redo 日志介绍

1.1. Redo 有什么作用

为了取得更好的读写性能,InnoDB 会将数据缓存在内存中(InnoDB Buffer Pool)对磁盘数据的修改也会落后于内存,这时如果进程或机器崩溃,会导致内存数据丢失,为了保证数据库本身的一致性和持久性,InnoDB 维护了 REDO LOG。

修改 Page 之前需要先将修改的内容记录到 REDO 中,并保证 REDO LOG 早于对应的 Page 落盘,也就是常说的 WAL(Write Ahead Log)日志优先写,Redo Log 的写入是顺序 IO,可以获得更高的 IOPS 从而提升数据库的性能。

当故障发生导致内存数据丢失后,InnoDB 会在重启时,通过重放 REDO,将 Page 恢复到崩溃前的状态。

1.2. Redo 大小区别

使用日志可以提升数据库的性能,那对于数据库来讲,还有什么因素会影响数据库的性能呢?那就是 Redo 日志文件的空间大小。

Redo 日志文件的容量是固定的,它是循环使用的,如果不够用了,就会引发一个 checkpoint 刷脏页的操作,让最小有效的 LSN 向前推,让出一部分空间给新产生的日志来使用。也就是说,只要日志空间未用完,Buffer Pool 中的脏页可以不用刷到磁盘(其它刷盘时机先不谈,单指因日志空间不够引起的刷盘)任务的修改都是在内存中,速度非常可观。

但也不是越大越好,如果 Redo 设置的很大,性能固然会很好,但如果数据库异常宕机了,此时有很多的日志都没有刷盘,恢复起来可能需要更长的时间。

所以,Redo 日志容量大小的设置,最好与 Buffer Pool 的大小相匹配。如果日志容量过小,Buffer Pool 设置的很大,就会频繁的触发 Buffer Pool 的 checkpoint 操作,大的 Buffer Pool 并不能被有效利用。

下方是官方给出的建议:

Buffer Pool Size

Log File Size

Less than 8GB

512MB

8GB to 128GB

1024MB

Greater than 128GB

2048MB

Enabling Automatic Configuration for a Dedicated MySQL Server

2. Redo 的配置

2.1. 8.0.30 之前的版本

在 MySQL 8.0.30(也包含 5.7 版本) 版本 Redo 的配置相关的参数主要有下面两个:

  1. innodb_log_files_in_group:Redo 文件的个数,默认为 2。

  2. innodb_log_file_size:Redo 在磁盘上,单个文件的大小。

> du -sh ib_logfile*
128M	ib_logfile0
128M	ib_logfile1

> cat /etc/my.cnf | grep innodb_log_file_size
innodb_log_file_size = 128M

该参数不支持在线修改,如果修改需要重启 MySQL 实例。

2.2. 8.0.30 之后的版本

MySQL 8.0.30 版本发布后提供新参数 innodb_redo_log_capacity 代替之前两个参数,不过原来两个参数并没有取消,会自动计算转换为 innodb_redo_log_capacity 抛出警告:

[Warning] [MY-013907] [InnoDB] Deprecated configuration parameters innodb_log_file_size and/or innodb_log_files_in_group have been used to compute innodb_redo_log_capacity=1073741824. Please use innodb_redo_log_capacity instead.

使用新参数配置,非常简单,直接写大小即可,且支持在线修改:

>>> select @@innodb_redo_log_capacity;
+----------------------------+
| @@innodb_redo_log_capacity |
+----------------------------+
|                  104857600 |
+----------------------------+

修改 innodb_redo_log_capacity 为 1G:

set global innodb_redo_log_capacity=1073741824;

innodb_redo_log_capacity 默认为 100MB,如果容量不够,在 MySQL 的错误日志中会有下面的提示:

[Warning] [MY-013865] [InnoDB] Redo log writer is waiting for a new redo log file. Consider increasing innodb_redo_log_capacity.

可使用下方参数设置 Redo 文件存储的目录:

select @@innodb_log_group_home_dir;

磁盘中的文件不在是 ib_logfile0 而是会创建一个 #innodb_redo 文件夹,里面按照 #ib_redo* 的形式存储。

新增 innodb_redo_log_files 表,可以观测 Redo 文件 LSN 区间等信息:

select * from performance_schema.innodb_redo_log_files;


相关文章

开源大数据集群部署(一)集群实施规划

1、集群规划1.1 本次集群规划信息本次实际生产业务体量存在巨大差异,但集群规划内容相同,因此建议实际生产环境按照按照一定比例扩展即可。主机操作系统要求软硬件信息参数配置8C16G操作系统版本Cent...

Python 调用阿里云 OpenAPI 巡检到期云资源

Python 调用阿里云 OpenAPI 巡检到期云资源

前言本篇文章介绍我写的一个程序,通过调用阿里云 OpenAPI 巡检即将到期的云资源。https://github.com/COOH-791/cloud_instance_sentry1. 用途说到云...

热点现象(数据倾斜)怎么产生的,以及解决方法有哪些

热点现象:某个小的时段内,对HBase 的读写请求集中到极少数的Region 上,导致这些region所在的RegionServer 处理请求量骤增,负载量明显偏大,而其他的RgionServer明显...

Doris FE节点故障恢复

Doris FE节点故障恢复

FE故障恢复现象:FE由于元数据损坏导致无法启动            &nbs...

Greenplum数据库建立外部表加载HDFS文件实践指导

Greenplum数据库建立外部表加载HDFS文件实践指导

环境概述(1)     Greenplum数据库版本号Greenplum Database 4.3.0.0POC3 build 45206(基于PostgreS...

ranger_audits更换审计日志保留时间

ranger_audits更换审计日志保留时间

本次测试集群为:hdp: 3.1.5.0-152Infra Solr: 0.1.0Ranger: 1.2.0.3.1修改Solr 的中ranger_audits 数据保留时长HDP、CDP中Range...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。