MySQL 5.6, 5.7并行复制测试(二)(r12笔记第10天)

简介:   昨天花了点时间整理了下并行复制在5.6,5.7中的一些差别和测试,当然只是一个开始,因为里面还有不少需要完善的部分,总体的感觉来看MySQL 5.7里的并行复制改进很大,能够极大提高效率,充分利用资源。

  昨天花了点时间整理了下并行复制在5.6,5.7中的一些差别和测试,当然只是一个开始,因为里面还有不少需要完善的部分,总体的感觉来看MySQL 5.7里的并行复制改进很大,能够极大提高效率,充分利用资源。

  那我们来简单回顾一下MySQL的复制里的一些事情,然后继续展开测试。

   首先借丁奇大师总结的一个经典的主从复制的流程图来展开。

整个复制的流程中,看似存在多个节点会存在延迟的可能,而如果把这些工作都细化,那么就会有一个很本质的原因,那就是在主库端的更新是多线程,而从库端更新是单线程。

图片.png

   这样一个看似“存在即合理”方案在MySQL 5.6以前都是这么做的。最早的复制和statement格式做斗争,过了改进,有了row格式,也算是复制方向上的一大改进,而在MySQL 5.6中引入了并行复制,这一点能够缓和原本的复制瓶颈。

    但是复制的效率提升不是严格意义上质的飞跃,算是一个开篇,因为支持的是数据库级别的,如果直接多线程是否可以,这个按理说是一个很常规的思路,为什么MySQL迟迟没有推出好的方案来。

   多线程存在一些待解决的难题,其中之一就是语句的顺序无法保证,无论如何,日志都是需要顺序写,在源端是多线程并发操作,而映射到日志中,必然是一个顺序的记录方式,而这个操作到了从库,也只能老老实实的按照顺序来应用,如果采用多线程就得尤其注意这个顺序,我们可以逐步来细分,首先对于同一个表的更新只能按照顺序来同步,而这个粒度可以逐步细分,比如数据库级,表级等,目前MySQL 5.6中是按照数据库级来做的,当然这个粒度还是有些粗。在5.7就全面改进了。

   当然我们在开始具体的测试之前,我简单说一下我们量血压的场景,一般都会有一个收缩压,舒张压的指标,对于主从复制而言,我突然想到了这一点,我觉得还是有可以借鉴的地方。

    比如我昨天测试的而一个图,是MySQL 5,6,5.7单线程,多线程的延迟对比图。

   其实这个图我感觉没有画完,因为大批量的事务并发处理,必然会导致延迟,比如有10分钟的高强度并发,那么10分钟后延迟不是立即消失的,从库得慢慢消化这个延迟的数据,这个时间我们也需要关注,至于主从一致后的延迟回落到底是什么样,我想只是看这个图可能还看不出个所以然,所以想到了这一点,我就继续补充了一下测试的场景,调整了时间。

   下面这个图花了我不少的时间去收集数据,整理。

中间红色的箭头就是在指定的时间范围的加压测试,而右边的部分则是延迟回落的一个过程,可以很清晰的看到,对于从库的延迟在加压完成后,延迟依旧会逐步增长,达到一个峰值后,迅速回落,回落的过程来看,MySQL 5.6中的单线程,多线程,和MySQL 5.7中的测试情况大体相似,从耗时情况和延迟回落的趋势,基本都是相似的,而MySQL 5.7的并行复制相比而言就是一个亮点,数据加压后的延迟回落极快,整个过程耗时要低很多。

      当然这个图例也反映出来一些问题,那就是MySQL 5.6的单线程和多线程的结果几乎一样,这就对了,这就错了。对了是由此可以看出在这个测试场景中,并行复制没有派上用场,错了的原因是测试的场景还可以继续改进,可以更有针对性。

    怎么改进呢,因为5.6中是数据库级的复制,所以我们可以建立多个数据库,然后在从库开启并行复制来改进,对比测试。

    怎么能够快速看到一个效果呢。

    我们继续开启sysbench的加压测试,使用pt工具同步检测延迟,花几分钟就可以看出差别来,比如我们首先建立4个数据库,每个数据库下创建10个表。

