技术分享 | 简单测试MySQL 8.0.26 vs GreatSQL 8.0.25的MGR稳定性表现
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答
- GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
MySQL 8.0.26下MGR表现如何?用实测数据说话。
此外,MySQL 8.0.26还存在一个严重缺陷。
MySQL 8.0.26发布差不多两个月了,一直还没对它进行测评,看到release notes中涉及到几个MGR相关的Bug fixed,最近抽空对其简单测试一番,下面说说结果吧。
本文后半段还会爆出MySQL 8.0.26的一个严重缺陷。
本次测试选用sysbench的mix-load方案(感谢楼方鑫老师的分享):
require("oltp_common")
local runtype = 0;
function prepare_statements()
-- use 1 query per event, rather than sysbench.opt.point_selects which
-- defaults to 10 in other OLTP scripts
sysbench.opt.point_selects=1
runtype = (10 * sysbench.tid + 10) / sysbench.opt.threads
if runtype <= 6 then
prepare_point_selects()
else
prepare_non_index_updates()
end
end
function event(thread_id)
if runtype <= 6 then
execute_point_selects()
else
execute_non_index_updates()
end
end
下面是压测相关的几个指标参数:
- --tables=10
- --table_size=100000
- --threads=16
- --report-interval=1
下面是InnoDB & MGR相关的几个主要参数选项值:
innodb_buffer_pool_size = 256M
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 64
binlog_transaction_dependency_tracking = WRITESET
slave_preserve_commit_order = 1
slave_checkpoint_period = 2
group_replication_flow_control_mode = "DISABLED"
备注:由于测试机配置一般,所以压测的数据量并不大,并发也不高。
接下来针对 group_replication_consistency 几个不同可选项,我拿GreatSQL 8.0.25-15 和 MySQL 8.0.26进行对比,主要关注tps和latency数据。
1. group_replication_consistency=EVENTUAL










