mysql确认半同步命令_怎么判断mysql是否是半同步复制

AFTER_COMMIT(5.6默认值)

master将每个事务写入binlog ,传递到slave 刷新到磁盘(relay log),同时主库提交事务。master等待slave 反馈收到relay log,只有收到ACK后master才将commit OK结果反馈给客户端。

AFTER_SYNC(5.7默认值,但5.6中无此模式)

master 将每个事务写入binlog , 传递到slave 刷新到磁盘(relay log)。master等待slave 反馈接收到relay log的ack之后,再提交事务并且返回commit OK结果给客户端。 即使主库crash,所有在主库上已经提交的事务都能保证已经同步到slave的relay log中。

因此5.7引入了after_sync模式,带来的主要收益是解决after_commit导致的master crash主从间数据不一致问题,因此在引入after_sync模式后,所有提交的数据已经都被复制,故障切换时数据一致性将得到提升。

2 性能提升支持发送binlog和接受ack的异步化

旧版本的semi sync 受限于dump thread ,原因是dump thread 承担了两份不同且又十分频繁的任务:传送binlog 给slave ,还需要等待slave反馈信息,而且这两个任务是串行的,dump thread 必须等待 slave 返回之后才会传送下一个 events 事务。dump thread 已然成为整个半同步提高性能的瓶颈。在高并发业务场景下,这样的机制会影响数据库整体的TPS .

图:Without ACK receiving thread

为了解决上述问题,在5.7版本的semi sync 框架中,独立出一个 ack collector thread ,专门用于接收slave 的反馈信息。这样master 上有两个线程独立工作,可以同时发送binlog 到slave ,和接收slave的反馈。

图:With ACK receiving thread3 性能提升控制主库接收slave 写事务成功反馈数量

MySQL 5.7新增了rpl_semi_sync_master_wait_slave_count参数,可以用来控制主库接受多少个slave写事务成功反馈,给高可用架构切换提供了灵活性。

如图所示,当count值为2时,master需等待两个slave的ack

4 性能提升

Binlog 互斥锁改进

旧版本半同步复制在主提交binlog的写会话和dump thread读binlog的操作都会对binlog添加互斥锁,导致binlog文件的读写是串行化的,存在并发度的问题。

MySQL 5.7对binlog lock进行了以下两方面优化

1.移除了dump thread对binlog的互斥锁

2.加入了安全边际保证binlog的读安全

5 性能提升组提交

5.7引入了新的变量slave-parallel-type,其可以配置的值有:

DATABASE (5.7之前默认值),基于库的并行复制方式;LOGICAL_CLOCK (5.7新增值),基于组提交的并行复制方式;

MySQL 5.6版本也支持所谓的并行复制,但是其并行只是基于DATABASE的,也就是基于库的。如果用户的MySQL数据库实例中存在多个DATABASE ,对于从机复制的速度的确可以有比较大的帮助,如果用户实例仅有一个库,那么就无法实现并行回放,甚至性能会比原来的单线程更差。

MySQL5.7中增加了一种新的并行模式:为同时进入COMMIT阶段的事务分配相同的序列号,这些拥有相同序列号的事务在备库是可以并发执行的。

MySQL 5.7真正实现的并行复制,这其中最为主要的原因就是slave服务器的回放与主机是一致的即master服务器上是怎么并行执行的slave上就怎样进行并行回放。不再有库的并行复制限制,对于二进制日志格式也无特殊的要求(基于库的并行复制也没有要求)。

因此下面的序列中可以并发的序列为(其中前面一个数字为last_committed ,后面一个数字为sequence_number ):

trx1 1…..2trx2 1………….3trx3 1…………………….4trx4        2……………………….5trx5               3…………………………..6trx6                     3………………………………7trx7                            6………………………………..8

备库并行规则:当分发一个事务时,其last_committed 序列号比当前正在执行的事务的最小sequence_number要小时,则允许执行。

因此,

a)trx1执行,last_commit<2的可并发,trx2, trx3可继续分发执行

