深度分析 | MyCat与DBLE的对比性能调优

MyCat的坑如何在分布式中间件DBLE上改善 近年来,随着移动互联网、物联网、人工智能等技术的兴起,需要处理的数据越来越多,作为存储架构核心的关系型数据库不可避免的引发了需要扩容的问题,在这个过程中分库分表被发明出来。分库分表最初不需要中间件,由各自应用的开发人员自己来负责,应用除了要了解业务逻辑以外,还需要明确完整的拆分规则,成本较高,对开发人员要求也很高,并且不利于任务和逻辑的解耦。因此,中间件应运而生。分布式系统架构基本分成三层,最上面是一层是APP层,中间是中间件层,下面是数据存储层。 今天分享的内容主要为中间件,那么一个理想的中间件应该是什么样的?第一,透明性,理想的中间件会向应用开发人员屏蔽后面具体拆分的细节。数据存储的工 立即下载

作者简介

蓝寅,开源分布式中间件DBLE项目负责人;持续专注于数据库方面的技术, 始终在一线从事开发;对数据复制,读写分离,分库分表的有深入的理解与实践。

 

问题起因:

用benchmarksql_for_mysql对原生MyCat-1.6.1和DBLE-2.17.07版做性能测试对比,发现DBLE性能只到原生版MyCat的70%左右。

 

问题分析过程:

分析过程主要有以下内容:包括现象,收集数据,分析猜测原因,验证猜测的方式来进行。

 

开源分布式中间件DBLE:
社区官网,获取DBLE快速入门指南及最新资讯
GitHub主页,查看官方文档
社区技术交流群,迅速获取官方支持:
QQ群:669663113

 

1.分析瓶颈

1.1 先对两者进行一个CPU占用的堆栈分析

通过对CPU火焰图的比较,发现DBLE用在纯排序上的CPU占用在15%以上,而MyCat在排序上没有看到明显的CPU占用。( 复盘时的思考:这里有明显的可疑之处,应当及早观察两者是否公平)

 

 

1.2 首先猜测可能的原因

  • a.由于MyCat对以下这条用例实现有bug:具体方式是直接原句下发SQL到节点,收到各个节点的结果后直接做加法;而DBLE则是改写为select distinct s_i_id 收集全部结果集,然后在中间件做去重和统计的工作。所以两者在这个case上的对比是不公平的。

  • b.排序本身算法选择的问题

 

1.3 对猜测原因的验证

  • a.去除有bug的case,并未看到性能有提升,而且考虑这条用例在所有用例出现的概率只有4%,涉及到的数据也不多,所以应该不是性能问题的主因。
  • b.去除有排序的case,看到两者性能接近,确定是排序的问题。

 

2.猜测原因

2.1 猜测一:源码实现原因

2.1.1 猜测描述

梳理DBLE源码排序逻辑的实现细节,是多路归并的排序,理论上是最优选择。

实际上具体的实现上有可优化的空间,如下图, N个数的K路排序的初始化值理论最优复杂度是O(N),而这里变成了O(NlogK2) 。

2.1.2 验证猜测

为了快速将排序的因素排除,将cmp函数直接返回1再次做测试。结果提升了10%的性能,所以虽然cmp是有性能问题,但导致性能如此大还有其他原因。(复盘:新版本已优化此处10%的性能差异)

 

2.2 猜测二:回到排序SQL

查看B-SQL源码,有3个排序SQL,其中有2个排序SQL的排序列不在select 项中,这本来应该引发MyCat的bug的,但我们在返回集和抓包中都没有发现。再仔细阅读源码,原来B-SQL通过hard code的方式使得压力永远跑不到这两个代码路径上,这样我们又排除了2个干扰因素,问题集中到剩下的那个排序上了。

将排序除去,64数据量,64并发,DBLE的性能是MyCat的96%。

证明确实和排序有关。

 

3.分析多并发压力排序性能的原因

3.1 猜测排序算法在特殊场景下的适用性

3.1.1 猜测描述

由于MyCat排序采用的是timsort, 时间复杂度的可能最优是O(n)。
而DBLE的多路归并排序在B-SQL这个场景下时间复杂度最差情况是O(n*(k-1)).
猜测timSort排序在B-SQL多并发场景下可能会优于多路归并。

 

3.1.2 验证猜测

用B-SQL压测并统计函数调用次数。

 

结论:

在B-SQL场景下:

两者平均每个排序调用的cmp函数的次数并没有发生明显的异化
每个排序cmp次数虽然没有大的差异,但总的调用次数却相差很大,DBLE大约是MyCat的5倍

 

4. 分析DBLE排序时cmp函数次数调用多的原因

问题集中在了为什么DBLE会有更多次的比较函数调用。

 

4.1 验证压力下发的SQL是否与cmp函数调用相符是否下发的SQL就不公平

4.1.1收集数据

用抓包的方式分别抓取B-SQL发给MyCat和DBLE的包,结果发现 DBLE的所有SQL中排序这条SQL的发生次数是MyCat的10倍左右。


再次用yourkit查看调用次数和CPU分布验证,发现调用次数确实符合抓包的结论,CPU分布也是DBLE分了大量的时间用于排序,而MyCat对排序的分配几乎可以忽略。这也与最一开始的火焰图结论一样。


用wireshark分析DBLE抓包结果,发现某些连接执行一段时间之后大量的重复出现排序+delete的query请求直到压力结束,举例如下图。

4.1.2 分析原因

分析B-SQL源码这里发现只有delete的数据为0才会引发死循环。


4.1.3 验证测试

在引发死循环的原因找到之前,先修改代码验证测试。无论result是否是0都设置newOrderRemoved=true使得B-SQL跳出死循环。

验证测试,DBLE性能终于符合预期,变为MyCat的105%。

至此,B-SQL有排序引发DBLE性能下降的原因找到了,某种场景下B-SQL对DBLE执行delete,影响行数为0,导致此时会有死循环,发送了大量排序请求,严重降低了DBLE性能,并且并发压力越大越容易出现,但也有一定几率不会触发。

 

5.分析哪种场景下delete行数为0

5.1隔离级别测试

因为对隔离级别并不熟悉,花了很长时间才想到原因,在MySQL上做了一个实验:

 

也就是说,在并发情况下确实有可能有死循环出现。

 

5.2 分析为什么只有在DBLE上有这个问题而在MyCat上没有这个问题

原因是DBLE和MyCat的默认隔离级别都是REPEATED_READ,但MyCat的实现有bug,除非客户端显式使用set语句,MyCat后端连接使用的隔离级别都是下属结点上的默认隔离级别;而DBLE会在获取后端连接后同步上下文,使得session级别的隔离级别和DBLE配置相同。而后端的四个结点中除了1台是REPEATED_READ,其他三个结点都是READ_COMMITTED。这样同样的并发条件,DBLE100%会触发,而MyCat只有25%的概率触发。

 

5.3 验证测试

将DBLE上的配置添加<property name="txIsolation">2</property>(默认是3)与默认做对比:

性能比是1:0.75.符合期望,性能原因全部找到。

 

6. 吐槽

最后吐槽一下B-SQL,找了官方的B-SQL4.1版和5.0版,4.1版并未对此情况做任何改进,仍有可能陷入死循环影响测试。

而5.0的对应代码处有这么一段注释,不知道PGSQL是否这里真的会触发异常,但MySQL并不会触发异常,仍有可能陷入死循环。

7. 性能原因回顾

1.cmp函数时候初始化值的问题,影响部分性能,非主要性能瓶颈,新版本已改进。
2.同时触发了MyCat和B-SQL的两个bug,导致测试的性能数据负负得正;

  • Mycat bug:配置的隔离级别不生效问题
  • B-SQL bug:RR隔离级别下,delete死循环问题

需要将MySQL结点都改为READ_COMMITED,再将配置改为<property name="txIsolation">2</property>,避开上述的bug。

 

8. 收获

1.测试环境的搭建无论是配置参数还是各个节点的状态都要同步,保证公平。
2.性能分析工具的使用。
3.性能测试可能一次的结果具有偶然性,需要多次验证。
4.当有矛盾的结论时候,可能就快接近问题的真相了,需要持续关注。

 

往期精选

| 使用指南
开源分布式中间件 DBLE 快速入门指南
DBLE 自定义拆分算法
DBLE Server.xml 配置解析
DBLE Schema.xml 配置解析
DBLE rule.xml 配置解析


| 案例分析
DBLE和Mycat跨分片查询结果不一致案例分析

开源分布式中间件DBLE
社区官网: https://opensource.actionsky.com/
GitHub主页: https://github.com/actiontech/dble
技术交流群:669663113
开源数据传输中间件DTLE
社区官网: https://opensource.actionsky.com/
GitHub主页: https://github.com/actiontech/dtle
技术交流群:852990221