从上面的几个测试数据可以看到:
1.MySQL 8.0.26的tps还是很不平稳,波动很大。
2.MySQL 8.0.26的latency也是波动很大。
另外,从测试的直观感受来看,在MySQL 8.0.26以前的版本中存在的几个问题略有改善:
1.被kill后的SECONDARY节点重新加回集群,分布式事务恢复较快(快辄20-30秒左右),不像以往要很久(最少1-2分钟)。
2.把SECONDARY节点kill后,集群tps波动的时长变短了,之前大概需要20-30秒,现在大概10-20秒。
3.把SECONDARY节点kill后,集群还是大约要20多秒才能将其踢出,这个没改善。
4.磁盘空间满之后会导致MGR事务被阻塞,在8.0.26里依然会阻塞事务,时间太久就没及时处理的话,还会因为待认证事务堆积等原因导致mysqld进程被oom killed,这个算是更严重了(BUG#104979),后面我再整理文章。
接下来说说MySQL 8.0.26的严重问题吧(BUG#104980)。
复现方案:
1.设置 group_replication_consistency = BEFORE_AND_AFTER | AFTER(二选一,其余模式暂未出现问题)。
2.启动sysbench对MGR集群进行持续压力测试。
3.压测过程中,随机kill某个SECONDARY节点。
4.经多次重试,会有相当大概率出现该SECONDARY节点无法重新加回集群的问题。报错信息类似下面这样:
[ERROR] [MY-013309] [Repl] Plugin group_replication reported: 'Transaction '2:39976870' does not exist on Group Replication consistency manager while receiving remote transaction prepare.'
[ERROR] [MY-011452] [Repl] Plugin group_replication reported: 'Fatal error during execution on the Applier process of Group Replication. The server will now leave the group.'
[ERROR] [MY-011712] [Repl] Plugin group_replication reported: 'The server was automatically set into read only mode after an error was detected.'"
同样的测试,在GreatSQL 8.0.25中未出现,还是相当给力的呀。
所幸的是,一般很少选用AFTER或BEFORE_AND_AFTER模式,所以能碰到这个BUG的人不会太多才对。
再报告个小问题(BUG#104974),在线设置 group_replication_consistency 选项值时,如果设置为 BEFORE,则必须加引号才可以,否则会报错,其他几个模式则没问题:
mysql>set global group_replication_consistency=EVENTUAL;
Query OK, 0 rows affected (0.00 sec)
mysql>set global group_replication_consistency=BEFORE_ON_PRIMARY_FAILOVER;
Query OK, 0 rows affected (0.00 sec)
mysql>set global group_replication_consistency=BEFORE;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEFORE' at line 1
mysql>set global group_replication_consistency='BEFORE';
Query OK, 0 rows affected (0.00 sec)
mysql>set global group_replication_consistency=AFTER;
Query OK, 0 rows affected (0.00 sec)
mysql>set global group_replication_consistency= BEFORE_AND_AFTER;
Query OK, 0 rows affected (0.00 sec)
Enjoy GreatSQL
文章推荐:
GreatSQL MGR FAQ
https://mp.weixin.qq.com/s/J6wkUpGXw3YkyEUJXiZ9xA
万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预
https://mp.weixin.qq.com/s/07o1poO44zwQIvaJNKEoPA
『2021数据技术嘉年华·ON LINE』:《MySQL高可用架构演进及实践》
https://mp.weixin.qq.com/s/u7k99y6i7riq7ScYs7ySnA
一条sql语句慢在哪之抓包分析
https://mp.weixin.qq.com/s/AYibbzl860D90rOeyjB6IQ
万答#15,都有哪些情况可能导致MGR服务无法启动
https://mp.weixin.qq.com/s/inSGpd0Q_XIl2Mb-VsvNsA
技术分享 | 为什么MGR一致性模式不推荐AFTER
https://mp.weixin.qq.com/s/rNeq479RNsklY1BlfKOsYg
关于 GreatSQL
GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。
Gitee:
https://gitee.com/GreatSQL/GreatSQL
GitHub:
https://github.com/GreatSQL/GreatSQL
Bilibili:
https://space.bilibili.com/1363850082/video
微信&QQ群:
可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群
QQ群:533341697
微信小助手:wanlidbc
本文由博客一文多发平台 OpenWrite 发布!
技术分享 | 简单测试MySQL 8.0.26 vs GreatSQL 8.0.25的MGR稳定性表现的更多相关文章
- 技术分享 | 浅谈MySQL闪回的实现
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 1.闪回实现原理 2.binlog文件格式初探 3.闪回实现过程 1.闪回实现原 ...
- 尖峰7月线上技术分享--Hadoop、MySQL
7月2号晚20:30-22:30 东大博士Dasight分享主题<大数据与Hadoop漫谈> 7月5号晚20:30-22:30 原支付宝MySQL首席DBA分享主题<MySQL ...
- 技术分享 | 浅谈mysql语法解析调试方法
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 本文向您介绍一种利用mysql解析器和bison的调试选项进行sql语法解析跟踪 ...
- 技术分享 | app测试中常用的Android模拟器
原文链接 Emulator Emualor 是 Android Studio 自带的模拟器,是官方提供的工具,Android 开发最常使用的就是这一款. 它功能非常齐全,电话本.通话等功能都可正常使用 ...
- 技术分享 | MySQL中MGR中SECONDARY节点磁盘满,导致mysqld进程被OOM Killed
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 在MGR测试中,人为制造磁盘满问题后,节点被oom killed 问题描述 在对 ...
- 转 Swoole】用swoole简单实现MySQL连接池
MySQL连接池 在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再 ...
- 技术分享 | 自制GreatSQL Docker镜像
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 近期打算制作一个GreatSQL的docker镜像,方便社区用户使用GreatSQL. 制作docker镜像的环境基于Ce ...
- 用swoole简单实现MySQL连接池
MySQL连接池 在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再 ...
- 【MySQL】测试MySQL表中安全删除重复数据只保留一条的相关方法
第二篇文章测试说明 开发测试中,难免会存在一些重复行数据,因此常常会造成一些测试异常. 下面简单测试mysql表删除重复数据行的相关操作. 主要通过一下三个大标题来测试说明: 02.尝试删除dept_ ...
随机推荐
- layui数据表格搜索
简单介绍 我是通过Servlet传递json给layui数据表格模块,实现遍历操作的,不过数据量大的话还是需要搜索功能的.这是我参考网上大佬代码写出的搜索功能. 实现原理 要实现搜索功能,肯定需要链接 ...
- 每天一个 HTTP 状态码 201
201 Created 201 Created 表示客户端的请求已经成功完成,结果是创建了一个新资源,通常用于响应「增删改查」里的「增」.如果是严格按照 RESEful style 的 API,那么当 ...
- MySQL之SQL语句优化
语句优化 即优化器利用自身的优化器来对我们写的SQL进行优化,然后再将其放入InnoDB引擎中执行. 条件简化 移除不必要的括号 select * from x where ((a = 5)); 上面 ...
- ML第4周学习小结
本周收获 总结一下本周学习内容: 1.学习了<深入浅出Pandas>的第五章:Pandas高级操作的两个内容 添加修改数据 高级过滤 我的博客链接: Pandas:添加修改.高级过滤 2. ...
- STM32时钟系统配置程序源码深入分析
一.分析程序的目的 最近我在移植实时系统是遇到了一些问题,所以决定深入了解系统时钟的配置过程,当然想要学好stm32的小伙伴也有必要学习好时钟系统的配置,所以我将学习的过程再次记录,有写得不好的地方, ...
- Dubbo的基本使用
Dubbo分为提供者和消费方 并且两者都要注册到ZK上 提供者 注解 @Service 这是dubbo包下的 消费组 注解 @Reference 远程注入 第一步导入依赖 <! ...
- mac M1 php扩展 xlswriter 编译安装爬坑记录
电脑配置 MacBook Pro(14英寸,2021年) 系统版本 macOS Monterey 12.4 芯片 Apple M1 Pro PHP环境 MAMP Pro Version 6.6.1 ( ...
- Elasticsearch学习系列一(部署和配置IK分词器)
Elasticsearch简介 Elasticsearch是什么? Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储.检索数据.本身扩展性很好,可扩展 ...
- 关于swiper插件在vue2的使用
最近做项目用到了vue-awesome-swiper,总结一下使用方法 第一步:安装依赖 npm install swiper vue-awesome-swiper --save or npm ins ...
- UiPathExcel写入操作
一.Excel 写操作 1.写一个单元格 (1)控件介绍 Write Cell: 使用Write Cell控件,在指定单元格写入内容 常用属性介绍: Destination: Cell: 要写 ...