【MySQL】MySQL8动态调整redo日志的大小
2022-08-12 16:04 abce 阅读(1175) 评论(0) 编辑 收藏 举报MySQL8.0.30引入了一个新特性:动态调整redo日志的大小。
除了InnoDB的buffer pool大小,我们通常会觉得设置合适的redo文件大小对MySQL的性能至关重要。MySQL在5.7中就实现了动态调整buffer pool的大小,但是直到现在8.0.30才实现了动态调整redo文件的大小。
mysql> SET GLOBAL innodb_redo_log_capacity = 2*1024*1024*1024;
为了让修改生效,现在,redo日志文件位于datadir下的一个新的目录:#innodb_redo
可以使用参数innodb_log_group_home_dir设置redo日志文件的路径。
有两种类型的redo日志文件:ordinary类型、spare类型。ordinary类型的redo日志文件是指被使用的redo日志文件;spare类型的redo日志文件是指等待被使用的redo日志文件。InnoDB维护了32个redo日志文件,每个文件的大小是1/32 * innodb_redo_log_capacity。
redo日志文件的命名规则是:#
$ ls
#ib_redo31 #ib_redo33 #ib_redo35 #ib_redo37 #ib_redo39 #ib_redo41 #ib_redo43 #ib_redo45 #ib_redo47 #ib_redo49_tmp #ib_redo51_tmp #ib_redo53_tmp #ib_redo55_tmp #ib_redo57_tmp #ib_redo59_tmp #ib_redo61_tmp
#ib_redo32 #ib_redo34 #ib_redo36 #ib_redo38 #ib_redo40 #ib_redo42 #ib_redo44 #ib_redo46 #ib_redo48 #ib_redo50_tmp #ib_redo52_tmp #ib_redo54_tmp #ib_redo56_tmp #ib_redo58_tmp #ib_redo60_tmp #ib_redo62_tmp
为了监控redo日志文件的状态和大小,增加了一些状态变量。例如:
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_resize_status';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| Innodb_redo_log_resize_status | OK |
+-------------------------------+-------+
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_capacity_resized';
+----------------------------------+------------+
| Variable_name | Value |
+----------------------------------+------------+
| Innodb_redo_log_capacity_resized | 3221225472 |
+----------------------------------+------------+
其他的状态变量:
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
估算redo日志文件的容量
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_current_lsn'; SELECT SLEEP(60); SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_current_lsn';
根据上面的执行结果进行估算:
mysql > SELECT ABS(20641693317 - 20903377487) / 1024 / 1024 AS MB_per_min;
+--------------+
| MB_per_min |
+--------------+
| 249.56147194 |
+--------------+
1 row in set (0.00 sec)
大概是250MB/min,根据该结果,最好是将redo日志容量设置成250*60(1小时),即15GB。
过期的参数
·innodb_log_files_in_group
·innodb_log_file_size
如果尝试在my.cnf文件中设置该过期参数,设置会被忽略,并会在错误日志中打印警告信息:
2022-08-07T20:23:39.898370Z 0 [Warning] [MY-013869] [InnoDB] Ignored deprecated configuration parameter innodb_log_file_size. Used innodb_redo_log_capacity instead.
2022-08-07T20:23:39.898441Z 0 [Warning] [MY-013870] [InnoDB] Ignored deprecated configuration parameter innodb_log_files_in_group. Used innodb_redo_log_capacity instead.