MYSQL BINLOG 越来越不重要,事务commmit 同步变异步 与 MYSQL RDS 实现

19ca67c9aa2543506a2243fe9f71a922.png

最近在学习POLARDB, 阿里云的 MYSQL RDS 等产品,发现一个问题,BINLOG 一直在优化,并且有的系统将BINLOG 抛弃掉了,有的系统将BINLOG 的功能弱化了,优化了,提高了系统的性能,MYSQL RDS 在阿里云是在 8.025 这个版本就进行 BINLOG IN REDO 的优化。

而我们的开源的MYSQL ,在这方面也跟上了 RDS 的脚步,基于MYSQL 8.0的版本在性能上有了提升,尤其是在REDO LOG 的写操作上,提高了redo log 的 size ,同时添加了专有的线程来处理REDO 。

MySQL :: MySQL 8.0 Reference Manual :: 8.5.4 Optimizing InnoDB Redo Logging

而优化的手段,在一些特殊的MYSQL的版本中,还在继续,通过REDO LOG 来同步写入BINLOG 也是一种优化MYSQL 写操作的手段。

首先MYSQL 在事务COMMIT 中,经历了  prepare --- sync redo  ---- write-binlog -- sync binlog --commit 等操作过程,在这个过程中可以注意我们有两个数据写入的过程 ,1  REDO  LOG 的写入 2 BINLOG 的写入,而我们都熟知的问题是,在事务的commit 中,I/O的操作是阻碍事务提交速度的一个障碍。

某种变种的MYSQL 就利用了 BINLOG REDO 的方式,将BINLOG SYNC 去掉了,减少了一次事务COMMIT 时的写操作等待。

参见上图,中经过变换BINLOG的同步写方式,已经融合到了 REDO LOG 的同步写,以及BINLOG 已经变成一个异步的写操作。实际上这里并没有减少BINLOG 的数据同步而是一种 合并方式的操作。

3c9b7af64791362a3f786648eddd1c15.png

当事务要提交是,事务binlog events 写入到redo  中,同时将REDO 持久化BINLOG 则采用单独的线程周期化的存储到存储中,整体优化的数据日志的写入的方式。

而当主机宕机是,BINLOG 中的日志可能数据不全,则在重新启动后RECOVERY 数据REDO 会在做一遍,此时BINLOG 会补齐。

而这个的功能的开通需要两个参数 

persist_binlog_to_redo = on 

sync_binlog_interval = 50          ms毫秒

而我们传统中针对MYSQL的参数 sync_binlog 在上面的参数打开后,也就没有用了,直接将sync_binlog 设置为0 ,传统中我们的mysql 在BINLOG 的设置中都是讲这个位置设置为 sync_binlog = 1 保证事务在commit 时前会进行BINLOG 的刷写操作。

虽然在8.0 开启式group commit 的方式,可以通过组提交的方式来降低BINLOG 写入导致的性能问题,但是在事务并不是并发很大的情况下,提升性能有限。想法如果是高并发的系统,sync_binlog = 1 和 设置为 sync_binlog= 0 之间的性能可能相差 5倍之多。

http://dimitrik.free.fr/blog/posts/mysql-performance-80-rw-binlog-impact.html

具体的影响可以上面的文章中对于这个问题有详细的验证。

而普通的MYSQL 的用户怎么来优化REDO LOG 的写操作,那就是让REDO LOG 的缓冲变大,从MYSQL 8.030 版本中可以获得  innodb_redo_ log_capacity 的参数,基于这样的设计导致REDO LOG 不在是我们认为的 2个文件而是 32个文件,每个文件是 innodb_redo_log_capacity 的 32分之一。

而在 8.030 之前的版本是通过 innodb_log_file_size 和  innodb_log_ files_in_group 两个参数来进行控制的。

而如果需要进行大量的INSERT ,UPDATE 操作的系统可以通过提高innodb_log_buffer_size 的配置来提高整体的系统的性能,降低使用磁盘的I/O。

通过最近学习 POLARDB for mysql 和 更新的MYSQL 设计,发现这二者有在REDO 的使用上有类似的地方,都在逐渐抛弃或弱化 BINLOG 针对事务的核心关键项,而将BINLOG 作为数据复制,甚至连数据复制都可以不在被使用。从这里深深感知 BINLOG 的重要性对于MYSQL 越来越低。

另外 阿里云的 MYSQL RDS 和 开源MYSQL 在实现 BINLOG IN REDO 的方式和方法不同,虽然想法趋同。

0b477dfa53934cdfa9f21573e36cc470.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值