mysqladmin create sysbenchtest1初始化一部分数据,对于sysbenchtest1如此,其它的几个数据库也是类似的操作。

sysbench /home/sysbench/sysbench-1.0.3/src/lua/oltp_read_write.lua --mysql-user=root --mysql-port=3307 --mysql-socket=/home/mysql_5.6.23/mysql.sock --mysql-host=localhost --mysql-db=sysbenchtest1 --tables=10 --table-size=2000000 --threads=30 prepare然后开启sysbench测试。

sysbench /home/sysbench/sysbench-1.0.3/src/lua/oltp_read_write.lua --mysql-user=root --mysql-port=3307 --mysql-socket=/home/mysql_5.6.23/mysql.sock --mysql-host=localhost --mysql-db=sysbenchtest1 --tables=10 --table-size=2000000 --threads=30  --time=300 run查看延迟的情况:

pt-heartbeat h='10.127.128.78',u='pt_checksum',p='pt_checksum',P=3307 -D sysbenchtest --table=heartbeat --monitor --master-server-id=3307 --frames=5s --interval=5几个简单的对比就可以说明。

开启并行复制模式时,延迟如下:

0.00s [  0.00s ]
0.00s [  0.00s ]
0.00s [  0.00s ]
0.00s [  0.00s ]
0.00s [  0.00s ]
0.00s [  0.00s ]
0.00s [  0.00s ]
0.00s [  0.00s ]然后修改参数slave_parallel_workers为0,切换回单线程模式,延迟开始加大。

1.00s [  0.20s ]
0.00s [  0.20s ]
2.00s [  0.60s ]
0.00s [  0.60s ]
1.00s [  0.80s ]
0.00s [  0.60s ]
0.00s [  0.60s ]
0.00s [  0.20s ]
0.00s [  0.20s ]
1.00s [  0.20s ]再次切换回并行复制模式,延迟逐渐减低,并回复平稳。

0.00s [  0.40s ]
0.00s [  0.20s ]
0.00s [  0.00s ]
0.00s [  0.00s ]
0.00s [  0.00s ]
0.01s [  0.00s ]
0.00s [  0.00s ]
0.00s [  0.20s ]
0.00s [  0.20s ]当然想看到更加细致的图形对比,也不是一件难的事情,得容我花点时间收集下数据,给出一个详细的对比报告。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
Oracle 关系型数据库 MySQL
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
|
存储 数据可视化 测试技术
一个测试工程师的实战笔记:我是如何在Postman和Apipost之间做出选择的?
优秀的API测试工具应该具备: 分层设计:既有可视化操作,也开放代码层深度定制 场景感知:自动识别加密需求推荐处理方案 协议包容:不强迫开发者为了不同协议切换工具 数据主权:允许自主选择数据存储位置
527 7
|
SQL 缓存 关系型数据库
使用温InnoDB缓冲池启动MySQL测试
使用温InnoDB缓冲池启动MySQL测试
280 0
|
SQL 缓存 关系型数据库
MySQL8.4 Enterprise安装Firewall及测试
MySQL8.4 Enterprise安装Firewall及测试
477 0
|
安全 关系型数据库 MySQL
MySQL8使用物理文件恢复MyISAM表测试
MySQL8使用物理文件恢复MyISAM表测试
311 0
|
关系型数据库 MySQL 测试技术
【赵渝强老师】MySQL的基准测试与sysbench
本文介绍了MySQL数据库的基准测试及其重要性,并详细讲解了如何使用sysbench工具进行测试。内容涵盖sysbench的安装、基本使用方法,以及具体测试MySQL数据库的步骤,包括创建测试数据库、准备测试数据、执行测试和清理测试数据。通过这些步骤,可以帮助读者掌握如何有效地评估MySQL数据库的性能。
696 5
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1631 23
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
2207 24
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
1254 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡

推荐镜像

更多