


01

TPC-C 是由国际数据库事务性能委员会 TPC 组织制定的针对衡量OLTP系统性能的基准测试,涵盖了数据库的增删改查等典型处理路径,最终性能以 tpmC (transaction per minute,每分钟订单创建的数目)来衡量。TPC-C 测试模型能够直接和客观地评估出一个数据库的性能表现,是全球最具公信力的测试标准。
本次TPC-C基准测试,我们所使用的是PolarDB for MySQL 8.0.2版。作为阿里云瑶池数据库自研的旗舰产品,云原生数据库 PolarDB 通过 90 多种单机优化和性能提升方式,将单核性能提升了1.8 倍(对比原纪录),取得了数据库领域的里程碑式成就。本文将揭秘 PolarDB 单机优化的技术内幕。
在打榜过程中,通过对数据库压力模型的深入分析,我们梳理了以下4个核心特征及对应的优化方案:
海量用户连接 → 高并发优化 高 CPU 占用和内存访问 → CPU 和内存效率优化 高 IO 吞吐 → IO链路优化 更长的日志写入链路 → 复制性能优化
这4个特征也是真实线上用户业务常见的性能瓶颈,下面我们将简述 PolarDB 的整体性能链路,再基于这4个典型特征,分别介绍单机性能链路上做的关键优化。
02

作为共享存储的云原生数据库,PolarDB 不仅提供了超强易用性(快速备份和恢复,高可用),以及超强弹性(存储/计算解耦)的能力,还通过软硬协同演进,提供了和本地盘一致的 I/O 时延能力和更强的 IOPS 能力,使得在性能、易用性、扩展性三方面都做到了极致。
传统部署在本地盘的 MySQL 架构,受益于本地盘的低 I/O 时延,但也存在着存储容量有限,弹升困难的限制,并且跨机主备复制的高时延,也掩盖了本地盘在性能上的收益。对于直接部署在云盘的 MySQL 架构,虽然能够利用云盘的存储资源的扩展性和高可用,但云盘的高时延又无法发挥 MySQL 的性能,并且无法做到计算资源的横向扩展。
为了解决性能和扩展性的问题,用户会考虑分布式数据库,但存在业务改造大,运维成本高等问题,PolarDB 通过 Proxy 到底层存储的全链路软硬协同优化,很好地解决了这三点。

图1:兼具高性能,易用性和扩展性的PolarDB

图2:PolarDB 性能链路概览
03

高并发优化
3.1 PolarIndex

图 3:PolarIndex 的多阶段 SMO 流程
3.2 PolarTrans
在事务启动,只需要将事务在 CTS log 中注册即可,提交时在 CTS log 标记提交的 CSN,在可见性判断时,通过事务系统的最大提交时间戳来代替原生活跃事务数组,极大地提高了事务管理的效率。
图 4:CTS log 的实现
3.3 多级分片 Buffer Pool
对于 I/O 密集型的负载,为了减少关键 page 淘汰和频繁移动数据页位置带来的锁开销,PolarDB 在 LRU 链表的头部建立 hot cache list,对于特定 page(索引中间页,元数据页)和根据频率识别的热点表会被优先放入 hot cache,减少淘汰频率。

图 5:多级分片 Buffer pool 的实现
3.4 全异步执行架构
请求协程化:事务请求被封装为独立协程,由用户态调度器管理。
主动让出机制:协程挂起后释放执行权,调度器立即切换到其他就绪协程。
资源高效复用:单线程可并行处理数百个协程,降低线程的调度开销。
PolarDB 设计了基于 eventfd 的轻量级通信协议。每个协程绑定独立的 eventfd 作为信令通道,当协程挂起时,由 epoll 线程实时捕获事件;资源就绪后,通过写入 eventfd 触发信号,立即唤醒挂起线程。该机制突破传统线程广播唤醒的局限,实现三大提升:零无效唤醒、纳秒级响应及百万级并发管理能力。
图 6:异步执行逻辑
04

4.1 乐观开表复用
图 7:乐观开表复用优化4.2 存储过程缓存机制
将用户连接级别的结构缓存转换为全局级别的结构缓存,避免因大量的连接造成内存使用过多,从而来提高 buffer pool 的 page 内存,减少 I/O 开销。
实现存储过程中 SQL 的 prepare 结果缓存,结合乐观开表,将需要绑定的数据表的列信息缓存在 SQL 表达式的 item 中,避免每次存储过程调用时的重复 prepare 开销,造成 CPU 浪费。
实现执行计划缓存,并基于索引统计信息固化简单 SQL 的执行路径,如单主键索引查询,无索引的范围查询,避免优化器下潜到存储引擎,占用额外 I/O 和 CPU 资源。

图 8:PolarDB 存储过程的缓存机制
05

TPC-C 一次事务的执行可能涉及数十次读 IO,使得事务的数据访问性能高度依赖于磁盘 I/O 的性能。
PolarDB 针对 IO 链路提出了一套 PolarIO 解决方案,如图 9 (a) 所示,从存储引擎 Page 和 Redo I/O 两大主要类型出发, 对 Buffer Pool,Redo buffer,I/O 队列进行改造,最后通过自研用户态文件系统 PFS ,持久化到底层的弹性存储中。

图 9: PolarIO 解决方案和并行 redo 日志落盘
06

但是,跨机的复制链路带来了两方面的影响:
复制链路延长了事务等待日志持久化的时间。
在主节点高负载的写入下,备节点也需要更强的复制能力。
图 10:PolarDB 主从同步链路和并行复制框架07

TPC-C 的压力模型涵盖了对 CPU 和 IO 资源全面测试,极大考验了数据库内部大部分模块的并发执行和协同效率。PolarDB 秉承着客户第一的原则,结合客户实际应用场景,持续不断地对数据库进行性能优化,尽可能地让客户所买的每个核都能物尽其用,充分发挥最优的性能。


点击了解 PolarDB登顶TPC-C 更多内容
一键申请 PolarDB免费试用







