如何查询当前表空间下所有实例_详解人大金仓MPP数据库并行查询技术
什么是MPP数据库?
人大金仓MPP数据库的
并行查询技术原理是什么?
如何实现并行查询?性能如何?
且听以下详细分解~
01
什么是人大金仓MPP数据库?
KingbaseAnalyticsDB(简称KADB)是人大金仓为应对大数据时代海量数据分析处理的需求推出的具备高性能、高扩展能力的MPP数据库。它具有分布式集群部署、数据分片无共享存储、大规模并行处理技术(MPP)、数据分区、行列混存、数据库内压缩、MapReduce、在线扩容、内嵌数十种AI算法等技术特点,能满足当前各行业对大量数据采集、存储、挖掘及分析等多种需求的能力。
目前,该产品主要定位于数据分析类应用市场,可处理PB级甚至更大存储量的数据,并能集成多种异构数据源进行数据挖掘和分析,在处理多表连接、聚合等各类复杂查询方面也体现出了很好的性能。
▲KADB技术架构图
02
如何理解MPP数据库并行查询技术?
MPP数据库并行查询技术主要是为了提升多节点并行查询时的查询性能而设计的。
其设计思路如下:让用户的数据较均匀地分开存放在各集群计算节点上(采用哈希分布或随机分布等)——管理实例接受客户端查询请求——分析请求并生成查询计划——分发查询计划给计算实例并发查询。
以数据库中最常见的join操作为例,假如两张表的分片字段上是等值连接,则各计算节点可根据自己负责的分片数据得出查询结果(管理实例会将查询直接发给各相关计算实例执行);否则,各计算实例必须依赖于其他计算实例的数据才能完成查询。此时,就需系统在执行计划树中插入一个数据传输节点(Motion)负责在不同计算实例之间传输数据。
计算实例间的通信有3种方式:
01
基于广播的数据传输
(Broadcast Motion)
每个计算实例将自己负责的执行结果发送给其他所有计算实例;
02
基于重哈希的数据传输
(Redistribute Motion)
每个计算实例首先计算指定字段的HASH值,然后根据HASH结果将本条记录发送给对应的计算实例;
03
汇总传输
(Gather motion)
计算实例将执行结果发送给管理实例。
需要说明的是,以上3种传输方式中,前两种传输是为了保证单个计算节点查询时数据的完整性,汇总传输是为了保证返回给用户数据的完整性。
03
KADB如何保证查询最大的并行度?
KADB按照Motion操作对查询计划进行分片(Slice),再将分片后的查询计划发送给计算实例进行并行查询。此时,不同的Slice可以并行执行查询,由此实现计算实例内和计算实例间的多级并行,保证查询实现最大的并行度。
执行过程图和执行计划示意图如下图所示:
▲MPP执行过程图
▲MPP某个含有所有Motion节点的执行示意图
下面将以1个管理实例+2个计算实例的集群join操作的实际执行计划作具体说明:
create table x(x1 int, x2 int, x3 int) distributed by (x1);
create table y(y1 int, y2 int, y3 int) distributed by (y1);
insert into x values(1,2,3);
insert into x values(2,3,4),(3,4,5),(4,5,6);
insert into y values(1,2,3);
insert into y values(2,3,4),(3,4,5),(4,5,6);
注:表默认hash分布。
01
查询计划只有Gather Motion情况
select * from x join y on x1=y1;
kingbase=# explain select * from x join y on x1=y1;
QUERY PLAN
-----------------------------------------
Gather Motion (slice1)
-> Hash Join
Hash Cond: x.x1 = y.y1
-> Seq Scan on x
-> Hash
-> Seq Scan on y
当表x、y的join条件都是分布键x1、y1进行join时,因为相同值一定会hash到同一个计算实例中,因此只需每个计算实例在本地,根据本地的数据执行hashjoin,最终的结果返回给管理实例,管理实例统一收集返回给客户端即可。
02
查询计划使用Redistribute Motion情况
select * from x join y on x1=y2;
kingbase=# explain select * from x join y on x1=y2;
QUERY PLAN
------------------------------------------
Gather Motion 2:1 (slice2)
-> Hash Join
Hash Cond: y.y2 = x.x1
-> Redistribute Motion 2:2 (slice1)
Hash Key: y.y2
-> Seq Scan on y
-> Hash
-> Seq Scan on x
当表x、y的join条件不全是分布键(y2不是分布键)做join时,由于采用分布键做join表x列的x1数据已hash好,采用非分布键做join表y列的y2是随机分布的,因此每个计算实例需要根据非分布键做join表的y按照y2进行重新hash把数据分发给各节点,各节点在本地做join,也就是计划中有y表的Redistribute Motion,然后将最终结果返回给管理实例,管理实例统一收集返回给客户端。
03
查询计划使用Broadcast Motion情况
select * from x join y on x1=y2;
kingbase=# explain select * from x join y on x2=y2;
QUERY PLAN
----------------------------------------------------
Gather Motion 2:1 (slice2)
-> Hash Join
Hash Cond: x.x2 = y.y2
-> Seq Scan on x
-> Hash
-> Broadcast Motion 2:2 (slice1)
-> Seq Scan on y
当表x、y的join条件都不是分布键(x2、y2不是分布键)做join时,表x列的x2数据是随机分布的,表y列的y2也是随机分布的。
当x、y表存在小表情况,可把小表如表y的所有数据广播(Broadcast)到各节点,将每个计算实例本地表x数据和整个表y的数据做join,最终的结果返回给管理实例,管理实例统一收集返回给客户端即可。
当遇到计算实例较多,x、y数据量较大的情况,可将表x、y分别按列x2、y2进行hash,对数据进行重新分发(Redistribute)。这样一来,每个计算实例的数据都是hash后的数据,再进行本地join,将最终结果返回给管理实例,管理实例统一收集返回给客户端即可。
执行计划如下:
QUERY PLAN
--------------------------------------------
Gather Motion 2:1 (slice3)
-> Hash Join
Hash Cond: (x.x2 = y.y2)
-> Redistribute Motion 2:2 (slice1)
Hash Key: x.x2
-> Seq Scan on x
-> Hash
-> Redistribute Motion 2:2 (slice2)
Hash Key: y.y2
-> Seq Scan on y
04
KADB并行查询性能表现
应用数的增加会带来数据量的增加,相应地,对查询性能的响应速度也提出了更高的要求。在单机数据库无法满足的情况下,可采用MPP集群的并行技术提高查询响应速度,MPP数据库的性能也会随着机器数的增长得到线性提升。
以下是一个简单模拟采用MPP数据库的性能表现情况:
01
测试环境
02
应用场景
03
测试结果
测试结论: 采用人大金仓MPP数据库KADB的集群技术能使查询速度随机器数量得到线性提升。
如何查询当前表空间下所有实例_详解人大金仓MPP数据库并行查询技术相关推荐
- 金仓数据库字段_技术干货 | 超实用!详解人大金仓MPP数据库并行查询技术
什么是MPP数据库? 人大金仓MPP数据库的 并行查询技术原理是什么? 如何实现并行查询?性能如何? 且听以下详细分解~ 01 什么是人大金仓MPP数据库? KingbaseAnalyticsDB(简 ...
- CentOS7环境下 人大金仓kes86数据库安装过程
安装前确认 操作系统:主机名.IP地址.发型版本.内核版本 [root@localhost ~]# hostname localhost.localdomain [root@localhost ~]# ...
- oracle 修索引改空间_Oracle如何更改表空间的数据文件位置详解
表空间概述 Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库对象(如:数据文件)的逻辑空间,是Oracle中信息存储的最大逻辑单元,其下还包含有段.区.数据块等逻辑数据类型.表空 ...
- python 条件语句实例_详解python 条件语句和while循环的实例代码
详解python 条件语句和while循环的实例代码,逻辑,布尔,值为,结束,语句 详解python 条件语句和while循环的实例代码 易采站长站,站长之家为您整理了详解python 条件语句和wh ...
- 查询某个表空间下所有的表的空间占用情况
select OWNER, t.segment_name, t.segment_type, sum(t.bytes / 1024 / 1024) mmm from dba_segments t whe ...
- mysql分页总页数算法解析_详解MySQL的limit用法和分页查询语句的性能分析
limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table LIMIT ...
- 广义表头尾链表存储结构_详解Redis五种数据结构的底层原理
1,redis有五种基本数据结构:string.hash.set.zset.list:底层redis是通过c语言来实现这w五种结构的,具体是如何实现的,我们具体看一下. 2,SDS "sim ...
- 数据库人大金仓KingbaseES 数据库对象管理工具连接错误(实例创建失败)问题解决办法
目录 特别注意!需要跟下图一致! 解决方案一 解决方案二 解决方案三 可能遇见的问题 错误原因 最终效果 特别注意!需要跟下图一致! 然后检查!如果无报错再点击确定,否则连接不上数据库. 经常性的报错 ...
- 统信下人大金仓创建表空间及导入oracle数据
因为国产化,数据库采用国产的人大金仓,原先存放于oracle 12c的数据也要迁移过来. 人大金仓,改自开源的数据库项目pg(postgreSql),这点人大金仓自己也承认.因此目前查人大金仓,如果资 ...
最新文章
- docker 容器访问宿主机的解决方式
- springboot(二):web综合开发
- centos安装vmware workstation 找不到kernel header解决方法
- windows 下更新 npm 和 node
- NLPIR智能语义:大数据精准挖掘是信息化发展趋势
- 【NET CORE微服务一条龙应用】第二章 配置中心使用
- vue路由,解决同一路由页面多次触发不刷新页面【vue开发】
- 学习进度表(160519更新)
- ExtJs启用与禁用工具栏
- 【南邮操作系统实验】银行家算法Java版
- Python 定义源码编码 (Source Encoding)
- uwsgi模式_uWSGI / Pylons的开发模式(重新加载新代码)
- 2019.1.18作业 继承
- 打破定制化语音技术落地怪圈?从讲一口标准英音的语音助手说起
- 牛客网-C语言编程入门训练
- 数据结构:按成绩输出名次排序
- seaborn画分组箱线图
- 凡人修c传(四)翻牌子(POJ - 3279 - Fliptile每日一水)
- MySQL游标无法获取数据-1329 - No data - zero rows fetched, selected, or processed
- 英语语法汇总(15.句子)