登顶TPC-C|云原生数据库PolarDB技术揭秘:弹性并行查询(ePQ)篇

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 「PolarDB登顶TPC-C技术揭秘」系列硬核文章

导读

日前,阿里云PolarDB云原生数据库以超越原记录2.5倍的性能一举登顶TPC-C基准测试排行榜,以每分钟20.55亿笔交易(tpmC)和单位成本0.8元人民币(price/tpmC)的成绩刷新TPC-C性能和性价比双榜的世界纪录


每一个看似简单的数字背后,都蕴含着无数技术人对数据库性能、性价比和稳定性的极致追求,PolarDB的创新步伐从未止步。「阿里云瑶池数据库」公众号特此推出「PolarDB登顶TPC-C技术揭秘」系列硬核文章,为你讲述“双榜第一”背后的故事,敬请关注!


本文为系列连载第5篇——弹性并行查询(ePQ)篇


👉 点击查看本系列往期内容


1. 概述

image.png

TPC-C是由国际数据库事务性能委员会TPC组织发布、专门针对OLTP系统的测试模型,涵盖了数据库的增删改查等典型处理路径,以此来测试数据库的OLTP性能,最终性能以tpmC(每分钟订单创建数目)来衡量,TPC-C测试模型能够直观地评估出一个数据库的性能表现。


本次TPC-C基准测试,我们所使用的是PolarDB for MySQL 8.0.2版PolarDB采用云原生架构,通过软硬件高效结合,实现了性能、可扩展性和性价比的全面提升。其创新的云原生架构突破了单集群的扩展性瓶颈,支持数千节点的横向扩展,单集群可管理100PB级数据。除了写入性能的突破,查询也具备了接近线性扩展的能力,其中查询场景分为:


  • 查询数据仅涉及单个节点,比如TPC-C中交易类查询,这类查询直接路由至对应节点完成计算。
  • 查询数据涉及多个或所有节点,比如TPC-C审计中的部分查询,这类查询由ePQ并行计算引擎完成分布式查询。


PolarDB弹性并行查询(Elastic Parallel Query,简称ePQ)是PolarDB MySQL发布的企业级查询加速功能,同时支持单机并行和多机并行两种模式,单机并行是利用节点内的计算资源并行加速查询,多机并行是利用集群内任意节点的空闲资源进行并行加速,具备分布式执行能力。从用户视角看,PolarDB ePQ以集群地址(Endpoint)的方式对外提供服务,不同节点分组构成集群分组,不同场景的业务可选择配置不同的分组,各自配置合适的并行策略,以实现业务隔离。如下图示ePQ的部署架构图:

image.png

PolarDB ePQ部署架构


ePQ并行计算引擎为PolarDB提供了具备极致扩展能力的分布式执行框架,在一写多读形态中,由于是共享存储,任意节点均可以访问到全部数据,ePQ并行计算的子任务可以被调度到任意节点运行,调度器主要考虑因素为资源负载。但在PolarDB多主分区表形态中,每个物理分区的访问由对应节点负责,ePQ并行计算引擎同样可以感知数据的分布属性,基于代价生成最优的分布式执行计划。

2. PolarDB ePQ技术架构

2.1 整体架构

PolarDB ePQ的目标是打通集群计算层的计算资源,基本原理是将一个复杂查询任务拆分为多个子任务,子任务可以被派发到同集群内的任意节点执行计算,有效利用集群内其它节点空闲计算资源(CPU、 内存等)来加速查询。PolarDB ePQ功能属于内核特性,任意节点都可以提供完整的服务,如下图是从内核视角看到的弹性并行查询的架构图:

image.png

PolarDB ePQ架构图

  • 并行优化器(PQ Optimizer),在串行计划的基础上做信息提取,然后基于代价的枚举拆分出最优的子计划切片(Plan Slices)。
  • 全局资源视图(Global Resource View),维护集群内所有节点的实时负载信息,方便协调器快速找出有空闲计算资源的节点。
  • 任务协调器(Coordinator),根据实时资源负载情况,从任务队列中调度执行。
  • 弹性并行执行器(Parallel Execution Engine),负责将被调度的子计划切片(Plan slices)生成对应的Physical Plan,然后交给Executor模块执行。如果是远程节点执行,还需要将Phsical Plan序列化,通过内部网络通道传输到远程节点上执行。
  • 资源管理器(Resource Manger),提供限制并行查询使用资源上限的能力,比如当CPU使用率超过了70%就不再选择并行执行。
  • 基于共享存储的跨机并行架构,可以保证查询结果的实时性,并在跨节点一致性视图机制的保证下,子任务在任意节点执行都能读取到正确的数据。

