这篇文章将讨论最新的特性在MySQL 8.0.30:动态重做日志大小。InnoDB缓冲池大小后,我们可以说,有一个适当大小的重做日志对MySQL的性能是至关重要的。有许多博客如何计算一个优秀的重做日志大小。我们的一个典型的博客从男爵是这个:如何计算一个好的InnoDB日志文件大小(博客自2008年,仍然是一个有效的公式使用。)
现在,问题是这个特性试图解决?
在MySQL、缓冲池和重做日志大小设置不经常变化。通常,这些设置将在数据库安装;之后,他们被遗忘,直到出现了一个问题。问题是他们曾经是静态的,这意味着你必须重新启动MySQL可能的更改生效。
MySQL的缓冲池问题解决动态调整在MySQL 5.7。现在,MySQL 8.0.30解决重做日志的问题。调整简单明了:
|
1
|
mysql>
集全球
innodb_redo_log_capacity=2*1024年*1024年*1024;
|
此设置工作调整到更高和更低的价值比目前的定义。做这项工作,现在重做日志文件驻留在一个新目录内datadir命名# innodb_redo除非另一个指定的目录innodb_log_group_home_dir变量。有两种类型的重做日志文件,普通和备用。普通的重做日志文件是那些被使用。多余的重做日志文件是那些等待被使用。InnoDB数目保持在32个重做日志文件,每个文件大小等于1/32 * innodb_redo_log_capacity;然而,文件大小可能不同修改后一段时间innodb_redo_log_capacity设置。
使用一个重做日志文件# ib_redoN命名约定,其中N是重做日志文件数。用一个备用的重做日志文件_tmp后缀。下面的示例显示了在一个重做日志文件# innodb_redo目录,18个活跃的重做日志文件和14个多余的重做日志文件按顺序编号。
|
1
2
3
|
美元
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
|
几个状态变量监测提供重做日志和重做日志调整操作能力;raybet雷竞技竞猜在线官网例如,您可以查询Innodb_redo_log_resize_status查看的状态调整操作:
|
1
2
3
4
5
6
|
mysql>
显示
全球
状态
就像
“Innodb_redo_log_resize_status”;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|Variable_name|
价值
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|Innodb_redo_log_resize_status|好吧|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|
的Innodb_redo_log_capacity_resized状态变量显示当前重做日志容量限制:
|
1
2
3
4
5
6
|
mysql>
显示
全球
状态
就像
“Innodb_redo_log_capacity_resized”;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|Variable_name|
价值
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|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
MySQL 8.0.30还介绍了一些新的错误消息与这个问题有关。提到几个:
- ER_IB_MSG_LOG_WRITER_OUT_OF_SPACE
- ER_IB_MSG_LOG_WRITER_ABORTS_LOG_ARCHIVER
- ER_IB_MSG_LOG_WRITER_WAITING_FOR_ARCHIVER
- ER_IB_MSG_LOG_WRITER_WAIT_ON_NEW_LOG_FILE
- ER_IB_MSG_LOG_WRITER_ENTERED_EXTRA_MARGIN
- ER_IB_MSG_LOG_WRITER_WAIT_ON_CONSUMER
如果你想查看更多,你可以使用这个链接。所有重做日志错误消息使用ER_IB_MSG_LOG_WRITER_命名约定。
估计的重做日志的能力
有了这些新的状态变量,我们可以估计的重做日志大小使用以下查询:
|
1
|
mysql>
显示
全球
状态
就像
“Innodb_redo_log_current_lsn”;
选择
睡眠(60);
显示
全球
状态
就像
“Innodb_redo_log_current_lsn”;
|
和前面的查询提供的输出,我们运行以下:
|
1
2
3
4
5
6
7
|
mysql
>
选择
腹肌(20641693317- - - - - -20903377487)/1024年/1024年
作为
MB_per_min;
+ - - - - - - - - - - - - - - - - +
|MB_per_min
|
+ - - - - - - - - - - - - - - - - +
|249.56147194|
+ - - - - - - - - - - - - - - - - +
1
行
在
集
(0.00sec)
|
所以,在这种情况下,写在~ 250 m / min重做日志文件,一个好的价值将250 * 60(1小时),相当于15 gb。
弃用参数
做这项工作,MySQL弃用两个参数:innodb_log_files_in_group和innodb_log_file_size。
如果你想设置的my.cnf文件,他们将被忽略,警告将打印错误日志:
|
1
2
|
2022年- - - - - -08年- - - - - -07年t20:23:39.898370z0(警告)(我的- - - - - -013869](InnoDB]忽略了弃用配置参数innodb_log_file_size。使用innodb_redo_log_capacity代替。
2022年- - - - - -08年- - - - - -07年t20:23:39.898441z0(警告)(我的- - - - - -013870](InnoDB]忽略了弃用配置参数innodb_log_files_in_group。使用innodb_redo_log_capacity代替。
|
结论
动态重做日志大小带来了更大的灵活性,DBA以防他需要调整,并为MySQL重启应用程序不能停止。写这篇文章的时候,没有相关的bug报告这个特性。一条建议是检查如果你备份工具兼容MySQL 8.0.30及其新功能。最后,一定要检查你的存在my.cnf由于弃用参数。
有用的资源
你可以达到我们通过社交网络,我们的论坛,或访问我们的材料使用下面的链接:






嗨
我们应该把“的数量相当于15 gb”博客的日志文件成员从2008年?
你好,
不,没有必要,因为新的重做日志大小,MySQL自动管理底层的文件。例如,如果计算的理想重做大小,发现它是10 gb。
你需要运行以下:
mysql >集全球innodb_redo_log_capacity = 10 * 1024 * 1024 * 1024;
让我知道如果有帮助!
你好,
不,没有必要,因为新的重做日志大小,MySQL自动管理底层的文件。例如,如果计算的理想重做大小,发现它是10 gb。
你需要运行以下:
让我知道如果有帮助!