MySQL 8.0 主从复制性能提升

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL的并行复制,从5.6开始,经过几代的改进,终于在性能上有了不小的提升。 * MySQL 5.6 该版本开始提供并行复制功能,但是5.6的并行复制是schema级别的,所以只有binlog的row event操作的是不同的schema对象,且没有DDL和Foreign Key依赖的情况下,才能实现并行复制。由于单schema的情况实际上是很常见的,所以这并不是真正意义上的并行复制。

MySQL的并行复制,从5.6开始,经过几代的改进,终于在性能上有了不小的提升。

  • MySQL 5.6

该版本开始提供并行复制功能,但是5.6的并行复制是schema级别的,所以只有binlog的row event操作的是不同的schema对象,且没有DDL和Foreign Key依赖的情况下,才能实现并行复制。由于单schema的情况实际上是很常见的,所以这并不是真正意义上的并行复制。
image.png
如上图所示,5.6的并行复制由Coordinator判断event的schema,并把不同schema的event提交到不同的worker上实现并行复制。

  • MySQL 5.7

开始,并行复制使用了“组提交(Group Commit)”的方法实现,即是说5.7的并行复制打破了5.6并行复制不能在单个schema的限制,5.7可以基于主库上事务的提交顺序,在从库上回放。也就是说,如果两个事务不会相互影响,在主库可以同时提交刷盘,从库复制时也就可以同时提交。通过设置binlog_group_commit_sync_delay参数,可以延长主库commit时日志刷盘前等待的时间(会影响主库写入性能),从而使更多不会冲突的事务可以作为组提交,从而提高从库的复制效率。虽然5.7的这种方式算得上是真正的并行复制了,但是由于依赖主库上并行,从库才能并行,假如主库上并发不高,从库上就只能“线性”复制了。
image.png

  • MySQL 8.0

MySQL 8.0新增参数binlog_transaction_dependency_tracking,可以配置为基于5.7的并行复制COMMIT_ORDER,并较5.7新添加了WRITESET或WRITESET_SESSION模式(WRITESET跟WRITESET_SESSION的区别就是,WRITESET_SESSION 需要保证同一个会话内的事务的先后顺序),即事务在提交时,会影响的行的主键、唯一键、外键等信息以 HASH(DB名,TABLE名,KEY名称,KEY_VALUE1, KEY_VALUE2,.....) 加入到当前事务的 WRITESET中,在复制之前,只需要检测WRITESET是否有并集,即可知道事务是否可以并行回放。
如图,在主库的并发情况如下时
image.png
在WRITESET开启后,备库的复制将会如下图的方式并行执行
image.png

  • 性能对比(COMMIT_ORDER & WRITESET & WRITESET_SESSION)

首先准备3对主从复制的副本集,binlog_transaction_dependency_tracking分别配置为COMMIT_ORDER、WRITESET、WRITESET_SESSION。

使用sysbench的oltp并发操作数据库的主库:

mysqladmin create sbtest
sysbench --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password= \
 --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp_tables_count=2 --oltp-table-size=10000000 --rand-init=on prepare
 
sysbench --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password= \
--test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp_tables_count=2 \
--oltp-table-size=10000000 --num-threads=100 --oltp-read-only=off \
--report-interval=10 --rand-type=uniform --max-time=120 \
 --max-requests=0 --percentile=99 run

同时使用mysqladmin分别在主库、从库执行,可以看到主库、从库上的并发和负载情况,下面的命令将会每隔1秒输出3列数据,分别为:正在执行请求数,当前连接数,正在运行线程数

(mysqladmin ext -i1 | awk '/Queries/{q=$4-qp;qp=$4}/Threads_connected/{tc=$4}/Threads_running/{printf "%5d %5d %5d\n", q, tc, $4}')

通过性能测试不难发现,MySQL 8.0 WRITESET_SESSION模式在单线程时和COMMIT_ORDER模式差距不大,但随着线程数增加,WRITESET_SESSION优势很明显,而WRITESET在线程较少时,性能上有了质的飞跃。但随着线程数的增加,各种方式性能趋近于相同。
image.png

MySQL 8.0 现已登陆 云数据库 RDS版,如有需要,可在阿里云控制台云购买使用!
(本文图片来源于网络)

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
SQL 分布式计算 NoSQL
【SQL 审核查询平台】Archery使用介绍
【SQL 审核查询平台】Archery使用介绍
838 0
【SQL 审核查询平台】Archery使用介绍
|
消息中间件 负载均衡 Java
Kafka与SpringBoot的整合使用
Kafka与SpringBoot的整合使用
374 0
|
NoSQL 大数据 分布式数据库
【HBase】(2)-集群的启动与关闭
【HBase】(2)-集群的启动与关闭
543 0
【HBase】(2)-集群的启动与关闭
|
存储 缓存 Java
面试官:你知道包装类的缓存机制吗?
面试官:你知道包装类的缓存机制吗?
1614 0
|
2月前
|
JavaScript 安全 API
Github 2.2k star,揭秘高效开发利器!之前我还手搓,现在有它,直接起飞
FastMCP 是一个由 punkpeye 开发的 TypeScript 框架,旨在简化 MCP 服务器构建流程,助力 LLM 无缝连接工具与数据资源。它提供工具(Tool)、资源(Resource)、Prompt、传输方式等模块,支持 Schema 校验、CLI 调试、HTTP Streaming/SSE 等特性,解决开发者在 MCP 协议实现中的复杂性问题。具备轻量高效、部署灵活、生态兼容等优势,适合桌面客户端与 Web 服务集成,助力开发者快速实现业务逻辑。项目持续活跃维护,GitHub 已获 2.2k star。
|
SQL druid Java
线程池相关故障问题之Druid数据库连接池中,为何需要设置TransactionTimeout
线程池相关故障问题之Druid数据库连接池中,为何需要设置TransactionTimeout
476 0
|
10月前
|
存储 算法 C语言
【C语言】深入浅出:C语言链表的全面解析
链表是一种重要的基础数据结构,适用于频繁的插入和删除操作。通过本篇详细讲解了单链表、双向链表和循环链表的概念和实现,以及各类常用操作的示例代码。掌握链表的使用对于理解更复杂的数据结构和算法具有重要意义。
2931 6
|
机器学习/深度学习 人工智能 弹性计算
|
数据采集 监控 算法
阿里云百炼模型训练评测
【7月更文挑战第1天】阿里云百炼提供一站式的模型开发服务,包括大模型训练、调用与部署。用户可查看剩余调用次数,点击开通服务以使用模型。计费基于调用量,涵盖推理、训练和部署。开通服务需同意协议,成功后将收到短信通知。评测显示,平台功能丰富,易用性强,能显著提升模型效果,且模型部署简便。建议优化数据预处理工具并增加实例教程。
|
机器学习/深度学习 算法 Python
CatBoost中级教程:特征组合与建模技巧
CatBoost中级教程:特征组合与建模技巧【2月更文挑战第11天】
560 0