MySQL8.0.30在线调整redo

MySQL8.0.30在线调整redo

  • 概念描述
  • 测试验证
  • 总结

概念描述

redo log 包括两部分:一部分是在内存中的日志缓冲redo log buffer,另一部分是在磁盘上的物理日志文件redo log file。MySQL每执行一次DML操作都会先将记录写入redo log buffer中然后某个时间点再将记录刷到redo log file中,保证了事务的持久性,即只要事务提交成功,那对数据库做的修改就会被永久保存下来。
MySQL最新版本 8.0.30 的发布带来一个与redo日志文件有关的新功能点:在线调整redo日志文件的大小。

测试验证

在8.0.30版本之前,修改redo日志文件大小的步骤比较复杂,如下:

  • 控制redo log文件的传统参数有两个,其最终大小是这两个参数值相乘。

    (1)innodb_log_files_in_group:redo日志磁盘上的文件个数,默认为2.

    (2)innodb_log_file_size:redo日志磁盘上单个文件的大小,默认为48MB。

  • 设置innodb_fast_shutdown=0以确保Innodb刷新所有脏页到磁盘

  • 停掉MySQL实例

  • 删掉数据目录下的旧redo日志文件:

  • 去配置文件my.cnf中修改参数,例如将innodb_log_file_size改为1G,innodb_log_files_in_group改为5:

  • 启动MySQL实例

  • 查看新的数据文件大小:

8.0.30之后,更改redo日志大小:

最新版本 MySQL8.0.30发布后,使用新参数innodb_redo_log_capacity来代替之前的两个参数(目前设置这两个参数依然有效)。使用新参数调整大小非常简单,直接设置为要调整的值就行。
在调整之前,该参数默认值大小为100MB:


该参数会在数据目录下生成’#innodb_redo’的子目录,磁盘文件的存储形式不再是类似 ib_logfileN 这样的文件,而是替代为 #ib_redoN 这样新文件形式。这些新的文件默认存储在’#innodb_redo’ 里。这样的文件一共有32个,按照参数 innodb_redo_log_capacity 来平均分配。


redo日志文件中不带有_tmp后缀的说明是正在使用的日志文件,带有_tmp后缀的是等正在使用的文件写满后再写它。

  • 调整innodb_redo_log_capacity=6G

  • 查看调整后的值大小


新增对应的状态变量innodb_redo_log_capacity_resized,方便在 MySQL 侧监控当前redo日志文件大小:

同时 performance_schema 库里新增表innodb_redo_log_files:获取当前使用的redo日志文件 LSN 区间、实际写入大小、是否已满等统计数据。

总结

  1. redo log的大小是固定的。
  2. redo log是Innodb引擎层实现的,并不是所有引擎都有。
  3. redo log采用循环写的方式记录,当写到结尾时,会回到开头循环写日志。
  4. redo log适用于崩溃恢复(crash-safe)。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值