(9)达梦DMMPP集群相关技术理论介绍
时间:2023-08-07 17:07:00
在上一篇博客中,我们对达梦数据库的达梦进行了处理DMDSC共享存储数据库集群进行了动手部署实践。本文基于技术共享。Linux下达梦DMMPP学习集群技术原理。
1、DM MPP集群简介
大规模并行处理大梦MPP(DM Massively Parallel Processing,缩写DM MPP)基于大梦数据库管理系统开发的完全平等的无共享集群组件,支持多个DM数据库实例组织为并行计算网络,提供统一的数据库服务。
在海量数据分析的应用场景中,经常会遇到以下问题:
- 大量复杂的查询操作需要更高的系统性能支持;
- 硬件束缚了数据库的响应能力;
- 虽然小型机可以在垂直领域提供更好的单节点性能,但价格更高。
为支持上述海量数据存储和处理的需求,提供高端数据仓库解决方案,大梦数据库提供大规模并行处理MPP以极低的成本为客户提供行业领先的计算性能。
2、DM MPP集群概念和技术原理
2.1.1 执行节点EP
DM MPP每个操作系统DM数据库服务器实例称为执行节点EP,基于数据守护MPP除环境储备外。
2.1.2 主、从EP
DM MPP对于整个系统来说,采用完全对等的无共享架构EP功能是一样的,用户可以连接到其中任何一个进行操作。对于每个用户来说,EP具有主从之分。用户会话实际连接的那个EP对于用户会话,它被称为主EP,其余的EP都称为从EP。
2.1.3 数据分布
DM MPP系统中的数据分布在每个系统中EP哈希分布、随机分布、复制分布、范围分布、LIST用户可以根据应用程序的实际情况为表数据选择合适的分布类型。
哈希分布
根据表定义中指定的一列或多列对行数据计算哈希值,然后根据哈希值和哈希映射表将该行数据分布到映射节点。
查询表中使用的连接键是哈希分布列,MPP优化以下查询计划,如减少计划中通信操作符号、使用索引、分组计划优化等,减少节点间数据分发,提高查询效率。
使用哈希分布时,节点之间的数据是否平衡取决于设置的哈希分布列和表中的数据。当节点数量发生变化时,需要根据新的哈希映射表重新分发每个节点的数据。
随机分布
随机分布表没有分布列。插入表数据时,数据将按照一定的随机算法平衡分布到每个节点。
随机分布的优点是数据和节点之间没有映射关系。节点数变化后,如果没有节点数据平衡的要求,则无需更改节点现有数据。
一般来说,随机分布对于复杂的查询和更多的节点间数据分发,性能不如哈希分布高。
复制分布
在每个节点上复制分布表的本地数据是一个完整的副本,可以在任何节点上单独完成,无需从其他节点获取数据。
复制分布通常用于数据量较小的表。
范围分布
根据表定义中指定的列值范围分布项,决定将一行数据存储到MPP的哪个相应EP上。
LIST分布
LIST一行数据存储在指定表中的一个或多个列的离散值集中MPP的哪个相应EP上面表中列值可列出此分布。
建议
DM MPP同时,支持数据分布和分区表,实现数据分布后再分区。在数据分布到每个节点的基础上,上重新分区数据,可以进一步提高查询性能。分布类型和分区类型可以混合,如建立哈希分布表的范围水平分区表。
2.1.4 MAL系统
MAL系统是DM基于数据库实例间的高速通信系统TCP协议实现的内部通信机制具有可靠、灵活、高效的特点。DM通过MAL实例间实现消息通信。
2.1.5 全局连接与本地连接
MPP系统中的数据分布在每个系统中EP用户只需用户只需登录某个EP,该系统自动建立EP与其余EP因此,用户建立的连接实际上建立了连接MPP系统的全局连接,用户通过全局连接操作数据库MPP系统的所有EP进行。使用全局连接时,要求MPP系统的所有EP正常提供服务,否则无法建立连接。
DM MPP也提供本地连接。当使用本地连接时,用户登录到某个地方EP后,这个EP与其他人不再建立EP所有用户数据库操作的连接仅在此EP上进行。如SELECT语句以及UPDATE和DELETE语句中的WHERE在条件下,子查询在本地查询EP的数据,而INSERT如果插入的数据应根据分布定义分布在其他语句中EP系统会报错。
通常在MPP全局连接用于系统的正常运行,DM MPP本地连接采用快速装载和动态扩容,用户在某些时候,如MPP系统中有EP故障时也可以使用本地连接。
DM每个接口驱动程序都提供连接属性,用于设置全局连接(登录)或本地连接(登录),缺省是全局连接。DM交互式工具DIsql还提供了登录参数MPP_TYPE用于指定全局连接或本地连接,GLOBAL说全局连接,LOCAL表示本地连接,默认为全局连接。
2.2 MPP并行执行计划
在DM数据库中,SQL经过一系列的处理,句子最终生成了由不同操作符组成的计划树,DM执行器按照自底向上的顺序执行计划树,数据也按照自底向上的顺序在计划树中流动,最终在计划树的根节点生成执行结果。
在DM MPP环境中各EP并行计划是在单节点执行计划的基础上,按照一定的规则插入到适当的位置MPP产生通信操作符。
2.2.1 并行计划相关操作符
MPP并行执行计划是在单节点执行计划的基础上增加的MPP生成通信操作符,DM MPP有5个相关通信操作,名称分别为:
- MPP GATHER (MGAT)
- MPP COLLECT (MCLCT)
- MPP DISTRIBUTE (MDIS)
- MPP BROADCAST (MBRO)
- MPP SCATTER (MSCT)
2.2.2 并行生成计划
在DM在数据库中,当计划树执行时,数据总是自下而上流动,如果是在MPP因为环境中的每一个EP只保存表的部分数据(复制分布除外),计划叶节点的数据不完整,所以叶节点只向上传输EP部分数据。为了获得完整正确的执行结果,上节点必须知道下节点的数据是否完整,以确定是否需要添加MPP根据单节点操作符的功能和数据分布,确定应添加哪种通信操作符。可以阅读单节点执行计划操作符的介绍《DM8系统管理员手册附录。
2.2.3 数据分布与并行执行计划
在MPP环境中,建表时指定的数据分布类型决定了表数据的分布。DM MPP支持的表分布类型包括哈希分布、随机分布、范围分布、复制分布、LIST分布,数据插入或装载时系统会根据表的分布类型自动将数据发送到对应的EP。
哈希分布、范围分布和LIST分布的共同特征是在创建表的时候,用户指定一个或多个列作为分布列,系统会针对每个插入的数据行计算这些对应列的值,确定将数据所属EP。随机分布和复制分布则不需要指定分布列。
并行执行计划与数据分布密切相关,数据分布能够决定最终生成的并行计划。例如查询的数据经过预先判断发现正好都在一个EP上,服务器会做一定的优化,在最优的情况下,整个计划甚至不包含任何通讯操作符。优化的原则是尽量减少节点之间的通信交互。
因此,用户应根据应用中查询的实际需求来确定表的分布类型,进而得到较优的并行执行计划。
场景一
在某应用中,查询语句中包含大量连接查询,表数据分布较为均匀,应用对查询的效率要求较高。此时我们可以使用哈希分布,并且将常用连接列作为哈希分布列,这样能尽可能地减少EP间的数据传递,少占用网络带宽,减少网络延迟,充分发挥多节点并行执行的巨大优势。
场景二
在某应用中,查询以单表查询居多,连接查询较少,我们可以采用随机分布。随机分布使得海量数据能均匀分布,充分体现MPP的并行优势。
场景三
对于单表查询或出现在连接查询中数据量较小的表,可采用复制分布。复制分布的表在每个EP上都有一份完整的数据拷贝,使得在生成并行执行计划时能减少对应通讯操作符的使用,进一步优化并行计划。
2.2.4 并行计划执行流程
DM MPP对于查询语句和插入/删除/修改语句的处理是不同的,因为插入/删除/修改语句涉及到数据的修改,必须在数据行所在EP进行修改操作,而查询语句只需要主EP收集查询结果即可。
2.2.4.1 查询语句处理流程
DM MPP对查询语句的处理按如下流程进行:
1、建立连接:用户连接到MPP系统内任意一个EP节点,则该EP为连接的主EP,其余节点为从EP;
2、生成执行计划:主EP解析查询语句,生成普通的查询计划后,根据数据分布情况在合适的位置插入合适的并行通讯操作符,生成最终的并行查询计划;
3、分发计划:主EP把执行计划分发给所有的从EP;
4、执行计划:各从EP收到计划后,生成执行计划的运行环境,所有EP并行执行,执行时各EP通过通讯操作符分发必要的数据并协调执行进度;
5、生成结果集:主EP收集所有EP的查询结果(包括自身数据),生成结果集;
6、返回结果集:主EP将结果集返回给用户。
2.2.4.2 插入/修改/删除语句处理流程
DM MPP对插入/修改/删除语句的处理按如下流程进行:
1、建立连接:用户连接到MPP系统内任意一个EP节点,则该EP为连接的主EP,其余节点为从EP;
2、生成执行计划:主EP解析语句,生成执行计划,其中包含的查询计划(即WHERE条件对应的计划)也是并行查询计划,另外还会生成一个对应的在从EP上执行的计划(MPLN);
3、准备数据:主EP开始执行计划时首先把查询计划部分发布给所有的从EP,并行执行查询,主EP收集查询结果;
4、定位节点:数据准备完成后,根据分布列和分布方式计算出需要修改的行数据所在的目标EP,将MPLN以及操作所需数据发送到各对应的EP。如果目标EP为本地则不发送,在本地直接完成操作;
5、执行修改操作:从EP收到MPLN计划和数据后生成执行环境,执行实际的修改操作;
6、返回执行结果:主EP等待所有的从EP执行完成后才会返回执行结果给客户端,只要其中有任一个EP执行失败,则已经执行的所有EP都会回滚,保证数据的一致性,并返回错误信息给客户端。
2.2.5 DDL语句分发
与并行计划执行流程中介绍的DML语句并行执行计划处理流程不同,DM MPP对DDL语句的处理采用语句分发方式。主EP直接将DDL语句发送给各从EP,每个从EP各自执行该DDL语句。主EP等待所有的从EP执行完成后才返回消息给用户,只要其中有任一个EP执行失败,则已经执行的所有EP都会进行回滚,保证数据的一致性,并返回错误信息给客户端。
由于DDL语句分发,使得在MPP中登录任一EP执行的DDL操作都是全局的,包括数据库对象的建立、修改和删除等,也包括用户的建立、修改与删除。
2.3 DMMPP 的高可用
为了提高MPP系统可靠性,克服由于单节点故障导致整个系统不能继续正常工作的问题,DM在普通的MPP系统基础上,引入数据守护主备机制,为每一个MPP节点配置一个实时备库作为备份节点,必要时备库可切换为主库代替故障节点工作,提高系统的可靠性和可用性。我们推荐用户在使用DM MPP时都应使用MPP主备守护系统以确保系统可靠性。
MPP主备的主要目的是为DM MPP集群提供数据可靠性保障,备库只做数据容灾、备份,MPP备库并不是MPP集群的一部分,只是某个MPP节点(主库)的镜像。MPP备库不参与MPP操作,与其他MPP备库之间也没有任何关系,MPP备库只能以单节点方式提供只读服务,但不提供全局的MPP只读服务。
为了提高系统可靠性并节约硬件资源,DM MPP主备系统可采用交叉守护的方式,即每个EP和其对应的备库实例不在同一台主机上,将EP与别的EP的备库放在一台主机上。
图 DM MPP主备系统架构图
3、制定合适的DM MPP方案
通过对MPP技术原理的学习,相信同学们一定对MPP有了一定的了解。那么,如何在实际工作中去制定一个合适的MPP架构呢?对于一个应用系统,制定出一个合适的DM MPP解决方案可以从以下几个方面入手思考:
3.1应用是否适合使用DM MPP方案
DM MPP解决方案具有高性价比、高可靠性、功能强大、可动态扩容等优点,但也是有其局限性的,并非是万能解药。DM MPP主要针对海量数据的OLAP应用而研发,在合理规划的前提下,对普通的、并发量不大的一般OLTP或混合类型应用也适用,但不适合于高并发操作的OLTP类型应用。
3.2需要使用多大规模的DM MPP方案
确定应用适合使用DM MPP解决方案后,接下来需要根据应用规模确定MPP的节点数。DM MPP最多支持1024个EP节点,在实际应用中具体使用几个EP节点则应根据应用数据规模、硬件规划、网络带宽和项目预算情况而定。理论上来说节点数越多越好,这样并行越充分,效率越高。但这也不是绝对的,方案设计者应同时考虑到EP节点间网络资源的情况,如果网络是瓶颈,则并不是节点数越多越好。
3.3需要配置怎样的硬件资源
DM MPP采用完全对等不共享架构,不需要专用硬件,可以采用普通的PC服务器组建集群。需要注意的是,DMMPP系统需要通过网络在各EP间传递数据,因此网络的带宽对于MPP系统的效率非常重要,建议配置千兆或万兆内部网络,用户应根据实际需求、配置成本及实际条件等综合评估决定。
3.4如何设计应用表
DM MPP系统中的数据分布在各EP中,支持表数据的哈希分布、随机分布、复制分布、范围分布、LIST分布类型,用户应根据表在应用中的特点选择合适的分布类型。
除了表的分布类型,管理员还应根据应用的实际情况确定表的分布列、分布列的数据类型以及是否需要组合分布列等,对于查询连接中使用频率较高的连接键等可以考虑作为分布列。
4、本文小结
本文主要介绍了达梦大规模并行处理MPP集群的技术原理, 从集群的技术基本概念,再到结合实际数据表的应用场景分析 MPP的执行计划介绍以及高可用方案,最后通过实践分析,从4个大的方向介绍了如何在实际工作中去制定一个合适的MPP架构方案。
以上是这次技术分享的相关内容,欢迎小伙伴给我留言进行交流指导。
DM 武汉达梦数据库股份有限公司 24小时免费服务热线:400 991 6599
达梦技术社区:https://eco.dameng.com