MySQL复制底层技术——LOGICAL_CLOCK并行复制、WRITESET并行复制

news2024/9/27 8:23:44

1. LOGICAL_CLOCK 并行复制

1.原理

从MySQL 5.7版本开始,支持LOGICAL_CLOCK级别的并行复制(基于MySQL 5.6的库级别的Group Commit并行复制的大幅改进),通过设置参数slave_parallel_type为LOGICAL_CLOCK来启用(当设置为DATABASE时与MySQL 5.6版本的并行复制相同)。从LOGICAL_CLOCK字面上并不能直观地看出它是基于什么维度来实现并行复制的,下面我们通过解析binlog中记录的内容来进行解读。
在这里插入图片描述
在这里插入图片描述
从以上对INSERT语句的binlog解析内容来看,从MySQL 5.7 版本开始,新增了两个 事件类型,其中Anonymous_GTID_event用于记录未启用GTID时的binlog 队列信息;

GTID_event用于记录启用GTID时的binlog 队列信息。利用这些binlog 队列信息,从库的 SQL线程在应用主库的binlog时,只要last_committed值相同就可以并行回放,从而大大提高了从库复制的效率。

提示:虽然通过这种方式大幅度提高了从库复制的效率,在一定程度上,并行复制的粒度细化到了事务级别,甚至细化到了行级别(每个事务只修改一行数据),但是可以并行回放的事务必须具有相同的 last_committed值(即使两个事务的数据完全无关,不同last_committed值的事务也不能并行回放),而相同 last_committed值的事务数量多少需要视主库瞬时并发请求的多少而定(当binlog_group_commit_sync_no_delay_count=0时),如果主库没有写压力,写入binlog中的每个事务的 last_committed值都不相同,这个时候从库复制实际上仍然是串行复制。

所以,LOGICAL_CLOCK 级别的并行 复制仍然有一定的优化空间。

2.配置示例

(1)主库

在这里插入图片描述

(2)从库

在这里插入图片描述

2. WRITESET并行复制

1.原理

在MySQL版本号≥5.7.22和版本号≥8.0.1的版本中,WRITESET并行复制是在 LOGICAL_CLOCK并行复制基础上的演进,引入了基于WriteSet的机制,只要不同事务的不同记录不重叠(通过计算每行记录的hash值来确定是否是相同的记录,该hash值就是writeset值。

WRITESET并行复制本质上就是基于writeset值对如何产生last_committed值做了大幅度优化的),在从库上就可以并行回放。下面我们通过解析binlog中记录的内容来进行解读。
在这里插入图片描述
在这里插入图片描述

从以上对INSERT语句的binlog解析内容来看,与LOGICAL_CLOCK 并行复制记录的内容相比并没有格式与内容的变化。那么复制的改进点主要是什么呢?

细心的读者可能已经发现了last_committed=2的两个事务的时间戳并不是同一个时刻的,并且在last_committed=2的两个事务之间还夹了一个last_committed=9的事务,这在以往的LOGICAL_CLOCK 并行复制中几乎不可能出现这种情况。发生什么事情了?

对于主库来说,WRITESET并行复制对LOGICAL_CLOCK 并行复制优化的地方并不是在binlog记录的内容格式上,而是在事务写binlog时的last_committed值的计算上。

  • 通过唯一索引或主键索引来区分不同的记录,然后和行记录的库表属性以及数据 属性一起计算hash值(即writeset值),并将计算出的writeset值存放在一个hash表中。

    后续 如果有新事务的行记录计算出的hash值在hash表中无匹配记录,那么新事务不会导致产生 新的last_committed值,即相当于新事务和之前的事务被归并到了同一个binlog 队列中 (即,last_committed值相同);

    后续如果有新事务的行记录计算出的hash值在hash表中找 到了匹配记录,则表示存在事务冲突,产生新的last_committed值(即,产生了一个新的 binlog队列)。

    具体的计算公式为:
    writeset=hash(index_name | db_name | db_name_length | table_name | table_name_length |value | value_length)。

  • 在计算hash值时,如果无法通过索引辨别数据的唯一性,那么将会产生新的 last_committed值。
    对于从库来说,并行应用binlog的逻辑几乎没有变化,仍然根据last_committed值 判断是否可以并行回放。 提示:WriteSet在如下场景中不可用。

  • DDL语句,因为不包含行记录,所以无法生成hash值,也就无法进行比较。

  • session的hash算法和history不同(hash算法被动态修改过之后,遇到不同的算法产 生的值无法进行比较)。

  • 事务更新了被外键关联的字段。

