热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

华为云数据库内核专家为您揭秘:GaussDB(forMySQL)并行查询有多快?

本文分享自华为云社区《华为云数据库内核专家为您揭秘:GaussDB(forMySQL)并行查询

本文分享自华为云社区《华为云数据库内核专家为您揭秘: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” 技术解读,更多精彩,敬请期待!


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

 

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



推荐阅读
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • SQL Server 内存中OLTP内部机制概述(一)
    内存中OLTP(项目名为“Hekaton”)是一个新的完全集成到SQLServer中的数据库引擎组件。它专为访问内存常驻数据的OLTP工作负荷而进行优化。内存中OLTP有助于OLT ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • Spring Batch中多线程配置及实现例子
    本文介绍了在Spring Batch中开启多线程的配置方法,包括设置线程数目和使用线程池。通过一个示例演示了如何实现多线程从数据库读取数据并输出。同时提到了在多线程情况下需要考虑Reader的线程安全问题,并提供了解决方法。 ... [详细]
author-avatar
20乐宝儿_202
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有