备案 控制台
开发者社区 数据库 关系型数据库 文章 正文

RDS AliSQL 面向 Binlog 的性能优化大揭密(下)——强效瓶颈消除

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
推荐场景:
学生管理系统数据库设计 搭建个人博客
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
推荐场景:
PolarDB for MySQL 多主集群体验
云原生数据库 PolarDB 分布式版,标准版 2核8GB
推荐场景:
使用PolarDB-X与Flink搭建实时数据大屏
简介: 本篇将继续揭秘AliSQL在binlog高并发性能上做的企业级优化。

背景介绍


在上篇中,我介绍了MySQL官方解决IO问题的binlog group commit优化,并介绍了它的局限性(低并发下效果欠佳)。为此AliSQL引入了binlog in redo优化很好的解决了这个问题。最后一章中,我们提到了影响性能的另一个因素——串行flush binlog带来的瓶颈。


本篇我将继续揭秘AliSQL在binlog高并发性能上做的企业级优化——binlog parallel flush,并给出binlog性能优化的完整版本——binlog in redo V2。


如果您还没有看过上篇,请先阅读: RDS AliSQL 面向 Binlog 的性能优化大揭密(上)—— 极致 IO 优化


一、Binlog Parallel flush 优化

优化背景

Binlog Commit 瓶颈分析

1.png

当我们在MySQL官方代码上做sysbench时,可以看到如上图的耗时占比。在低并发下,redo log和binlog的IO操作耗时占大头,然而在高并发下,耗时占比的大头是 flush binlog操作,IO操作只占到 35% 左右。


这是因为MySQL的binlog group commit机制合并的是事务间的 IO,在并发数很少的时候,只能合并几个事务的 IO 操作,在并发数很多的时候,可以合并几百个事务的 IO 操作,差距非常明显。


从耗时占比可以看出,在高并发下,主要的性能瓶颈来自于flush binlog的操作。


MySQL 的 Binlog Flush 机制

2.png

MySQL的binlog flush主要包含上述步骤,总的来说可以分为两种操作。


  • 第2步和4步是一些解析和处理的动作,我们可以将其称为:事务准备binlog的操作;
  • 第3步和5步是写文件动作(只是写到page cache,并非真 IO),可以称为:事务写binlog的操作。


接下来我们从耗时和可并发性这两个维度来研究这两类操作。


耗时


事务准备binlog的操作在整个flush流程中耗时占比很大,其中GTID event对象的生成,binlog cache的解析和填补,都是繁重的CPU工作;

事务写binlog的操作,仅仅是从MySQL内存到page cache的一个内存拷贝操作,速度很快,耗时很短。


可并发性


事务准备 binlog 的操作是可以并发执行的,每个事务准备自己的 binlog,不会有任何的冲突,因为 GTID 和逻辑时钟还有事务在 binlog 中的位置早已在第一步分配好;


事务写 binlog 的操作是不可并发的,binlog 是一个事务型日志,这意味着在 binlog 文件中,一个事务的 binlog events 必须连续的放在一起。因此,写 binlog 文件时必须串行的,一个接一个的写。

3.png

不幸的是,MySQL 代码实现时,将上述两种操作混在了一起,导致整个 flush 阶段的两种操作,全部串行执行。这导致在高并发下,flush binlog 成为瓶颈。


我们的优化目标是,将 flush binlog 中准备 binlog 的部分拆出来,让每个事务并行执行,以优化性能。


Binlog Flush 的并行化改造

4.png

为了将第一类操作改造的可并行,引入一段预先分配好的内存空间叫做 binlog buffer。Flush binlog 阶段,每个事务串行在 binlog buffer 中分配好空间后,就可以并行的准备自身的 binlog 内容,并写入 buffer 中。随后,再由后台线程将 binlog buffer 按顺序写进 binlog 文件。


并行 Flush Binlog 的流程


在 binlog parallel flush 架构下,flush binlog 的操作被分为了三个部分,分别是串行部分,并行部分和异步线程部分。