2.配置示例

(1)主库

在这里插入图片描述

(2)从库

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯STM32G431RBT6学习——工程建立

蓝桥杯STM32G431RBT6学习——工程建立 前言 我始终认为一边学习一边记录是最好的方式,一方面便知识的梳理,另一方面便于二次复习使用。最后一次参加蓝桥杯,希望能整个不错的成绩。–2023/1/4 准备工具 1、keil5 2、STM32G系列芯片包 3、S…

PostgreSQL在openEuler上本地yum不能安装而网络yum却可以的原因分析

作者:IT圈黎俊杰 PostgreSQL是国外著名的开源数据库,openEuler是国内的开源操作系统品牌,当前PostgreSQL对openEuler是没有适配认证的,PostgreSQL官方更不存在提供可直接在openEuler操作系统上安装的RPM软件包了。 在PostgreSQL官…

56、mysql的作业

作业中要用到的两张表dept,emp,找不到原来的sql语句了,所以只有表的内容 1、选择题 (1)以下哪条语句是错误的? A. SELECT empno, ename name, sal salary FROM emp; B. SELECT empno, ename name, sal AS s…

基于Slimming的MobileNetV3半自动剪枝

本文尝试两种剪枝方法,分别是直接使用NNI工具 以及 通过Slimming方法进行硬编码。 1、剪枝的意义 深度模型落地需要权衡两个核心问题:精度和复杂度。 模型压缩加速,在保持精度基本不变、降低模型计算复杂度。一方面提升模型落地的可能性&a…

SpringBoot+Vue项目毕业论文管理系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…

使用PowerShell获取Trustedinstaller权限

准备工作: Windows Powershell 版本为 5.0 以上 以管理员身份运行Windows Powershell(在这里可能会遇到运行X64版本而导致后续有些命令无法使用, 所以可以运行X86版本) 安装所需模块 首先在C盘(系统盘)根目录,新建名为 token 的文件夹 接着在Windows Powershell输…

html5语义元素

HTML5 提供了新的语义元素来明确一个Web页面的不同部分: <header><nav><section><article><aside><figcaption><figure><footer><header> <header>元素描述了文档的头部区域&#xff0c;<header>元素主要…

如何停用Sidekiq Uniqueness

背景是这样的&#xff1a; 你有一些Sidekiq的job,并且设置了unique_for&#xff0c;然后系统崩溃了&#xff0c;在你的redis里仍然有这个唯一性的锁&#xff0c;但是job却不见了&#xff0c;导致后面的job也进不来&#xff0c;这个时候需要手动disable这个唯一锁。 官网传送&…

骨传导耳机会伤害耳朵吗、佩戴骨传导耳机有什么好处

首先要明确的告诉大家耳机都对听力/耳朵是一定会有伤害&#xff0c;只不过是程度如何而已。目前来说&#xff0c;同等音量的情况下&#xff0c;对听力损伤最低的就是骨传导耳机。因为它是避开了脆弱的鼓膜&#xff0c;经过骨头向听神经传播声音&#xff0c;这种方法解放了双耳&…

Jvm知识点一(jvm 组成部分)

jvm 主要组成部分以及其作用 jvm 组成部分&#xff08;包含两个子系统和两个组件&#xff09; 两个子系统 Class Loader (类装载器)&#xff1a;根据给定的全限定名类名&#xff08;如java.lang.Object&#xff09;来装载class 文件到Runtime data area(运行时数据区) 中的me…

excel制表基础:规范的制表理念和思路让效率提升 上篇

