MySQL并发复制系列三:MySQL和MariaDB实现对比

并发复制(Parallel Replication) 系列三:MySQL 5.7 和MariaDB 10的parallel replication对比

作者:沃趣科技MySQL数据库工程师  麻鹏飞


        经过上两篇关于MySQL/MariaDB 的Binary Log Group Commit的发展历程和enhanced multi-threaded slave的介绍,相信大家对MySQL 基于Binay Log 的replication的原理以及为了解决主备数据复制延迟问题而引入的enhanced multi-threaded slave 功能,支持从库多线程并发回放主库提交的事务有了更深入的了解。同时为了更好的发挥MySQL 5.7/MariaDB 10 并发复制的性能,两个版本都在主库Binary Log Group Commit的阶段做了更加深入的优化。

        无论是MySQL还是MariaDB在Binary Log Group Commit优化的目的都是:使高并发下的事务尽可能的在同一个时间点提交,然后用一次fsync()的操作将这一组的Binary log缓存的数据写入磁盘。当并发事务可以在同一个时间提交,说明每个线程所执行的事务之间没有锁冲突(如果有锁冲突,并发的事务将无法在同一个时刻提交),那么意味着这一组并发提交的事务在slave机器上能并发重放主库提交的事务,所以我们只需要在master机器对二进制日志进行Group Commit的时候标记上组提交相关信息,slave机器就可以安全的并发执行主库提交的事务。

我们来看一个例子:

事务T1、T2(start transaction)开始事务,落后于事务T3、T4的(start transaction)开始时间,但是这一组事务都在C(commit)时间点提交事务,所以这一组事务(T1、T2、T3、T4)将在master机器上进行Binary Log group Commit,然后该二进制日志推送到slave机器上时可以并发执行这一组被标记的事务。

原理:

       从上面的例子可以看出,并发线程执行不同的事务只要在同一时刻能够commit(说明线程之间没有锁冲突),那么master节点就可以将这一组的事务标记并在slave机器上安全的进行并发重放主库提交的事务。所以尽可能的使所有线程能在同一时刻提交可以极大的提高slave机器并发执行事务的数量使主备数据同步。

      在上一篇文章提到过:MySQL/MariaDB开启Binary Log日志后使 进制日志写入顺序和存储引擎提交顺序保持一致,Binary Log Group Commit分为三个过程:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值