MySQL 8.0 主从复制性能提升

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: MySQL的并行复制,从5.6开始,经过几代的改进,终于在性能上有了不小的提升。 * MySQL 5.6 该版本开始提供并行复制功能,但是5.6的并行复制是schema级别的,所以只有binlog的row event操作的是不同的schema对象,且没有DDL和Foreign Key依赖的情况下,才能实现并行复制。

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 
目录
相关文章
|
16天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
53 3
|
5月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
16天前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
74 6
|
16天前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
62 1
|
2月前
|
缓存 关系型数据库 MySQL
MySQL数据库性能调优:实用技术与策略
通过秉持以上的策略实施具体的优化措施,可以确保MySQL数据库的高效稳定运行。务必结合具体情况,动态调整优化策略,才能充分发挥数据库的性能潜力。
116 0
|
11月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
571 66
|
4月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
5月前
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
8月前
|
SQL 网络协议 关系型数据库
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
209 40
|
8月前
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
417 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多