一种在制造技术

技术编号:39580078 阅读:7 留言:0更新日期:2023-12-03 19:31
本发明专利技术涉及一种在

【技术实现步骤摘要】
一种openGauss数据库上实现并行位图堆扫描的方法


[0001]本专利技术属于数据库并行查询
,尤其涉及一种在
openGauss
数据库上实现并行位图堆扫描的方法及系统


技术介绍

[0002]现有的位图堆扫描方式如下:启动一个线程,根据查询条件扫描索引记录,将涉及的数据块按编号升序排列,然后再逐个访问堆表中的数据

然而,当涉及的数据块较多时,由于一个线程只能串行执行,从而会导致扫描的时间过长,影响业务的吞吐量

[0003]因此,如何提升位图堆扫描的效率,成为亟待解决的技术问题


技术实现思路

[0004]为了克服现有技术中存在的缺点,提升位图堆扫描的效率,本专利技术提出了一种新的在
openGauss
数据库上实现并行位图堆扫描的方法,本方法能够显著提升位图堆扫描的执行效率

[0005]术语解释
[0006]事务:数据库的事务
(Transaction)
是一种机制

一个操作序列,包含了一组数据库操作命令

事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行,因此事务是一个不可分割的工作逻辑单元

[0007]快照:快照是数据库中实现事务隔离和并发控制的技术,快照记录了数据库运行时某个时刻点的状态,通过快照可以判断数据在事务中的可见性
。<br/>[0008]TID
:即
tuple identifier
,元组在堆表数据块中的位置信息,在
openGauss
中由块编号和块内偏移量组成

[0009]索引:索引是为了提升数据库中数据检索效率的辅助数据,有两种基本的索引类型:顺序索引和散列索引,本专利技术只涉及顺序索引

[0010]位图堆扫描:位图堆扫描是
openGauss
数据库中一种物理算子

传统的索引扫描
(IndexScan)
算子每读取一个索引条目就根据
TID
读取堆表中的数据,在索引选择率较高的情况下,若堆表中数据分布比较离散,按照索引扫描的方式会有很大的随机
IO。
位图堆扫描是先从索引中取出所有需要扫描的堆表数据块信息并排序,然后再按顺序读取堆表中的元组,规避了随机
IO
的问题

[0011]第一方面,本专利技术提供了一种在
openGauss
数据库上实现并行位图堆扫描
(Parallel BitmapHeapScan)
的方法,本方法包括:
[0012]S1.
生成并行位图堆扫描计划;
[0013]S2.
初始化并行位图堆扫描计划;
[0014]S3.
执行并行位图堆扫描计划

[0015]进一步地,本专利技术方法步骤
S1
中所述的生成并行位图堆扫描计划,包括:
[0016]S101.
判断数据库是否开启并行查询功能;
[0017]S102.
判断查询涉及的表及表上的查询条件是否支持并行查询;
[0018]S103.
生成对应表的并行位图堆扫描路径;
[0019]S104.
根据并行位图堆扫描路径生成并行位图堆扫描计划

[0020]进一步地,本专利技术方法步骤
S2
中所述的初始化并行位图堆扫描计划,包括:
[0021]S201.
初始化并行位图堆扫描所需的参数信息;
[0022]S202.
注册待启动的后台线程,将本线程设定为
leader
线程,其余线程设定为
worker
线程;
[0023]S203.
启动
worker
线程并初始化

[0024]进一步地,上述方法步骤
S201
中所述的参数信息包括内存

通信队列

计划语句

执行参数和快照信息

[0025]优选地,上述方法步骤
S202
中所述的
worker
线程的数量不超过系统设置的阈值

[0026]进一步地,本专利技术方法步骤
S3
中所述的执行并行位图堆扫描计划,包括:
[0027]S301.leader
线程从通信队列中读取
worker
线程返回的元组,若所有
worker
线程均无元组返回且
worker
线程并未处理完成则休眠等待;
[0028]S302.
第一个执行位图堆扫描的
worker
线程负责从索引中读取所有需要扫描的元组位置信息
TIDs
,其他
worker
线程等待;
[0029]S303.
每个
worker
线程按照块编号从小到大的顺序每次读取
TIDs
中的一个块;
[0030]S304.
每个
worker
线程根据读取到的块执行位图堆扫描,扫描结果写入通信队列中,直至所有
TIDs
扫描完成后,整个并行位图堆扫描过程完成

[0031]优选地,上述方法步骤
S303
中所述的每个
worker
线程按照块编号从小到大的顺序每次读取
TIDs
中的一个块,在
worker
线程访问
TIDs
时加互斥锁

[0032]第二方面,本专利技术提供了一种在
openGauss
数据库上实现并行位图堆扫描的系统,本系统包括:
[0033]扫描计划生成模块:用于生成并行位图堆扫描计划;
[0034]扫描计划初始化模块:用于初始化并行位图堆扫描计划;
[0035]扫描计划执行模块:用于执行并行位图堆扫描计划

[0036]各模块按照上述在
openGauss
数据库上实现并行位图堆扫描的方法实施运行

[0037]最后,本专利技术还提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现上述的在
openGauss
数据库上实现并行位图堆扫描的方法的步骤

[0038]综上,本专利技术在
openGauss
数据库上实现并行位图堆扫描的方法具有以下优点:
[0039](1)
本专利技术方法通过启动多个线程本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种在
openGauss
数据库上实现并行位图堆扫描的方法,其特征在于,所述方法包括:
S1.
生成并行位图堆扫描计划;
S2.
初始化并行位图堆扫描计划;
S3.
执行并行位图堆扫描计划
。2.
根据权利要求1所述的在
openGauss
数据库上实现并行位图堆扫描的方法,其特征在于,步骤
S1
中所述的生成并行位图堆扫描计划,包括:
S101.
判断数据库是否开启并行查询功能;
S102.
判断查询涉及的表及表上的查询条件是否支持并行查询;
S103.
生成对应表的并行位图堆扫描路径;
S104.
根据并行位图堆扫描路径生成并行位图堆扫描计划
。3.
根据权利要求2所述的在
openGauss
数据库上实现并行位图堆扫描的方法,其特征在于,步骤
S2
中所述的初始化并行位图堆扫描计划,包括:
S201.
初始化并行位图堆扫描所需的参数信息;
S202.
注册待启动的后台线程,将本线程设定为
leader
线程,其余线程设定为
worker
线程;
S203.
启动
worker
线程并初始化
。4.
根据权利要求3所述的在
openGauss
数据库上实现并行位图堆扫描的方法,其特征在于,步骤
S201
中所述的参数信息包括内存

通信队列

计划语句

执行参数和快照信息
。5.
根据权利要求3所述的在
openGauss
数据库上实现并行位图堆扫描的方法,其特征在于,步骤
S202
中所述的
worker
线程的数量不超过系统设置的阈值
。6.
...

【专利技术属性】
技术研发人员:王正侣何小栋
申请(专利权)人:广州海量数据库技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1