摘要:GaussDB(for MySQL)并行查询为何快人一步?华为云数据库内核专家这样说

本文分享自华为云社区《华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快?》,原文作者:饶珑辉 华为云数据库内核专家 。

近期,华为云数据库团队推出了专家技术解读系列,该系列基于GaussDB产品,每期围绕1个核心技术点进行深度剖析。上期由华为瑞典研究所数据库Lab首席科学家吕漫漪女士解读《GaussDB(for MySQL)云栈垂直集成的力量有多大?》,本期将由华为云数据库内核专家饶珑辉针对吕漫漪文章中介绍的GaussDB(for MySQL)关键特性之“并行查询”(PQ: Parallel Query)进行详细解读。

一般来讲,数据库有两个非常广泛的应用场景,分别是“事务处理”和“查询分析”。开源MySQL作为国内使用最多的关系型数据库之一,很早在5.1版本就开始支持事务处理的场景。随着技术演进,开源MySQL在版本更新迭代过程中不但持续增强事务处理能力,并且最新的MySQL 8.0版本已经开始支持许多查询分析型的特性,比如Window function、CTE、Hash Join、列直方图、并行COUNT计算等等。

华为云GaussDB(for MySQL) 作为华为最新一代高性能企业级分布式关系型数据库,根植MySQL开源社区,不但继承了开源的所有查询分析特性,还面向企业级应用查询负载开发了许多增强特性,如并行查询、查询计算下推(NDP: Near Data Processing)等等。

在传统数据解决方案中,“事务处理”和“查询分析”分别放在不同类型的库上完成,这是因为事务处理以数据增、删、改,以及小数据查询为主,更加注重实时响应、高吞吐和事务性要求。而“查询分析”以大数据量复杂计算为主,更加注重数据容量扩展性、复杂计算能力等。下图展示的是传统数据解决方案:OLTP数据库满足在线事务处理需求,OLAP数据仓库满足分析型查询需求。

客户需要什么样的数据库?

当前业界对数据库的普遍需求是:实时响应、高吞吐、满足事务性、良好的扩展性以及支持复杂查询。这对于使用者而言有很多好处:首先是降低部署成本,用户只需要部署一套数据库集群即可;其次是解决了数据迁移时延的问题,更新和查询运行在同一套集群中;还有就是支持事务性查询,满足一致性、原则性、隔离性和持久性要求,查询结果会更加准确。

针对用户需求,华为云原生数据库GaussDB(for MySQL)通过技术创新,具备了同时满足事务处理和查询分析的能力。GaussDB(for MySQL)是一款100%兼容MySQL语法的OLTP事务关系型数据库,架构上采用了计算和存储分离的设计,计算资源和存储资源可以分别进行独立在线扩展。存储层使用了华为自研分布式存储系统DFV(数据功能虚拟化: Data Function Virtualisation),最大可以扩展到128TB容量,单个计算节点最大规格可支持64核CPU,512G的内存容量,最多可以支持1个写节点和15个只读节点。

除了强大的资源扩展能力,GaussDB(for MySQL)针对事务处理和查询分析分别作了优化,极大增强了事务读写和查询分析的能力。本文将重点介绍增强的查询分析能力之一:并行查询。

查询分析提升之道:释放CPU多核计算资源

众所周知,软件计算能力的提升一方面得益于CPU硬件能力的增强,另一方面也得益于软件设计层面能够充分利用CPU的计算资源。当前处理器普遍采用多核设计,如GaussDB(for MySQL)单个节点最多可以支持64核的CPU。单线程查询的方式至多能用满一个核的CPU资源,性能提升程度有限,远远无法满足企业大数据量查询场景下对降低时延的要求。因此,复杂的查询分析型计算过程必须考虑充分利用CPU的多核计算资源,让多个核参与到并行计算任务中才能大幅度提升查询计算的处理效率。

下图是使用CPU多核资源并行计算一个表的count(*)过程的例子:表数据进行切块后分发给多个核进行并行计算,每个核计算部分数据得到一个中间count(*)结果,并在最后阶段将所有中间结果进行聚合得到最终结果。

GaussDB(for MySQL)查询分析提升秘笈:并行查询

GaussDB(for MySQL)支持并行执行的查询方式,用于降低分析型查询场景的处理时间,满足企业级应用对查询低时延的要求。如前面所述,并行查询的基本实现原理是将查询任务进行切分并分发到多个CPU核上进行计算,充分利用CPU的多核计算资源来缩短查询时间。并行查询的性能提升倍数,理论上与CPU的核数正相关,就是说并行度越高能够使用的CPU核数就越多,性能提升的倍数也就越高。

下图展示的是:在GaussDB(for MySQL)的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)并行查询功能已经全网上线,更多并行查询场景正在不断解锁中,欢迎大家前往华为云官网体验

Ps:看完觉得还不过瘾?下期将由我们另一位专家为大家带来GaussDB(for MySQL) “并行DDL” 技术解读,更多精彩,敬请期待!

饶珑辉,华为云数据库内核专家。十年以上数据库内核研发经验,精通MySQL内核原理和源码。负责华为云数据库GaussDB(for MySQL)的高性能SQL查询引擎功能规划、设计和研发。

了解更多信息,请访问官网www.huawei.com/hc2021

点击关注,第一时间了解华为云新鲜技术~