b)trx1执行完成后,last_commit < 3的可以执行, trx4可分发

c)trx2执行完成后,last_commit < 4的可以执行, trx5, trx6可分发

d)trx3、trx4、trx5完成后,last_commit < 7的可以执行,trx7可分发

综上所述

我们认为MySQL 5.7版对Loss-Less半同步复制技术的优化,使得其成熟度和执行效率都得到了质的提高。我们建议在使用MySQL 5.7作为生产环境的部署时,可以使用半同步技术作为高可用与读写分离方案的数据复制方案。

599225b8f94eb989431e5a889e7e803b.png

请点击输入图片描述

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

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

相关文章

stl iterator_在C ++ STL中使用const_iterator访问字符列表的元素

stl iteratorIn this example, we are declaring a character list and pushing the characters from A to Z using a for loop and push_back() function and then accessing the elements using const_iterator. 在此示例中&#xff0c;我们声明一个字符列表&#xff0c;并使…

《Linus Torvalds自传》摘录

转自&#xff1a;http://www.ruanyifeng.com/blog/2012/09/linus_torvalds.html作者&#xff1a; 阮一峰日期&#xff1a; 2012年9月 3日除了程序员&#xff0c;大概很少人知道Linux操作系统。它的发明者Linus Torvalds&#xff0c;知道的人就更少了。他本人也很低调&#xff0…

python绘制条形图例题_python matplotlib库绘制条形图练习题

练习一&#xff1a;假设你获取到了2017年内地电影票房前20的电影&#xff08;列表a&#xff09;和电影票房数据&#xff08;列表b&#xff09;&#xff0c;那么如何更加直观的展示该数据&#xff1f; a ["战狼2","速度与激情8","功夫瑜伽",&quo…

mysql验证身份证号正确_通过SQL校验身份证号码是否正确

根据提供的身份证号码信息验证身份证号码是否符合二代身份证规范&#xff0c;其中区域编码网上可下载。使用数据库为DB2&#xff0c;但目测可以通用身份证号码第18位验证算法从网上查得&#xff0c;具体验证算法如下&#xff1a;1、将前面的身份证号码17位数分别乘以不同的系数…

python学习记录

python学习记录schedule库schedule库 import schedule import time #引入schedule和timedef job():print("Working in progress...") #定义一个叫job的函数&#xff0c;函数的功能是打印Im working...#部署情况 schedule.every(10).minutes.do(job) #部署每10…

Python | 在属性的帮助下实现setter和getter

In this program, we are implementing Properties. Python offers a better way to implement setters and getter with the help of properties by using attribute property. By default properties are getters so we have to declare setter part explicitly. 在此程序中&…

windows进入mysql

cd \wamp\bin\mysql\mysql5.6.17\bin\mysql -hlocalhost -uroot -p转载于:https://blog.51cto.com/8818968/1835449

python爬取js动态网页_Python 爬取网页中JavaScript动态添加的内容(一)

当我们进行网页爬虫时&#xff0c;我们会利用一定的规则从返回的 HTML 数据中提取出有效的信息。但是如果网页中含有 JavaScript 代码&#xff0c;我们必须经过渲染处理才能获得原始数据。此时&#xff0c;如果我们仍采用常规方法从中抓取数据&#xff0c;那么我们将一无所获。…

mac mysql 忘记密码 卸载_MySQL忘记密码后重置密码(Mac )

转&#xff1a;http://www.cnblogs.com/lihuanqing/p/5623872.html安装好MySQL以后&#xff0c;系统给了个默认的的密码&#xff0c;然后不小心关了&#xff0c;惨了密码没有了。1、关闭mysql服务器 sudo /usr/local/mysql/support-files/mysql.server stop 也可以在系统偏好里…

MATLAB学习——变量、数组

变量、数组变量赋值显示格式数组一维数组生成数组元素提取提取单个元素抽取二维数组生成数组提取提取单个元素提取子矩阵添加字符数组空数组变量 赋值 赋值语句一般形式&#xff1a;变量 数、字符或表达式 a 1 #自定义为双精度double x x y 1*2*3显示格式 可以…

