MySQL 5.7并行复制中并行的真正含义

MySQL 5.7并行复制初理解

我们知道MySQL 5.7并行复制引入了两个值last_committedsequence_numberlast_committed表示事务提交的时候,上次事务提交的编号,在主库上同时提交的事务设置成相同的last_committed。如果事务具有相同的last_committed,表示这些事务都在一组内,可以进行并行的回放。这个机制也是Commit-Parent-Based SchemeWL#6314中的实现方式。不过之后,官方对这种模式做了改进,所以最新的并行回放机制和WL#6314有了不同,详情见Lock-Based SchemeWL#7165

下面介绍一下旧模式Commit-Parent-Based SchemeWL#6314和新模式Lock-Based SchemeWL#7165的不同之处,以及改进的地方。

Commit-Parent-Based Scheme WL#6314

Commit-Parent-Based Scheme简介

  • 在master上,有一个全局计数器(global counter)。在每一次存储引擎提交之前,计数器值就会增加。
  • 在master上,在事务进入prepare阶段之前,全局计数器的当前值会被储存在事务中。这个值称为此事务的commit-parent
  • 在master上,commit-parent会在事务的开头被储存在binlog中。
  • 在slave上,如果两个事务有同一个commit-parent,他们就可以并行被执行。

commit-parent就是我们在binlog中看到的last_committed。如果commit-parent相同,即last_committed相同,则被视为同一组,可以并行回放。

Commit-Parent-Based Scheme的问题

一句话:Commit-Parent-Based Scheme会降低复制的并行程度。

图片描述

解释一下图:

  • 水平虚线表示事务按时间顺序往后走。

  • P表示事务在进入prepare阶段之前读到的commit-parent值的那个时间点。可以简单的视为加锁时间点。

  • C表示事务增加了全局计数器(global counter)的值的那个时间点。可以简单的视为释放锁的时间点

  • P对应的commit-parentlast_commited)是取自所有已经执行完的事务的最大的C对应的sequence_number。举例来说:

    • Trx4的P对应的commit-parentlast_commited)取自所有已经执行完的事务的最大的C对应的sequence_number,也就是Trx1的C对应的sequence_number。因为这个时候Trx1已经执行完,但是Trx2还未执行完。
    • Trx5的P对应的commit-parentlast_commited)取自所有已经执行完的事务的最大的C对应的sequence_number,也就是Trx2的C对应的sequence_number;Trx6的P对应的commit-parentlast_commited)取自所有已经执行完的事务的最大的C对应的sequence_number,也就是Trx2的C对应的sequence_number。所以Trx5和Trx6具有相同的commit-parentlast_commited),在进行回放的时候,Trx5和Trx6可以并行回放。
  • </
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值