华为云数据库内核专家为您揭秘:GaussDB(for MySQL) 并行查询有多快?
摘要:GaussDB(forMySQL)并行查询为何快人一步?华为云数据库内核专家这样说
本文分享自华为云社区《华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快?》,作者:饶珑辉 华为云数据库内核专家。
近期,华为云数据库团队推出了专家技术解读系列,该系列基于 GaussDB 产品,每期围绕 1 个核心技术点进行深度剖析。上期由华为瑞典研究所数据库 Lab 首席科学家吕漫漪女士解读《GaussDB(for MySQL)云栈垂直集成的力量有多大?》,本期将由华为云数据库内核专家饶珑辉针对吕漫漪文章中介绍的 GaussDB(forMySQL)关键特性之“并行查询”(PQ: ParallelQuery)进行详细解读。
一般来讲,数据库有两个非常广泛的应用场景,分别是“事务处理”和“查询分析”。开源 MySQL 作为国内使用最多的关系型数据库之一,很早在 5.1 版本就开始支持事务处理的场景。随着技术演进,开源 MySQL 在版本更新迭代过程中不但持续增强事务处理能力,并且最新的 MySQL 8.0 版本已经开始支持许多查询分析型的特性,比如 Window function、CTE、HashJoin、列直方图、并行 COUNT 计算等等。
华为云 GaussDB(for MySQL) 作为华为最新一代高性能企业级分布式关系型数据库,根植 MySQL 开源社区,不但继承了开源的所有查询分析特性,还面向企业级应用查询负载开发了许多增强特性,如并行查询、查询计算下推(NDP: Near Data Processing)等等。
在传统数据解决方案中,“事务处理”和“查询分析”分别放在不同类型的库上完成,这是因为事务处理以数据增、删、改,以及小数据查询为主,更加注重实时响应、高吞吐和事务性要求。而“查询分析”以大数据量复杂计算为主,更加注重数据容量扩展性、复杂计算能力等。下图展示的是传统数据解决方案:OLTP 数据库满足在线事务处理需求,OLAP 数据仓库满足分析型查询需求。
客户需要什么样的数据库?
当前业界对数据库的普遍需求是:实时响应、高吞吐、满足事务性、良好的扩展性以及支持复杂查询。这对于使用者而言有很多好处:首先是降低部署成本,用户只需要部署一套数据库集群即可;其次是解决了数据迁移时延的问题,更新和查询运行在同一套集群中;还有就是支持事务性查询,满足一致性、原则性、隔离性和持久性要求,查询结果会更加准确。
针对用户需求,华为云原生数据库 GaussDB(forMySQL)通过技术创新,具备了同时满足事务处理和查询分析的能力。GaussDB(for MySQL)是一款 100%兼容 MySQL 语法的 OLTP 事务关系型数据库,架构上采用了计算和存储分离的设计,计算资源和存储资源可以分别进行独立在线扩展。存储层使用了华为自研分布式存储系统 DFV(数据功能虚拟化: Data Function Virtualisation),最大可以扩展到 128TB 容量,单个计算节点最大规格可支持 64 核 CPU,512G 的内存容量,最多可以支持 1 个写节点和 15 个只读节点。
除了强大的资源扩展能力,GaussDB(forMySQL)针对事务处理和查询分析分别作了优化,极大增强了事务读写和查询分析的能力。本文将重点介绍增强的查询分析能力之一:并行查询。
查询分析提升之道:释放 CPU 多核计算资源
众所周知,软件计算能力的提升一方面得益于 CPU 硬件能力的增强,另一方面也得益于软件设计层面能够充分利用 CPU 的计算资源。当前处理器普遍采用多核设计,如 GaussDB(for MySQL)单个节点最多可以支持 64 核的 CPU。单线程查询的方式至多能用满一个核的 CPU 资源,性能提升程度有限,远远无法满足企业大数据量查询场景下对降低时延的要求。因此,复杂的查询分析型计算过程必须考虑充分利用 CPU 的多核计算资源,让多个核参与到并行计算任务中才能大幅度提升查询计算的处理效率。
下图是使用 CPU 多核资源并行计算一个表的 count(*)过程的例子:表数据进行切块后分发给多个核进行并行计算,每个核计算部分数据得到一个中间 count(*)结果,并在最后阶段将所有中间结果进行聚合得到最终结果。
GaussDB(forMySQL)查询分析提升秘笈:并行查询
GaussDB(for MySQL)支持并行执行的查询方式,用于降低分析型查询场景的处理时间,满足企业级应用对查询低时延的要求。如前面所述,并行查询的基本实现原理是将查询任务进行切分并分发到多个 CPU 核上进行计算,充分利用 CPU 的多核计算资源来缩短查询时间。并行查询的性能提升倍数,理论上与 CPU 的核数正相关,就是说并行度越高能够使用的 CPU 核数就越多,性能提升的倍数也就越高。
下图展示的是:在 GaussDB(forMySQL)的 64U 实例上查询 100G 数据量的 COUNT(*)查询耗时,不同的查询并发度分别对应不同耗时,并发度越高对应的查询耗时越短。
GaussDB(for MySQL)支持多种类型的并行查询算子,以满足客户各种不同复杂查询场景。当前最新版本(2021-9)已经支持的并行查询场景包括:
主键查询、二级索引查询
主键扫描、索引扫描、范围扫描、索引等值查询,索引逆向查询
并行条件过滤(where/having)、投影计算
并行多表 JOIN(包括 HashJoin、NestLoopJoin、SemiJoin 等)查询
并行聚合函数运算,包括 SUM/AVG/COUNT/BIT_AND/BIT_OR/BIT_XOR 等
并行表达式运算,包括算术运算、逻辑运算、一般函数运算及混合运算等
并行分组 group by、排序 order by、limit/offset、distinct 运算
并行 UNION、子查询、视图查询
并行分区表查询
并行查询支持的数据类型包括:整型、字符型、时间类型、浮点型等等
其他查询
下图是 GaussDB(for MySQL)并行查询针对 TPC-H 的 22 条查询场景所做的性能测试结果,测试数据量为 100G,并发线程数据是 32。下图展示了并行查询相比传统 MySQL 单线程查询的性能提升情况:32 并行执行下,单表复杂查询最高提升 26 倍性能,普遍提升 20+倍性能。多表 JOIN 复杂查询最高提升近 27 倍性能,普遍提升 10+倍性能。子查询性能也有较大提升。
总而言之,GaussDB(for MySQL)并行查询充分调用了 CPU 的多核计算资源,极大降低了分析型查询场景的处理时间,大幅度提升了数据库性能,可以很好的满足客户多种复杂查询场景的低时延要求。目前,GaussDB(for MySQL)并行查询功能已经全网上线,更多并行查询场景正在不断解锁中,欢迎大家前往华为云官网体验:https://www.huaweicloud.com/product/gaussdb_mysql.html
Ps:看完觉得还不过瘾?下期将由我们另一位专家为大家带来 GaussDB(for MySQL) “并行 DDL”技术解读,更多精彩,敬请期待!
饶珑辉,华为云数据库内核专家。十年以上数据库内核研发经验,精通 MySQL 内核原理和源码。负责华为云数据库 GaussDB(for MySQL)的高性能 SQL 查询引擎功能规划、设计和研发。
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/abde1040792523df007774aa7】。文章转载请联系作者。
评论