【逆向实战】Unity游戏资源提取与解密全攻略:从AssetBundle到libil2cpp.so的破解技巧 本文详细介绍了Unity游戏资源提取与解密的完整流程,涵盖从AssetBundle到libil2cpp.so的破解技巧。通过AssetStudio和Il2CppDumper等工具,读者可以学习如何提取未加密资源、处理加密文件,并掌握动态dump技术。文章还提供了自动化脚本编写和常见问题解决方案,帮助逆向工程爱好者高效完成资源提取任务。 阅读详情

相关推荐

网络基础(二):数制转换与分类编址的IPv4地址

本文介绍数制转换、IP地址、分类编址的IPv4地址,希望对你有帮助!

十七拾的博客 1052

MyCat&DBLE

一、什么是MyCat   1.1   MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户开源把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他...

33的博客 1470

C# OpenCV机器视觉:红外体温检测

阿强长舒一口气,脸上露出了自信的笑容:“好了,万事俱备,只欠东风,接下来就看我的了!在这热图像里,不同的颜色代表着不同的温度区域,就好比一幅用温度绘制的抽象画,红色通常表示高温,蓝色则代表低温,通过解读这幅画,就能大致了解物体表面的温度分布情况。” 阿强兴奋得一拍大腿,“这不就像是找到了隐藏在黑暗中的线索,只要顺着这些红外线的踪迹,就能揪出体温异常的潜在风险,守护大家的健康啦。带着这份坚定的信念,阿强又投入到新的科技研发中,他相信,只要大家齐心协力,用科技点亮希望之光,就一定能迎来更加美好的明天。

xcwzj123的专栏 3150

DBLE分库分表中间件

1.dble和mycat分库分表中间件 1.1分库分表中间件原理 1.分析SQL语句 2.根据SQL语义,将SQL拆分成多个,发送至数据节点 3.将多个数据节点的结果聚集,返回客户端 1.2dble 1.高性能、高可用的MySQL分库分表中间件 2.上号爱可生公司开发 3.完全开源 4.基于开源项目MyCat 1.3dble对MyCat做的增强 1.缺陷修复 2.实现改进,插入语句语法增强,用户连接欸书增强 3.功能增强,提升性能 4.功能裁剪,去掉不用的算法 1.4dbl.

别浪 3711

PythonOCC基础使用:建模——倒角倒圆(二维+三维)

占坑

weixin_42755384的博客 4638

多模态特征融合方法总结

由于本人的研究是文本、语音和图像三者模态数据的融合,所以针对的是这三种模态的特征融合方法进行总结。 首先,多模态特征融合的方法大体分为三种

华辰烟雨的博客 9万+

第二十一周-day91-数据库day13-分布式架构

文章目录三、分布式数据库架构-MyCAT3.1 环境准备:3.2 2 删除历史环境:3.3 创建相关目录初始化数据3.4 准备配置文件和启动脚本3.5 修改权限,启动多实例3.6 节点主从规划3.7 分片规划3.8 开始配置3.9 检测主从状态3.10 MySQL分布式架构介绍4. MyCAT安装4.1 预先安装Java运行环境4.2 上传到/application4.3 启动和连接4.4. 测...

linux丶晨星 289

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

分库分表实践指南:MyCAT/DBLE核心注意事项与关键问题解决方案

在分库分表落地过程中,中间件选型与后续问题处理直接决定方案的稳定性。MyCAT与DBLE作为国内主流的分库分表中间件,在实际使用中存在诸多“避坑点”;同时,分库分表后衍生的分布式事务、全局主键冲突等问题,也需针对性解决。本文结合实践经验,系统梳理MyCAT/DBLE的使用限制,以及分库分表后的核心问题解决方案,助力开发者少走弯路。

专注Java和MySQL领域知识分享 1205

python抓取美团外卖的数据(商家、评分、评论)

本文详细介绍了如何使用Selenium和抓取美团外卖的商家、评分和评论数据。我们从基础的爬虫原理入手,分析了美团外卖的网页结构,提出了应对反爬虫机制的策略,并给出了详细的代码实现。通过使用Selenium,我们能够绕过动态加载内容的限制,直接抓取网页中的商家信息和评论。结合多线程和代理池等技术,我们可以进一步提高爬虫效率,并避免IP被封禁。未来,随着爬虫技术的发展,我们可以进一步探索深度抓取、数据清洗和数据分析等高级应用,以实现更智能的网页数据抓取。