5.png

串行部分

  • 分配 buffer 中的空间;
  • 分配 Gtid 和 逻辑时钟。


并行部分

  • 生成 GTID event 并写到 Binlog buffer;
  • 解析 binlog cache 中的 binlog events,填充 postion 和 checksum,并写入 binlog buffer 中。


异步线程部分

  • 由异步的 writer 线程,负责将 binlog buffer 中准备好的部分写入 binlog 文件;
  • 由异步的 Syncer 线程,负责将 binlog 文件持久化。


合并 Redo Log IO

6.png

前面我们对于 binlog flush 的并行优化,大大提升了事务的并发度,这对于 flush binlog 来说是大大缓解了瓶颈。但是对于 redo log 来说,并发执行把原先由 binlog group commit 合并在一起的的 redo IO 又分开了,会导致了较严重的 log write up to 热点。


为此,我们继续保留 MySQL 原有的 binlog group commit 优化,在组内由 leader 串行的执行每个事务的 flush 动作,在组与组之间并发执行 flush。


Binlog Parallel Flush 架构

7.png

上图是 binlog parallel flush 的最终架构。进入提交阶段的事务会被分成多个组,每个组有一个 Leader,Leader 负责执行本组所有事务的提交操作,包括写 binlog buffer,sync redo 和等待异步线程的操作。根据 sync_binlog 参数的取值,leader 会选择等待 writer 或 syncer 线程。多个事务组之间,不同组的 leader 可以并发的执行 flush 动作。


性能测试

8.png

上图中红色曲线是 MySQL 的性能表现,橙色曲线是 AliSQL 使用 binlog parallel flush 后的性能表现。可以看到,在使用双一配置的高可靠场景,使用 parallel flush 可将峰值性能提升 56%;在使用 (0, 2) 的高性能场景,即 sync_binlog = 0,innodb_flush_log_at_trx_commit = 2 的场景下,峰值性能提升幅度可以达到 61%。


二、Binlog in redo V2 优化


上篇提到的 binlog in redo 优化是针对双一场景的 IO 优化,下篇提到的 parallel flush 优化可以应用于双一和(0,2)两种配置。也就是说,在双一场景下,两种优化都可以发挥作用,因此在双一场景下,我们同时使用两种优化思路,完成了 binlog in redo V2 优化。


Binlog in redo V2 架构

9.png

上图是 binlog in redo 优化与 parallel flush 优化结合后的架构图。进入提交阶段的事务会被分成多个组,每个组有一个 Leader,Leader 负责执行本组所有事务的提交操作,包括写 binlog buffer,写事务的 binlog 到 redo log,持久化 redo log 的操作。


随后,事务组结束,每个事务并发的进行自己的 innodb commit。由于 binlog 已经有 redo log 来保护,因此事务提交不需等待 sync 线程完成,原理上来讲也不需等待 writer 线程完成,不会有 crash safe 问题。但是许多用户会订阅 binlog,如果事务已经返回成功,但是 binlog 中还暂时读不到这个事务,可能会影响下游的逻辑判断。


因此,我们将事务返回成功前是否等待 writer 线程,作为一个用户可配置的参数,选择等待则相关逻辑与优化前不会有任何变化,不等待性能更好。


Crash Recovery 机制

10.png

Binlog in redo V2 架构中,当实例 crash 后,binlog 中的内容有可能丢失,因此需要在重启后的 recovery 过程中补齐。


与 V1 不同,在 V2 中 binlog flush 阶段是并行的,这导致 binlog 在 redo log 中可能是乱序的。因此,我们引入一个 recovery buffer,恢复过程中先将 binlog 写到 buffer 中,再将 buffer 写入 binlog 文件中。这样就可以解决乱序的问题。


性能测试

11.png

Binlog in redo V2 能够全方面的优化双一配置下实例的性能。可以看到,在各种并发度下,实例的性能都有显著的提升。


