暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql 动态redo log

原创 黄江平 2022-08-21
944

1.dynamic redo log介绍

从MySQL 8.0.30开始,InnoDB支持动态配置重做日志大小。通过这个更改,重做日志文件的数量及其默认位置也发生了变化。从MySQL 8.0.30, InnoDB在data目录下的#innodb_redo目录下维护了32个redo日志。以前版本,InnoDB默认会在data目录下创建两个redo, redo的数量和大小由innodb_log_files_in_group和innodb_log_file_size变量控制。这两个变量现在已弃用。

当innodb_redo_log_capacity设置被定义时,innodb_log_files_in_group和innodb_log_file_size设置被忽略;否则,这些设置用于计算innodb_log_files_in_group * innodb_log_file_size = innodb_redo_log_capacity。如果这些变量都不设置,重做日志容量设置为innodb_redo_log_capacity的默认值,即104857600字节(100MB)。

在InnoDB缓冲池的确定大小之后,拥有一个合适的重做日志大小对MySQL的性能至关重要。innodb缓冲池和Reddo log一般在安装确定后,很少改变,除非出了问题。但当出问题时,如果redo log需要改变,就需要重启mysql服务器。Mysql5.7可以动态调整innodb缓冲池,到了8.0.30后,为了解决修改redo log大小,而不需要重启mysql服务器,出了动态redo log特性。

2.测试动态redo log

mysql [localhost:8030] {msandbox} ((none)) > show variables like ‘innodb_redo_log_capacity’;
±-------------------------±----------+
| Variable_name | Value |
±-------------------------±----------+
| innodb_redo_log_capacity | 104857600 |
±-------------------------±----------+
1 row in set (0.03 sec)
mysql [localhost:8030] {msandbox} ((none)) > select 104857600/1024/1024;
±--------------------+
| 104857600/1024/1024 |
±--------------------+
| 100.00000000 |
±--------------------+
1 row in set (0.00 sec)

Redo log默认100MB,
在数据止录的#innodb_redo目录下面有32个redo文件。InnoDB总共维护32个重做日志文件,每个文件的大小为1/32 * innodb_redo_log_capacity。
重做日志文件使用#ib_redoN命名约定,其中N是重做日志文件号。备用重做日志文件由_tmp后缀表示。下面以#innodb_redo目录下的redo为例,其中1个active redo和31个备用 redo按顺序编号
[root@localhost #innodb_redo]# ll -h
total 100M
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo10_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo11_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo12_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo13_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo14_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo15_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo16_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo17_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo18_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo19_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo20_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo21_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo22_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo23_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo24_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo25_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo26_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo27_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo28_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo29_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo30_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo31_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo32_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo33_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo34_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo35_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo36_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:46 #ib_redo5
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo6_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo7_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo8_tmp
-rw-r-----. 1 root root 3.2M Aug 21 14:44 #ib_redo9_tmp

查看redo log是否调整成功,通过如下变量确认
mysql [localhost:8030] {msandbox} ((none)) > set global innodb_redo_log_capacity=200000000; #调整redo大小
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql [localhost:8030] {msandbox} ((none)) > SHOW GLOBAL STATUS LIKE ‘Innodb_redo_log_resize_status’;
±------------------------------±------+
| Variable_name | Value |
±------------------------------±------+
| Innodb_redo_log_resize_status | OK |
±------------------------------±------+
1 row in set (0.01 sec)
查看当前redo log大小限制限:

mysql [localhost:8030] {msandbox} ((none)) > SHOW GLOBAL STATUS LIKE ‘Innodb_redo_log_capacity_resized’;
±---------------------------------±----------+
| Variable_name | Value |
±---------------------------------±----------+
| Innodb_redo_log_capacity_resized | 199229440 |
±---------------------------------±----------+
1 row in set (0.00 sec)

与redo log相关的状态变量如下:
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

小结一下:
动态重做日志大小为DBA带来了更大的灵活性,以防他需要调整大小,并且能应对应用程序不能以重启mysql服务器来调整。调整这个参数放在my.cnf文件中,要注意过期参数。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论