2201_76125261的博客 2692

嵌入式软考必备知识点:嵌入式系统开发中的重要概念和示例代码

在嵌入式软考中,有一些重要的知识点需要掌握,包括嵌入式系统的基本概念、编程语言、实时操作系统和硬件接口等。实时操作系统是一种专门设计用于嵌入式系统的操作系统,可以提供对任务调度、中断处理和资源管理等方面的支持。GPIO(通用输入输出):GPIO是嵌入式系统中常用的硬件接口,用于连接外部设备和嵌入式系统。以上是嵌入式软考中的一些必备知识点,包括嵌入式系统的基本概念、编程语言、实时操作系统和硬件接口。通过配置串口的波特率、数据位数和校验位等参数,可以实现与其他设备的可靠通信。一、嵌入式系统的基本概念。

PixeGO的博客 312

给我个理由继续使用 Mycat

给我个理由继续使用 Mycat 昨天是 2019 年 7 月 4 日,历史上的今天是美国独立日,也是四位美国前总统逝世的日子,有过往也有新生,是一个新老交替前赴后继的日子。 “基于阿里开源的 Cobar 产品而研发,Cobar 的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。” 这段话来自 Mycat 官网上描...

管先森的博客 9109

RTX6000 PRO BLACKWELL 最优 CUDA 版本选择指南(适配 vLLM/SGLang 大模型推理)

本文针对NVIDIA Blackwell架构RTX6000PRO显卡部署vLLM/SGLang大模型推理引擎时的CUDA版本选择问题,提出专业建议。分析表明,CUDA12.9(需搭配552.06+驱动)是最优选择,因其完全支持BW架构特性,且与vLLM/SGLang最新版本深度适配。文章提供详细的Linux环境部署教程,包括驱动升级、CUDA12.9安装及vLLM/SGLang配置步骤,并指出CUDA13.0目前适配不完善,不推荐新手使用。最后给出常见问题解决方案,强调版本匹配对推理性能和稳定性的重要性。

2501_93651177的博客 681

深度分析|MyCat与DBLE的对比性能调优

问题起因:用benchmarksql_for_mysql对原生MyCat-1.6.1和DBLE-2.17.07版做性能测试对比,发现DBLE性能只到原生版MyCat的70%左右。 问题分析过程:分析过程主要有以下内容:包括现象,收集数据,分析猜测原因,验证猜测的方式来进行。 1.分析瓶颈 1.1先对两者进行一个CPU占用的堆栈分析 通过对CPU火焰图的比较,发现DBL...

33的博客 338

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

​深度分析 | MyCat与DBLE的对比性能调优

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34292287的博客 125

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

mysql mycat 性能_​深度分析 | MyCat与DBLE的对比性能调优

作者简介蓝寅,开源分布式中间件DBLE项目负责人;持续专注于数据库方面的技术, 始终在一线从事开发;对数据复制,读写分离,分库分表的有深入的理解与实践。问题起因:用benchmarksql_for_mysql对原生MyCat-1.6.1和DBLE-2.17.07版做性能测试对比,发现DBLE性能只到原生版MyCat的70%左右。问题分析过程:分析过程主要有以下内容:包括现象,收集数据,分析猜测原因...

weixin_31448343的博客 298

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mycat官方文档_?深度分析 | MyCat与DBLE的对比性能调优

作者简介蓝寅,开源分布式中间件DBLE项目负责人;持续专注于数据库方面的技术, 始终在一线从事开发;对数据复制,读写分离,分库分表的有深入的理解与实践。问题起因:用benchmarksql_for_mysql对原生MyCat-1.6.1和DBLE-2.17.07版做性能测试对比,发现DBLE性能只到原生版MyCat的70%左右。问题分析过程:分析过程主要有以下内容:包括现象,收集数据,分析猜测原因...

weixin_39542043的博客 279

测试bug分析图_深度分析 | MyCat与DBLE的对比性能调优

作者简介蓝寅,开源分布式中间件DBLE项目负责人;持续专注于数据库方面的技术, 始终在一线从事开发;对数据复制,读写分离,分库分表的有深入的理解与实践。问题起因:用benchmarksql_for_mysql对原生MyCat-1.6.1和DBLE-2.17.07版做性能测试对比,发现DBLE性能只到原生版MyCat的70%左右。问题分析过程:分析过程主要有以下内容:包括现象,收集数据,分...

