本发明属于数据库并行查询,尤其涉及一种在opengauss数据库上实现并行位图堆扫描的方法及系统。
背景技术:
1、现有的位图堆扫描方式如下:启动一个线程,根据查询条件扫描索引记录,将涉及的数据块按编号升序排列,然后再逐个访问堆表中的数据。然而,当涉及的数据块较多时,由于一个线程只能串行执行,从而会导致扫描的时间过长,影响业务的吞吐量。
2、因此,如何提升位图堆扫描的效率,成为亟待解决的技术问题。
技术实现思路
1、为了克服现有技术中存在的缺点,提升位图堆扫描的效率,本发明提出了一种新的在opengauss数据库上实现并行位图堆扫描的方法,本方法能够显著提升位图堆扫描的执行效率。
2、术语解释
3、事务:数据库的事务(transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行,因此事务是一个不可分割的工作逻辑单元。
4、快照:快照是数据库中实现事务隔离和并发控制的技术,快照记录了数据库运行时某个时刻点的状态,通过快照可以判断数据在事务中的可见性。
5、tid:即tuple identifier,元组在堆表数据块中的位置信息,在opengauss中由块编号和块内偏移量组成。
6、索引:索引是为了提升数据库中数据检索效率的辅助数据,有两种基本的索引类型:顺序索引和散列索引,本发明只涉及顺序索引。
7、位图堆扫描:位图堆扫描是opengauss数据库中一种物理算子。传统的索引扫描(indexscan)算子每读取一个索引条目就根据tid读取堆表中的数据,在索引选择率较高的情况下,若堆表中数据分布比较离散,按照索引扫描的方式会有很大的随机io。位图堆扫描是先从索引中取出所有需要扫描的堆表数据块信息并排序,然后再按顺序读取堆表中的元组,规避了随机io的问题。
8、第一方面,本发明提供了一种在opengauss数据库上实现并行位图堆扫描(parallel bitmapheapscan)的方法,本方法包括:
9、s1.生成并行位图堆扫描计划;
10、s2.初始化并行位图堆扫描计划;
11、s3.执行并行位图堆扫描计划。
12、进一步地,本发明方法步骤s1中所述的生成并行位图堆扫描计划,包括:
13、s101.判断数据库是否开启并行查询功能;
14、s102.判断查询涉及的表及表上的查询条件是否支持并行查询;
15、s103.生成对应表的并行位图堆扫描路径;
16、s104.根据并行位图堆扫描路径生成并行位图堆扫描计划。
17、进一步地,本发明方法步骤s2中所述的初始化并行位图堆扫描计划,包括:
18、s201.初始化并行位图堆扫描所需的参数信息;
19、s202.注册待启动的后台线程,将本线程设定为leader线程,其余线程设定为worker线程;
20、s203.启动worker线程并初始化。
21、进一步地,上述方法步骤s201中所述的参数信息包括内存、通信队列、计划语句、执行参数和快照信息。
22、优选地,上述方法步骤s202中所述的worker线程的数量不超过系统设置的阈值。
23、进一步地,本发明方法步骤s3中所述的执行并行位图堆扫描计划,包括:
24、s301.leader线程从通信队列中读取worker线程返回的元组,若所有worker线程均无元组返回且worker线程并未处理完成则休眠等待;
25、s302.第一个执行位图堆扫描的worker线程负责从索引中读取所有需要扫描的元组位置信息tids,其他worker线程等待;
26、s303.每个worker线程按照块编号从小到大的顺序每次读取tids中的一个块;
27、s304.每个worker线程根据读取到的块执行位图堆扫描,扫描结果写入通信队列中,直至所有tids扫描完成后,整个并行位图堆扫描过程完成。
28、优选地,上述方法步骤s303中所述的每个worker线程按照块编号从小到大的顺序每次读取tids中的一个块,在worker线程访问tids时加互斥锁。
29、第二方面,本发明提供了一种在opengauss数据库上实现并行位图堆扫描的系统,本系统包括:
30、扫描计划生成模块:用于生成并行位图堆扫描计划;
31、扫描计划初始化模块:用于初始化并行位图堆扫描计划;
32、扫描计划执行模块:用于执行并行位图堆扫描计划。
33、各模块按照上述在opengauss数据库上实现并行位图堆扫描的方法实施运行。
34、最后,本发明还提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现上述的在opengauss数据库上实现并行位图堆扫描的方法的步骤。
35、综上,本发明在opengauss数据库上实现并行位图堆扫描的方法具有以下优点:
36、(1)本发明方法通过启动多个线程并行执行位图堆扫描,提升了扫描执行效率。
37、(2)本发明方法在并行执行位图堆扫描的过程中通过互斥锁保证了并行执行的正确性。
38、(3)本发明实施例显示的在opengauss数据库上已有的位图堆扫描算子基础上实现并行位图堆扫描的方法,通过调整位图堆扫描时的线程个数,减少了位图堆扫描算子的执行耗时,提升了使用该算子的执行的效率。
1.一种在opengauss数据库上实现并行位图堆扫描的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的在opengauss数据库上实现并行位图堆扫描的方法,其特征在于,步骤s1中所述的生成并行位图堆扫描计划,包括:
3.根据权利要求2所述的在opengauss数据库上实现并行位图堆扫描的方法,其特征在于,步骤s2中所述的初始化并行位图堆扫描计划,包括:
4.根据权利要求3所述的在opengauss数据库上实现并行位图堆扫描的方法,其特征在于,步骤s201中所述的参数信息包括内存、通信队列、计划语句、执行参数和快照信息。
5.根据权利要求3所述的在opengauss数据库上实现并行位图堆扫描的方法,其特征在于,步骤s202中所述的worker线程的数量不超过系统设置的阈值。
6.根据权利要求3所述的在opengauss数据库上实现并行位图堆扫描的方法,其特征在于,s3中所述的执行并行位图堆扫描计划,包括:
7.根据权利要求6所述的在opengauss数据库上实现并行位图堆扫描的方法,其特征在于,步骤s303中所述的每个worker线程按照块编号从小到大的顺序每次读取tids中的一个块,在worker线程访问tids时加互斥锁。
8.一种在opengauss数据库上实现并行位图堆扫描的系统,其特征在于,所述系统包括:
9.一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现权利要求1-7任一项所述的在opengauss数据库上实现并行位图堆扫描的方法的步骤。