GreatSQL 8.0.27 & 5.7.36背后的事

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDSClaw,2核4GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 开个番外,在正式的change log之外,单开一篇介绍下GreatSQL 8.0.27-18(晚些时候发布,还在努力合并中)和5.7.36-39两个新版本的一些幕后故事吧。


老叶茶馆

老叶茶馆,泡壶茶,聊聊MySQL。 长期专注MySQL,Oracle MySQL ACE Director,鹅厂云最具价值专家


开个番外,在正式的change log之外,单开一篇介绍下GreatSQL 8.0.27-18(晚些时候发布,还在努力合并中)和5.7.36-39两个新版本的一些幕后故事吧。


1. 为什么要推出GreatSQL 5.7


GreatSQL主打的特性就是针对MGR做了众多提升和改进,另外就是8.0相对5.7其MGR的功能及可靠性也会好很多,因此本来是不想推出GreatSQL 5.7的


但考虑到目前5.7版本还有大量的用户,可能还不便于升级到8.0,为了让这些用户也能体验更好的MGR,才决定也新增5.7分支,主要是针对MGR的稳定性、可靠性及性能等方面做了些提升和优化,尤其是大事务的优化,但在8.0里的新特性都没有,因此还是强烈建议尽早升级到8.0版本,以体验更好更可靠的MGR


2. GreatSQL 5.7针对大事务场景做了什么优化


鉴于此,GreatSQL 5.7.36主要是提升MGR的可靠性、稳定性及性能,尤其是针对大事务场景下的可靠性。


在MySQL 5.7中,MGR事务没有进行分片处理,执行大事务很容易造成超时(并反复重发事务数据),最终导致节点报错并退出集群,甚至会造成mysqld进程被oom kill。

在GreatSQL 5.7中,针对该问题进行优化,并设置事务上限约为150MB,超过该上限事务会失败回滚,但节点不会再退出集群。虽然会对应用造成一定程度的不便,但总好过节点报错退出甚至crash吧。


3. 为什么要引入MGR网络开销超时记录功能


在MGR结构中,一个事务的开销包含网络层以及本地资源(例如CPU、磁盘I/O等)开销,GreatSQL针对MGR的网络层开销进行了多项优化工作,因此在网络层的开销通常不会成为瓶颈。


当事务响应较慢想要分析性能瓶颈时,可以先确定是网络层的开销还是本地性能瓶颈导致的。通过设置选项 group_replication_request_time_threshold 即可记录超过阈值的事件,便于进一步分析。


这个特性对于排查性能问题帮助较大,所以在5.7和8.0中都引入了。


4. 关于仲裁节点MGR很容易被"诟病"的地方是,一个MGR集群通常至少配置3个节点,相对于两节点主从架构来说,的确是增加了服务器成本。


引入仲裁节点功能后,这个苦恼几乎不复存在了,因为仲裁节点所需要的资源非常低,其主要功能是参与MGR投票仲裁,无需存储用户数据以及binlog,开销非常小,因此完全可以在一台服务器上跑多个实例作为仲裁节点,这就非常划算了。


此外,引入这个新功能后,官方的mysql shell很多功能都用不了,需要修改源码,加入对仲裁节点角色的支持。情急之下,仅凭我的三脚猫工夫,居然成功修改mysql shell源码,增加了对仲裁节点的支持。不过之后编译环境倒是折腾了好几天才解决,这些过程已在文章mysql-shell for GreatSQL 8.0.27编译安装及使用里分享了。


5. MySQL官方发版不太严谨


在ARM & CentOS 7环境下编译MySQL 5.7时遇到一个报错:

error:'prctl' was not declared in this scope


需要手动把 prctl.h 头文件copy到MySQL源码目录下,再修改 mysqld.cc 文件,加入include才行。这个问题可参考华为云官网上的这篇文章:error:'prctl' was not declared in this scope。


另外,在编译mysql shell 8.0.27时,发现 CMakeLists.txt 文件中少了一个宏定义,也需要自己手动修改加入才行。MySQL官方对待我报的bug(#106730)时,态度也略显傲慢。。。


有种个人感受,自从MySQL归入Oracle旗下后,虽然也增加了不少优秀的新特性,但引入的新问题也挺多的,官方基本不care来自社区的反馈声音,这其实挺符合Larry的人设的。。。


先扯这么多,在国内搞开源不易,肯定大家多使用GreatSQL和提建议、反馈问题,这就是对我们最大的支持了。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
32698 79
如何保证分布式文件系统的数据一致性
|
前端开发 容器
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局(上)
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局
17750 20
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36681 19
设计模式(C++版)
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24757 14
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36660 15
重生之---我测阿里云U1实例(通用算力型)
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29838 52

热门文章

最新文章

下一篇
开通oss服务