weixin_39721370的博客 126

ADS122U04+STM32高精度温度采集方案:RTD与热电偶实战

温度采集是工业测控系统中最基础也最关键的环节。无论是HVAC控制器还是设备状态监测,都要求对PT100、热电偶等传感器信号进行高分辨率、高稳定性的数字化转换。传统MCU内置ADC往往在分辨率、抗共模干扰和通道隔离上力不从心,而外置24位Δ-Σ ADC配合Cortex-M4主控,构成了当前主流的精密测量架构。ADS122U04IPWR作为带UART接口的24位低频ADC,内部集成PGA、IDAC与精密基准,大大简化了RTD和热电偶的前端电路设计;STM32F405RG则负责通过DMA高效读取数据,并完成线性化

weixin_34218890的博客 414

分库分表Mycat 的替换方案

摘要: Mycat替换方案可分为三类:1)直接迁移至TiDB等分布式数据库(适合大型项目,高一致性需求);2)使用DBLE等Mycat增强方案(中小型项目平滑过渡);3)采用ShardingSphere/Vitess等新一代中间件(适合云原生或Java生态)。TiDB强在分布式事务但资源消耗大,ShardingSphere功能全面且易集成,Vitess适合云原生但学习曲线陡。建议根据项目规模、团队能力和长期规划选择:小项目用ShardingSphere-JDBC,中型项目可选ShardingSphere-P

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 1183

技术分享连接汇总[201801]

内容整理自->java高级交流群【329019348】更多Java高级交流文章 2018/01/02 坑人无数的Redis面试题 为什么epoll会那么高效 《Programming Kotlin》 select / poll / epoll: practical difference for system architects Obfuscation causes VerifyE

六月星空2011的博客 1415

DBLE和Mycat跨分片查询结果不一致案例分析

背景   某一零售业后端使用了分布式中间件+MySQL数据库作为后端存储。但是因为历史问题存在两种分布式中间件,分别是Mycat和DBLE,共用一组后端MySQL实例。分片规则以及后端数据完全一致。最近碰到了一个比较有意思的场景,财务结算单来往明细和业务来往单据的关联查询。一条跨节点join查询在DBLE、Mycat的查询得到的结果不一致。究竟谁对谁错? 环境准备   在虚拟...

33的博客 783

周四见|《开源中间件DBLE对MyCAT的增强与改进》by阎虎青

IT江湖百晓生主讲嘉宾:阎虎青微信号:yanhuqing小鲜肉耶大牛背景:就职于爱可生负责分布式数据库中间件研发工作持续专注于数据库方面的技术, 始终在一线从事开发对数据复制,读写分离,分库分表的有很深的理解和实践爱可生上期公开课分享:《 金融级MySQL高可用方案选型》分享主题周四见|知数堂免费公开课系列之《开源中间件DBLE对MyCAT的增强与改进》PPT页数51页分享时长1个小时随着移动互联

老叶茶馆 1292

探秘Dble:分布式数据库中间件的新星

探秘Dble:分布式数据库中间件的新星 dbleA High Scalability Middle-ware for MySQL Sharding项目地址:https://gitcode.com/gh_mirrors/db/dble 在数字化转型的大潮中,数据量爆炸性增长,对数据库性能和扩展性的要求也随之提高。正是这样一款为应对大规模数据处理挑战而设计的高性能、高可用的分布式数据库中间件。本文将...

gitblog_00045的博客 772

mycat增强版本dble

Introduction · dble manual (actiontech.github.io) 近期发现mycat官网无法访问,于是找了一个旁支版本

雨夜不眠 352

Mycat从入门到放弃

当初写这篇文章的初衷只是想提醒自己在用一个开源产品前不仅要了解其提供的功能,更要了解其功能和场景边界。 1.非分片字段查询 Mycat中的路由结果是通过分片字段和分片方法来确定的。例如下图中的一个Mycat分库方案: 根据 tt_waybill 表的 id 字段来进行分片 分片方法为 id 值取 3 的模,根据模值确定在DB1,DB2,DB3中的某个分片 如果查询条件中有 ...

Dobbin 9万+
上一篇: 回顾 | 开源分布式中间件DBLE社区分享活动总结
下一篇: 基于Xtrabackup及可传输表空间实现多源数据恢复
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值