今天的文章是一篇理论文章&#xff0c;没有函数技巧讲解&#xff0c;没有酷炫图表实例&#xff0c;也没有神奇的VBA教程&#xff0c;如果你想学技巧&#xff0c;那这篇文章不适合你的要求。但是如果你想让自己在使用Excel方面更加地得心应手&#xff0c;能够让构建的表格提高我…

骨传导耳机哪个品牌好?国产骨传导蓝牙耳机排名

骨传导耳机传播声音不用经过耳道的设计&#xff0c;具有保护听力以及佩戴更安全的优势&#xff0c;受到越来越多人的青睐。骨传导耳机的品牌也是越来越多&#xff0c;那么哪些骨传导耳机品牌是最好的呢&#xff1f;下面就给大家分享一下几款好用的骨传导耳机。 1、南卡Runner …

超实用的跨境工具、软件分享!跨境人看过来!

对于跨境电商商家来说&#xff0c;一些常用的工具和网站是必不可少的。实用的工具可以帮助我们选择产品&#xff0c;提高工作效率&#xff0c;规划关键词等等。今天东哥给大家分享几类工具&#xff01; 语言翻译工具 1、deepL 如果还有跨境人在为小语种翻译苦恼的话&#xff0c…

JAVAEE-多线程(2)

线程安全 线程安全的意思技术在多线程的各种随机调度顺序下&#xff0c;代码没有bug,都能够符合预期的方式来执行 线程为什么会不安全&#xff1f;就是在多线程随机调度下出代码出现bug。 有些代码在多线程环境下执行会出现bug&#xff0c;这样的问题就叫做线程不安全。 /*…

海思嵌入式开发-004-Hi3516烧录问题总结

烧录Hi3516DV300小型系统 问题总结一、前言二、使用USB进行烧录① 前提条件② 操作步骤三、运行镜像文件一、前言 Hi3516DV300的镜像烧录通过Winodow环境进行烧录&#xff0c;开发者启动烧录操作后&#xff0c;DevEco Device Tool通过Remote远程模式&#xff0c;将Ubuntu环境下…

罗胖时间的朋友跨年演讲释放的世界氢燃料电池汽车信号

罗胖时间的朋友2022跨年演讲中关于《故乡与魔法》中讲述了关于氢能源相关的问题&#xff0c;日本在2013年就把发展氢能源定为了国策&#xff0c;在日本&#xff0c;关于氢能源相关的专利占世界30%左右&#xff0c;为什么他们就搞不起来&#xff0c;这是个很好的问题&#xff0c…

04-微服务客户端负载均衡器Ribbon、LoadBalance实战

什么是Ribbon 目前主流的负载方案分为以下两种&#xff1a; 集中式负载均衡&#xff0c;在消费者和服务提供方中间使用独立的代理方式进行负载&#xff0c;有硬件的&#xff08;比如F5&#xff09;&#xff0c;也有软件的&#xff08;比如 Nginx&#xff09;。客户端根据自己的…

同样是血氧仪方案,价格怎么相差这么多?

有没有发现最近血氧仪、额温枪、壁挂式测温仪又开始火了&#xff1f;并且市场活跃度越来越高。而作为我们血氧仪方案提供商或者生产企业来说&#xff0c;您是不是和优优一样会时常听到客户发出如下反馈&#xff1a; “我刚问了另外一家&#xff0c;和你这个样子差不多的&#…

智云通CRM:如何应对“我们还要再考虑一下”?

在征求决策层对报价问题的反馈信息时&#xff0c;销售经常会遇到的另一种意见&#xff08;群组决策中最常见的意见&#xff09;是推迟做出决策。这种情况显然是可以理解的&#xff0c;内部决策层认为有必要先私下讨论一番&#xff0c;然后再对你的报价做出答复。毕竟&#xff0…

P2835 刻录光盘

题目描述 在JSOI2005夏令营快要结束的时候&#xff0c;很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家&#xff0c;以便大家回去后继续学习。组委会觉得这个主意不错&#xff01;可是组委会一时没有足够的空光盘&#xff0c;没法保证每个人都能拿到刻录上资料的光…