总结


通过上篇讲述的合并 IO 和本篇讲述 binlog 并行写这两种思路,我们对 binlog 提交阶段做了全方位的优化。AliSQL对比MySQL有了全方位,全场景的性能领先

12.png

以上是在 sysbench 的两种不同的业务脚本下,MySQL 和使用 binlog commit 优化的 AliSQL 的性能曲线对比。可以看到,无论是高可靠的(1,1)配置,还是高性能的(0,2)配置,AliSQL 都有着显著的性能提升。


如果您使用 (1, 1) 的高数据可靠性配置,推荐直接使用 Binlog in redo V2 优化,能够适应各种业务压力,带来六成左右的写性能提升;如果您使用 (0, 2) 的高性能推荐使用 Binlog parallel flush 优化,能够讲写性能峰值再提升流程左右。


通过本系列提到的优化手段,AliSQL 在各业务场景,各种数据可靠度,各种并发度下,都取得显著的性能提升。我们能够在同样的资源下,成倍的增大 qps,可以显著降低用户的使用成本。本系列中的所有优化,都会在 RDS MySQL 8.0 的最新版本中上线,欢迎大家使用。


作者简介

武根泽(子堪),RDS MySQL内核团队核心研发,擅长MySQL内核代码研发,性能调优和技术问题探索,在MySQL Binlog,Innodb等领域多有涉猎。关于RDS MySQL内核方面的问题,欢迎邮件联系: vogts.wangt@alibaba-inc.com 咨询。


 / End /  

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
游客a2bbytkdfdyn2
目录
相关文章
半夜敲代码的夜猫子
|
21小时前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第三篇(MySQL性能优化)
MySQL数据库进阶第三篇(MySQL性能优化)
半夜敲代码的夜猫子
8 1
蓝易云
|
2天前
|
关系型数据库 MySQL
蓝易云 - MySQL自动删除binlog日志
注意,这个参数只影响新的binlog文件。如果你的服务器上已经有超过7天的日志文件,你需要手动删除它们,或者使用PURGE BINARY LOGS命令来删除它们。
蓝易云
7 0
三分钟热度的鱼
|
3天前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之假如mysql的binlog有很多个文件,按什么顺序扫描
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
三分钟热度的鱼
16 5
1100237741946300
|
3天前
|
SQL 存储 关系型数据库
深入理解MySQL:数据库管理与性能优化
第一章:MySQL基础 MySQL概述:简要介绍MySQL的历史、特点和应用领域
1100237741946300
32 0
1100237741946300
|
3天前
|
存储 关系型数据库 MySQL
精通MySQL:从基础到高级应用及性能优化
第一章:MySQL入门 1.1 MySQL简介 介绍MySQL的历史、版本和开源特性
1100237741946300
11 0
1100237741946300
|
3天前
|
SQL 关系型数据库 MySQL
精通MySQL:从数据库管理到性能优化
第一章:MySQL入门 MySQL简介:了解MySQL的起源、发展历程以及在Web开发中的重要性
1100237741946300
43 0
1100237741946300
|
3天前
|
关系型数据库 MySQL 数据库
精通MySQL:数据库管理、性能优化与最佳实践
h3> 一、引言 MySQL是一个功能强大的开源关系型数据库管理系统,广泛应用于各种Web应用、企业级应用和数据分析等领域
1100237741946300
21 0
1100237741946300
|
3天前
|
SQL 安全 关系型数据库
精通MySQL:核心功能、性能优化与安全管理
h3> 第一章:MySQL入门 1.1 MySQL概述 介绍MySQL的历史、版本发展及其在当前数据库领域的重要地位
1100237741946300
10 0
兀码
|
17天前
|
SQL 关系型数据库 MySQL
使用mysql数据库的binlog应对故障
【6月更文挑战第1天】本文介绍`mysql的 binlog`工具用于解析MySQL的二进制日志,转换为可执行的SQL语句,主要用于数据库主从复制和增量恢复。定期备份和binlog推送能实现故障时的数据恢复。
兀码
50 9
使用mysql数据库的binlog应对故障
三分钟热度的鱼
|
26天前
|
存储 关系型数据库 MySQL
实时计算 Flink版产品使用合集之如何配置可以实现实时同步多张MySQL源表时只读取一次binlog
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
三分钟热度的鱼
79 0
数据库

