摘要: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
点击关注,第一工夫理解华为云陈腐技术~