Nginx严格访问代理HTTP资源

为什么80%的码农都做不了架构师&#xff1f;>>> 1 严格访问 访问能基于客户端的IP地址允许或拒绝或使用基于HTTP验证。 为了允许或拒绝从某个地址及或所有地址的访问&#xff0c;使用allow和deny指令&#xff1a; location / { deny 192.168.1.2; allow 192.168…

Java LinkedList公共布尔boolean offerLast(Object o)方法(带示例)

LinkedList公共布尔布尔offerLast(Object o)方法 (LinkedList public boolean offerLast(Object o) method) This method is available in package java.util.LinkedList.offerLast(Object o). 软件包java.util.LinkedList.offerLast(Object o)中提供了此方法。 This method is…

csv 字符串_Python实现json转csv格式

利用Python实现json格式转换为csv文件格式前言本文是学校的课程设计&#xff0c;这里我没有用封装好的json库来实现&#xff0c;而是把读进来的文件当一个字符串来处理&#xff0c;核心函数其实是python的eval()类型转换函数。什么是 JSON?我们要考虑到json格式下key-value对的…

MATLAB学习——常用语句

MATLAB学习——常用语句if语句if endif elseif elseifswitch语句for语句while语句if语句 if end n input(n); if rem(n,2) 0A even endif else n input(n); #输入空数组判断为odd if rem(n,2) 0A even elseA odd endif elseif n input(n); if rem(n,2) 0;even els…

mysql 线性表_数据结构之线性表

概要参考《大话数据结构》&#xff0c;把常用的基本数据结构梳理一下。线性表定义线性表(List)&#xff1a;零个或多个数据元素的有限序列。若将线性表记为 \((a_1, \cdots, a_{i-1}, a_i, a_{i1}, \cdots, a_n)\)&#xff0c;则表中 \(a_{i-1}\) 领先于 \(a_i\)&#xff0c;\(…

使用JavaScript修改浏览器URL地址栏的实现代码

现在的浏览器里,有一个十分有趣的功能&#xff0c;你可以在不刷新页面的情况下修改浏览器URL;在浏览过程中.你可以将浏览历史储存起来&#xff0c;当你在浏览器点击后退按钮的时候&#xff0c;你可以冲浏览历史上获得回退的信息&#xff0c;这听起来并不复杂&#xff0c;是可以…

ruby array_在Ruby中使用Array.pop和Array.shift方法从Array中删除元素

ruby arrayRuby Array.pop和Array.shift方法 (Ruby Array.pop and Array.shift methods) If you are reading an article that is related to deleting elements from the instance of Array class then it is expected from you that you are aware of the basic things relat…

python语言百分号的含义_python中百分号意思的是什么

python中百分号意思的是什么 发布时间&#xff1a;2020-07-09 16:38:13 来源&#xff1a;亿速云 阅读&#xff1a;158 python中百分号意思的是什么&#xff1f;很多新手对此不是很清楚&#xff0c;为了帮助大家解决这个难题&#xff0c;下面小编将为大家详细讲解&#xff0c;有…

MATLAB学习——矩阵

矩阵矩阵运算算术运算基本算术运算点运算关系运算逻辑运算元素处理取整取模和取余矩阵分析与处理矩阵行列式、秩与迹、特征值分析矩阵的逆与线性方程组求解矩阵的分解与变换矩阵运算 算术运算 基本算术运算 #检查矩阵阶数[n,m] size(A),l length(A) A [1 2;3 4] B [1 1;…

sqldeveloper mysql迁移_通过SQL Developer工具将MySQL数据库内容迁移至Oracle的步骤

通过SQL Developer工具将MySQL数据库内容迁移至Oracle的步骤发布时间&#xff1a;2020-06-08 15:52:18来源&#xff1a;51CTO阅读&#xff1a;210作者&#xff1a;三月本篇文章给大家主要讲的是关于通过SQL Developer工具将MySQL数据库内容迁移至Oracle的步骤的内容&#xff0c…