2.2 并行优化器

并行优化器(PQ Optimizer) ,在串行计划的基础上做信息提取,然后基于代价的枚举拆分出最优的子计划切片(Plan Slices)。


并行优化是一个自底向上,基于动态规划的穷尽式枚举过程,在过程中会针对每个算子,枚举可能的并行执行方式和数据分发方式,并基于输出数据的Physical Property(distribution + order)构建物理等价类,从而做局部剪枝,获取局部子问题的最优解并向上层传递,最终到root operator获取全局最优解。


以下是针对t1 NLJ t2这个算子,做枚举过程的一个简要示例:

image.png

在整体枚举完成后,计划空间中会产生一系列带有数据分发Exchange Enforcer的物理算子树,基于代价选择最优树即可,然后以Enforcer作为子计划的切分点,可以构建出一系列的执行计划抽象描述,输出到plan generator中。

2.3 分布式执行引擎

执行引擎主要负责任务的派发、执行、和状态管理。 接受客户查询的线程称为leader线程,它负责将并行查询任务派发到各个节点上,每个远程节点还会有一个migrantleader线程,远程节点的workers任务由各自的migrant leader来管理,leader负责管理migrant leader和本地的workers,这样一个两级分组式管理的模式,好处是最大限度的减少了远程信令控制通道的传输内容和频次。 

image.png

引擎中的通信通道有2种,一个是负责任务派发和worker状态收集的信令控制通道,它是一个双向的异步消息通道。另一个数据通道只负责传输worker的结果数据,是一个单向的传输通道,虽然传输方向是单向的,但需要支持多种数据shuffle方式,比如repartition/broadcast等,而且需要同时支持本地和远程跨机两种模式。


引擎的数据驱动模型采用的是Pull模式,这样可以灵活嵌入到MySQL的火山执行引擎中,另外pull模式的优势是数据实时性高,能做到极致的流水线处理。

2.4 自适应调度

因为是共享存储架构,理论上可以将并行任务调度到任意节点执行,但并行查询的目标是利用空闲计算资源进行加速,并且不能对客户线上业务造成负面影响。


全局资源视图模块主要负责维护实时的节点负载信息,每个节点负责采集自己的工作负载信息,比如CPU/IO、Memory等,然后将负载信息用UDP协议广播给其它所有节点,两两互相广播后,所有节点都维护了一份各个节点的资源视图列表。


Adaptive available factor机制避免资源争抢,原理是为每个节点设置一个可用比率factor,假设发现一个节点剩余可用资源为100,初始factor是个保守值,比如是20%, 那最多只使用这个节点空闲资源的20%,当检测到连续n秒资源使用率依然没有超过阈值,则逐渐提升factor比率。当一旦发现该节点资源超过预期,则将factor快速下调,这样一个慢启动快回调的自适应调整机制,来实现一个尽量的动态平衡。

image.png

基于负载的自适应调度

Workers分配原则,在已知的资源列表中,如何分配并行查询中的多组workers:


1、最小跨机传输原则,因为worker和worker之间数数据交互,尽量减少跨机的数据传输。

image.png

2、同节点内的workers尽量访问连续的数据分片,连续的数据分片可以获得更好的cache亲和性,性能更优。

image.png

3. TPC-C加速场景

3.1 并行JOIN优化

基于ePQ执行引擎各种组件的完备性,可以支持丰富的JOIN并行方式

  • Parallel NestLoop JOIN
  • Parallel Hash JOIN
  • Parallel Partition-wise JOIN


因采用多主分区表形态,在TPC-C Consistency审计的查询SQL中,Parallel Partition-wise JOIN发挥了重要作用,当查询join列是分区键时,无需数据shuffle,在本地节点完成JOIN。不仅支持了Partition-wise Hash Join,也支持了Partition-wise Nest loop Join,比如:

image.png

TPC-C Consistency 1中查询SQL

3.2 Partition-wise Materialize优化

当查询语句中有派生表且要参数JOIN时,一般的做法是先并行物化,然后再将物化表作为广播表广播到其它节点参与JOIN,当物化表结果集比较大,需要广播给上千个节点,性能损耗非常大,而且在shuffle过程中还有单点瓶颈问题,TPC-C Consistency审计中就有多个这类场景,比如consistency2中查询:

