当前位置: 首页 > article >正文

MYSQL备库的并行复制

备库在消费中转日志时,其实可以分多个线程同时对多个事务进行消费,但是要满足2个基本原则:

1.涉及同一行数据的多个事务必须在同一个线程中执行,否则会导致数据不一致

2.同一个事务不能被拆开

MYSQL 5.6的并行复制策略(按库并行)

不同的worker执行不同的库上的事务

如果多个库的压力均衡,那效果就还可以。

MariaDB 的并行复制策略(模拟主库的并行模式)

MariaDB的思路是:

1.能在同一组(组提交)提交的事务,一定不会修改同一行

2.主库上可以并行执行的事务,在备库上也一定可以并行执行。

在实现上:

在一组里面提交的事务,有个共同的commit_id。

把commit_id写到binlog里面

在备库分发任务的时候,相同的commit_id就可以分到多个不同的线程并发执行。

这一组事务全部执行完成后,再取下一组。

MYSQL 5.7 的并行复制策略

参数slave-parallel-type,如果参数值为DATABASE,那就是MYSQL5.6的并行策略。

参数值是 LOGICAL_CLOCK,那就是类似于MariaDB的策略。

在主库“同时执行”的策略,在从库是可以同时执行的吗,不能的,因为主库同时执行时还有锁机制来控制各个事务的先后顺序。

MariaDB的策略其实是:同时处于commit状态的事务可以并行执行???

实际上,同时处于prepara阶段的事务就可以并行执行了,因为这时事务就已经执行完了。

而且,在prepara阶段的事务和处于commit状态的事务之间,在备库上也是可以并行执行的。

MYSQL 5.7.22 的并行复制策略

binlog-transaction-dependency-tracking 参数选择三种策略

1.根据多个事务是否在prepara阶段的事务和处于commit状态的事务之间

2.对于每一行计算出hash,如果2个事务的所更改的行的集合没有交集,就是可以并行的

3.在第二种的基础上加了一个约束:在主库中同一个线程先后执行的事务,在从库也要保持先后关系


http://www.kler.cn/a/388018.html

相关文章:

  • NoSQL数据库与关系型数据库的主要区别
  • 【C++】类与对象的基础概念
  • 操作系统离散存储练习题
  • MySQL_第13章_视图
  • git commit 校验
  • 使用Python实现智能食品营养分析的深度学习模型
  • 压缩Minio桶中的文件为ZIP,并通过 HTTP 响应输出
  • solidworks、sw_to_urdf的一些心得
  • Web实时消息推送
  • 一文学习Android中的Property
  • [Redis] Redis主从复制模式
  • 在vue3的vite网络请求报错 [vite] http proxy error:
  • 微星爆破弹ddr4wifi接线梳理研究
  • Flink滑动窗口(Sliding)中window和windowAll的区别
  • redis用法(二)
  • 项目功能--运营数据统计报表导出
  • 【真题笔记】21年系统架构设计师案例理论点总结
  • 【SpringBoot】19 文件/图片下载(MySQL + Thymeleaf)
  • 说说webpack中常见的Plugin?解决了什么问题?
  • Ubuntu18.04更换PREEMPT RT内核
  • 软考:论容器编排
  • 微信小程序——01开发前的准备和开发工具
  • C++builder中的人工智能(20):如何在C++中开发一个简单的Hopfield网络
  • 推荐一款管道数据检索工具:Pipedata-Pro
  • C语言复习第9章 字符串/字符/内存函数
  • 卫星授时服务器,单北斗授时服务器,北斗卫星时钟服务器