美文网首页数据库
Mysql 的并行复制

Mysql 的并行复制

作者: 宇晨棒棒的 | 来源:发表于2020-05-12 15:19 被阅读0次

1.依据binlog和pos节点主从复制

一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) —–>IO Thread (从) —–> SQL Thread(从)。复制出现延迟一般出在两个地方

1)SQL线程忙不过来(可能需要应用数据量较大,可能和从库本身的一些操作有锁和资源的冲突;主库可以并发写,SQL线程不可以;主要原因)

2)网络抖动导致IO线程复制延迟(次要原因)。

2.并行复制

MySQL从5.6开始有了SQL Thread多个的概念,可以并发还原数据,即并行复制技术。

MySQL5.6中,设置参数slave_parallel_workers=4(>1),即可有4个SQL Thread(coordinator线程)来进行并行复制,其状态为:Waiting for an evant from Coordinator。

但是其并行只是基于Schema(schema就是数据库对象的集合,所谓的数据库对象也就是常说的表,索引,视图,存储过程)的,也就是基于库的。如果数据库实例中存在多个Schema,这样设置对于Slave复制的速度可以有比较大的提升。通常情况下单库多表是更常见的一种情形,那基于库的并发就没有卵用。

其核心思想是:不同schema下的表并发提交时的数据不会相互影响,即slave节点可以用对relay log中不同的schema各分配一个类似SQL功能的线程,来重放relay log中主库已经提交的事务,保持数据与主库一致。

3.并行复制的优化

在MySQL 5.7中,引入了基于组提交的并行复制(Enhanced Multi-threaded Slaves),设置参数slave_parallel_workers>0并且global.slave_parallel_type=‘LOGICAL_CLOCK’,即可支持一个schema下,slave_parallel_workers个的worker线程并发执行relay log中主库提交的事务。

其核心思想:一个组提交的事务都是可以并行回放(配合binary log group commit);

slave机器的relay log中 last_committed相同的事务(sequence_num不同)可以并发执行。

其中,变量slave-parallel-type可以有两个值:DATABASE 默认值,基于库的并行复制方式;LOGICAL_CLOCK:基于组提交的并行复制方式

4.配置信息:

MySQL 5.7开启Enhanced Multi-Threaded Slave配置:

slave配置文件中添加如下内容:

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=16

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON

只需要在slave下进行操作,具体操作如下:

编辑slave数据库的配置文件,添加内容

[root@server6 mysql]# vim /etc/my.cnf

server-id=2

gtid-mode=on

enforce-gtid-consistency=1

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=16

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON

master_info_repository解释

开启MTS功能后,务必将参数master_info_repostitory设置为TABLE,这样性能可以有50%~80%的提升。这是因为并行复制开启后对于元master.info这个文件的更新将会大幅提升,资源的竞争也会变大。在之前InnoSQL的版本中,添加了参数来控制刷新master.info这个文件的频率,甚至可以不刷新这个文件。因为刷新这个文件是没有必要的,即根据master-info.log这个文件恢复本身就是不可靠的。在MySQL 5.7中,I可以将master_info_repository设置为TABLE,来减小这部分的开销。

slave_parallel_workers解释

若将slave_parallel_workers设置为0,则MySQL 5.7退化为原单线程复制,但将slave_parallel_workers设置为1,则SQL线程功能转化为coordinator线程,但是只有1个worker线程进行回放,也是单线程复制。然而,这两种性能却又有一些的区别,因为多了一次coordinator线程的转发,因此slave_parallel_workers=1的性能反而比0还要差

编辑完成,重启服务

可查看线程数量:show processlist;

show processlist

相关文章

  • 2.安装部署

    源码编译 MySQL编译依赖 必备的包和工具 功能需要的包 功能定制 MySQL限流SQL限流并行复制Thread...

  • MySQL并行复制

    传统复制: 多线程模型: 分发事务疑问 事务分发基本要求 MySQL 各版本并行复制策略

  • Mysql 的并行复制

    1.依据binlog和pos节点主从复制 一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ...

  • MySQL的并行复制

    MySQL的主从复制延迟一直是受开发者最为关注的问题之一,MySQL从5.6版本开始追加了并行复制功能,目的就是为...

  • WriteSet并行复制

    author:sufei 源码版本:5.7.26 一、MySQL并行复制过程的发展 库间并发 理论依据: 一个数据...

  • MySQL的并行复制策略

    前面介绍的MySQL 的主从复制流程如下所示: 主备延迟的主要原因在于,master A 上产生 binlog 的...

  • MySQL开启 WriteSet并行复制

    # 从库需要执行stop slave;set global binlog_transaction_dependen...

  • 基于GTID的主从实践系列之④并行复制搭建及测试

    并行复制最早在5.6就搞出来了,是一个库级别的并行复制(slave_parallel_type可以有两个值:DAT...

  • mysql5.7.17并行复制bug复现

    背景 疑问 课前知识(并行复制-COMMIT_ORDER) 疑问1分析(这个bug一定会导致数据不一致吗) 疑问2...

  • MySQL 5.7 并行复制解决复制延迟问题

    一、缘由: 某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下。 一般主从复制,有三个线程参与,都是...

网友评论

    本文标题:Mysql 的并行复制

    本文链接:https://www.haomeiwen.com/subject/dqmbnhtx.html