华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快?的更多相关文章

  1. 华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历

    摘要:华为云数据库GaussDB(for Cassandra) 是一款基于计算存储分离架构,兼容Cassandra生态的云原生NoSQL数据库:它依靠共享存储池实现了强一致,保证数据的安全可靠. 本文 ...

  2. AI如何驱动软件开发?华为云DevCloud 权威专家邀你探讨

    近期,国际著名咨询公司Gartner 在一份研究报告中将 "AI-Driven Development" 列为 2019 年的 Top 10 Strategic Technolog ...

  3. 华为云数据库中间件DDM性能卓越,遥遥领先于业界

    就说一句话吧,后来者居上,不服不行.

  4. 云数据库时代,DBA将走向何方?

    摘要:伴随云计算的迅猛发展,数据库也进入了云时代.云数据库不断涌现,产品越来越成熟和智能,作为数据库管理员的DBA将面临哪些机遇和挑战?又应该具备什么能力,才能应对未来的不确定性? 本文分享自华为云社 ...

  5. 当MySQL执行XA事务时遭遇崩溃,且看华为云如何保障数据一致性

    摘要:当前MySQL所有版本不支持分布式事务的崩溃恢复安全,这严重影响了分布式事务的高可用保障. 华为云数据库内核高级技术专家,拥有十多年MySQL内核研发经验,目前在华为云数据库团队研发华为云数据库 ...

  6. 华为云MySQL金融版正式商用,高可靠的金融级数据库来了

    摘要:全新三节点架构,基于深度优化的MGR组复制技术,提供金融级的数据一致性. 日前,华为云数据库MySQL 金融版正式商业化发布,MySQL金融版采用MGR技术,基于Paxos协议,采用一主两备三节 ...

  7. 华为云企业级Redis揭秘第16期:超越开源Redis的ACID"真"事务

    摘要: 开源Redis只支持伪事务,应用场景受限.高斯Redis发布企业级事务特性,支持完备ACID,为交易.库存等上层业务带来全新可能. 本文分享自华为云社区<华为云企业级Redis揭秘第16 ...

  8. 揭秘华为云GaussDB(for Influx):数据直方图

    摘要:本文带您了解直方图在不同产品中的实现,以及GaussDB(for Influx)中直方图的使用方法. 本文分享自华为云社区<华为云GaussDB(for Influx)揭秘第九期:最佳实践 ...

  9. 揭秘华为云GaussDB(for Influx)最佳实践:hint查询

    摘要:GaussDB(for Influx)通过提供hint功能,在单时间线的查询场景下,性能有大幅度的提升,能有效满足客户某些特定场景的查询需求. 本文分享自华为云社区<华为云GaussDB( ...

  10. 2023云数据库技术沙龙MySQL x ClickHouse专场成功举办

    4月22日,2023首届云数据库技术沙龙 MySQL x ClickHouse 专场,在杭州市海智中心成功举办.本次沙龙由玖章算术.菜根发展.良仓太炎共创联合主办.围绕"技术进化,让数据更智 ...

随机推荐

  1. 使用Blazor构建投资回报计算器

    本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 本博客中创建的投资计算器根据存入金额和回报率计算每个投资周期的特定回报 ...

  2. springboot整合shiro框架学习

    springboot整合shiro框架做用户认证与授权 springboot整合shiro框架的流程主要分为: 导入shiro依赖 <dependency> <groupId> ...

  3. DeepSpeed: 大模型训练框架

    背景: 目前,大模型的发展已经非常火热,关于大模型的训练.微调也是各个公司重点关注方向.但是大模型训练的痛点是模型参数过大,动辄上百亿,如果单靠单个GPU来完成训练基本不可能.所以需要多卡或者分布式训 ...

  4. Java进程(基础)

    基本概念 1.进程:程序的执行过程 2.线程:一个进程可以有单个线程也就是我们说的单线程,还可以有多个线程也就是我们说的多线程, 线程 1.当一个类继承了Thread类就可以当成一个线程用 2.我们会 ...

  5. 手记系列之七 ----- 分享Linux使用经验

    前言 本篇文章主要介绍的关于本人在使用Linux记录笔记的一些使用方法和经验,温馨提示,本文有点长,约1.7w字,几十张图片,建议收藏查看. 一.Linux基础使用 1,服务器查看及时日志 tail ...

  6. 线上SQL超时场景分析-MySQL超时之间隙锁

    前言 之前遇到过一个由MySQL间隙锁引发线上sql执行超时的场景,记录一下. 背景说明 分布式事务消息表:业务上使用消息表的方式,依赖本地事务,实现了一套分布式事务方案 消息表名:mq_messag ...

  7. Android Sutdio 编入System API 等隐藏API 方法

    1. 将 classes.jar 放入 app/libs 文件夹下 右键点击 jar 包,点击 Add as Library 2. 项目级 Gradle 文件新增以下配置 gradle.project ...

  8. 普冉PY32系列(十) 基于PY32F002A的6+1通道遥控小车I - 综述篇

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  9. Kotlin协程系列(三)

    1.前言 前面两节,我们运用了kotlin提供的简单协程去实现了一套更易用的复合协程,这些基本上是以官方协程框架为范本进行设计和实现的.虽然我们还没有直接接触kotlin官方协程框架,但对它的绝大多数 ...

  10. 构建一个语音转文字的WebApi服务

    构建一个语音转文字的WebApi服务 简介 由于业务需要,我们需要提供一个语音输入功能,以便更方便用户的使用,所以我们需要提供语音转文本的功能,下面我们将讲解使用Whisper将语音转换文本,并且封装 ...