关系型数据库

热门文章

最新文章

  • 1
    突破大表瓶颈|小鹏汽车使用PolarDB实现百亿级表高频更新和实时分析
  • 2
    德哥的PostgreSQL私房菜 - 史上最屌PG资料合集
  • 3
    什么场景应该用 MongoDB ?
  • 4
    PostgreSQL 如何实现批量更新、删除、插入
  • 5
    PostgreSQL upsert功能(insert on conflict do)的用法
  • 6
    Linux 性能诊断 perf使用指南
  • 7
    PostgreSQL 9种索引的原理和应用场景
  • 8
    PostgreSQL 如何潇洒的处理每天上百TB的数据增量
  • 9
    Jedis常见异常汇总
  • 10
    MongoDB 存储引擎 WiredTiger 原理解析
  • 1
    PolarDB 开源部署体验评测
    118
  • 2
    MySQL索引18连问,谁能顶住
    156
  • 3
    Bean Searcher v4.3.0 重大更新!
    152
  • 4
    MySQL 示例数据库大全
    165
  • 5
    MySQL Shell 使用指南
    165
  • 6
    重磅|顶会最高奖+1,阿里云PolarDB再获SIGMOD最佳论文奖
    244
  • 7
    CentOS7.9 安装 mysql-8.0.36 踩坑小记
    198
  • 8
    深入研究MySQL意向锁
    138
  • 9
    MySQL存储过程和存储函数的使用
    139
  • 10
    突破大表瓶颈|小鹏汽车使用PolarDB实现百亿级表高频更新和实时分析
    59894
  • 相关产品

  • 云数据库 RDS MySQL 版
    文档详情 产品详情
  • 相关课程

    更多
  • MySQL企业常见架构与调优经验分享
  • 云数据库MySQL版快速上手教程
  • 阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
  • MySQL实战进阶
  • 数据库及SQL/MySQL基础
  • 云数据库MySQL快速入门
  • 相关电子书

    更多
  • 搭建电商项目架构连接MySQL
  • 搭建4层电商项目架构,实战连接MySQL
  • PolarDB MySQL引擎重磅功能及产品能力盛大发布
  • 相关实验场景

    更多
  • 测试场景(RDS无优惠)
  • MySQL引擎及架构优化
  • 基于EBS部署高性能的MySQL服务
  • 使用Python完成RDS数据开发及分析
  • Excel文件转存到RDS数据库
  • 使用CloudLens采集RDS日志并进行审计分析
  • 推荐镜像

    更多
  • mysql
  • postgresql
  • mariadb
  • 下一篇
    2024年阿里云免费云服务器及学生云服务器申请教程参考

    深圳SEO优化公司朔州百度关键词包年推广推荐安庆百姓网标王报价山南网站搜索优化推荐秦皇岛建网站报价南京网站推广工具公司成都SEO按效果付费公司来宾seo网站优化达州百度竞价包年推广多少钱赤峰关键词排名包年推广报价遵义企业网站建设价格黄南seo优化价格忻州网站seo优化大鹏网站建设设计商洛网站优化软件公司南通SEO按天计费报价岳阳网站制作金华关键词排名包年推广报价平凉网站优化推广价格郴州关键词按天收费公司锦州营销型网站建设报价雅安外贸网站建设推荐乌海网站排名优化价格铜仁网站搜索优化哪家好三亚百度seo多少钱景德镇seo优化推荐江门网站推广工具多少钱龙华企业网站建设昆明品牌网站设计推荐池州百度网站优化排名丽水百姓网标王推广公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化