select t1.d_w_id, t1.d_id, t1.max_o_id1, t2.max_o_id2, t3.max_o_id3
from
    (select d_w_id, d_id, d_next_o_id - 1as max_o_id1
from bmsql_district) t1,
    (select o_w_id, o_d_id, max(o_id) as max_o_id2
from bmsql_oorder
groupby o_w_id, o_d_id) t2,
    (select no_w_id, no_d_id, max(no_o_id) as max_o_id3
from bmsql_new_order
groupby no_w_id, no_d_id) t3
where t1.d_w_id = t2.o_w_id
and t1.d_w_id = t3.no_w_id
and t1.d_id = t2.o_d_id
and t1.d_id = t3.no_d_id
and (t1.max_o_id1 != t2.max_o_id2 or t1.max_o_id1 != t3.max_o_id3 or t2.max_o_id2 != t3.max_o_id3);

t2和t3两个物化表内部有group by算子,不支持展开,只能先进行物化再进行JOIN,为提升此类查询性能,ePQ支持了Partition-wise Materialize,将物化下推到各个节点分开物化,不仅避免了数据跨机shuffle的开销,也避免了gather到leader节点再广播的单点瓶颈问题,做到了更充分的并行。

image.png

TPC-C Consistency 2查询使用Partition-wise Materialize

4. TPC-H加速效果

TPC-C测试考察的是交易类业务场景,ePQ作为并行执行框架,线上业务主要应用于轻分析类查询加速,查询加速比是评估并行查询性能非常重要的指标,在相同的计算资源情况下,并行对比原串行的加速比,如下是TPC-H 100G数据量的加速比测试。

image.png

测试实例规格为16c128G主从2节点,开启ePQ,TPC-H中22条SQL均可以并行加速平均加速比为22.5倍。因为ePQ支持分布式多机并行,水平扩容节点还可以继续线性加速,下面测试了更大数据量(TPC-H 1T)在水平扩容场景下的线性加速能力。

image.png

其中22条SQL全部支持多机并行,17条可以继续线性加速。

5. 总结

从用户视角看,云原生数据库最核心的价值是提供低运维成本的可弹性扩展的数据库服务,让用户可以更多专注自身业务上,关键是随着用户数据体量日益增长,依旧能提供稳定可预期的查询性能,让用户业务可持续稳定的获取关键数据insight,最大化提升业务价值。如果随着用户数据增长,报表分析类查询性能逐渐衰退,即便是扩容资源也无法改善是用户无法接受的,支持并行查询,提供可弹性扩展的线性加速能力是云原生数据必须具备的能力。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3天前
|
人工智能 Cloud Native 安全
云原生+AI 为企业出海提供全新技术引擎!明天见
5月22日 14:00「飞天发布时刻」,阿里云云原生应用平台产品负责人李国强将重磅揭晓面向 AI 场景的云原生产品体系升级,通过弹性智能的全球一体化架构、开箱即用的云原生 AI 工程化能力,为中国企业出海提供全新技术引擎。
|
1月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:弹性并行查询(ePQ)篇
阿里云PolarDB云原生数据库在TPC-C基准测试中刷新了性能和性价比的世界纪录,达到每分钟20.55亿笔交易(tpmC),单位成本仅0.8元人民币。PolarDB采用云原生架构,支持数千节点横向扩展,具备弹性并行查询(ePQ)功能,可显著加速复杂查询。此外,PolarDB还推出了国产轻量版,以软件形式部署,满足多样化需求。
|
23天前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
2月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
23天前
|
存储 关系型数据库 MySQL
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
本文详细介绍了在 MySQL 中创建数据库和表的方法。包括安装 MySQL、用命令行和图形化工具创建数据库、选择数据库、创建表(含数据类型介绍与选择建议、案例分析、最佳实践与注意事项)以及查看数据库和表的内容。文章专业、严谨且具可操作性,对数据管理有实际帮助。
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
|
12天前
|
SQL 关系型数据库 MySQL
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
这是一份详细的MySQL安装与配置教程,适合初学者快速上手。内容涵盖从下载到安装的每一步操作,包括选择版本、设置路径、配置端口及密码等。同时提供基础操作指南,如数据库管理、数据表增删改查、用户权限设置等。还介绍了备份恢复、图形化工具使用和性能优化技巧,帮助用户全面掌握MySQL的使用方法。附带常见问题解决方法,保姆级教学让你无忧入门!
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
|
4天前
|
关系型数据库 MySQL 定位技术
MySQL与Clickhouse数据库:探讨日期和时间的加法运算。
这一次的冒险就到这儿,期待你的再次加入,我们一起在数据库的世界中找寻下一个宝藏。
28 9
|
2月前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
471 82
|
1月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
1月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。

相关产品

  • 云原生数据库 PolarDB