mysql mts_MySQL进一步完善可用并行复制-MTS并行增量的应用-爱可生

原标题: MySQL进一步完善可用并行复制-MTS并行增量的应用-爱可生

315584f60ba7084e7b87479f546337d1.png

MTS 并行增量应用

MySQL 的复制延迟在早期版本一直存在,MySQL 5.6.3 版本后开始支持并行复制,并在 5.7 进一步完善可用并行复制功能,官方将该功能称为 enhanced multi-threaded slave (简称 MTS),从此复制延迟问题得到很大的改善。

功能背景

DTLE([爱可生数据传输组件]

项目组在 2018年9月4日提出内部功能性需求(issue #211)实现支持 MTS 并行回放功能。

1.MTS (MySQL 5.7) 原理三问

1)首要问题:哪些 TX 可以并行回放?(无冲突!!!)

同一 group_commit 的 TX 可以并行回放,因为这些 TX 都进入了 prepare 阶段,事务之间无冲突。

2)如何记录同一 group_commit ?

每个 TX 都有 sequence number,同一个 binlog file 中 SeqNum 单调递增

group_commit 时记录上一次 (group_) commit 的 TX 的 sequence number, 称为 LastCommit (LC)

3)如何并行回放?

LC 相同的 TX 可以并行回放

LC 更大的 TX 需等待前一组 TX 全部执行完

(MySQL 8.0 引入 WriteSet 并行回放,另议)

想了解更多关于 MTS 的内容可翻阅社区文章

社区投稿 | MySQL 主从复制延时常见场景及分析改善

图解MySQL | [原理解析] MySQL组提交(group commit)

2.MySQL 5.7 如何开启 MTS 支持

设置组提交相关参数参数,之前的版本这两个参数不存在。

-- group_commit 等待时间. 大则并行度提高, 但可能造成空等导致响应变慢

set global binlog_group_commit_sync_delay=10000; --10ms-- group_commit

立即提交TX数量: 即使等待时间未达到, 积压的TX达到此数量则立刻提交set

global binlog_group_commit_sync_no_delay_count=32; -- lessorequal to thread number

3.为 DTLE 配置支持 MTS 的 job

事先配置 一个 DTLE 的 job.json 文件,需要将 ParallelWorkers 参数设置为为并行的线程数

{"Type":"Dest",

"NodeName":"udup1" "Driver":"MySQL","Config": {"Gtid":"",

"ApproveHeterogeneous":true,

"ReplChanBufferSize":600,

"ParallelWorkers":16,

"ConnectionConfig": {

"Host":"127.0.0.1",

"Port":3308,

"User":"root",

"Password":"password"

}

}

}

注意:MTS仅影响增量复制

4.生成 MTS 数据

1. 纯 INSERT(可用于性能 benchmark, 无益于正确性检测)

2. 通过 sysbench 等多线程写入(增+删+改)。

3.观察 MTS Binlog

dtle/helper/mtswatcher/mtswatcher.gocd dtlemake mtswatcher

# auto get newest gtid./dist/mtswatcher -host127.0.0.1 -port3308 -user root -password password# or assign an (executed) gtid./dist/mtswatcher -host127.0.0.1 -port3308 -user root -password password -gtid"f2a4aa16-c8e6-11e7-9ff0-e19f7778f563:1-860460"

输出:属于同一 LC 的 TX 数量

lc:4065 nTxOfThisLc:16 totalTx:4077lc:4081 nTxOfThisLc:16 totalTx:4093lc:4097 nTxOfThisLc:6 totalTx:4099lc:4103 nTxOfThisLc:1 totalTx:4100lc:4104 nTxOfThisLc:16 totalTx:4116lc:4120 nTxOfThisLc:16 totalTx:4132

5.版本注意

5.7 -> 5.6∘依旧可并行回放

5.6 -> 5.*∘如果 seq 为 0,则将其视为 5.6 binlogEntry 并按顺序重播。

6.简单测试

使用如上生成器生成 64000 rows(MySQL 并行度 64)

-- 目标端

set global binlog_group_commit_sync_delay =10000; --10000us =10msset global binlog_group_commit_sync_no_delay_count =16;64000 rows, udup job.json"ParallelWorkers":161 m 21 s∘同样的时间,MTS 代码(多线程单线程逻辑通用),单线程回放 "ParallelWorkers":19815 rows∘同样的时间,无 MTS 代码

8942 rows

7.总结

DTLE 不仅关注数据传输的效率,也可优化数据回放效率,能够很好的支持 MySQL 的MTS功能实现数据的并行回放。在回放过程中,在源端的 MySQL 中提前设置好恰当的 MTS 的参数,再根据 DTLE 的配置,即可利用 MySQL 5.7 的 MTS 机制增加回放速度。

编辑

责任编辑:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值