System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于SMP的索引并行扫描方法和系统技术方案_技高网

一种基于SMP的索引并行扫描方法和系统技术方案

技术编号:40772946 阅读:4 留言:0更新日期:2024-03-25 20:20
本发明专利技术涉及数据库查询技术领域,提供一种基于SMP的索引并行扫描方法和系统,包括:通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程;主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描。本发明专利技术基于SMP的索引并行扫描方法和系统,可以实现多线程扫描btree索引页面,提升查询效率。

【技术实现步骤摘要】

本专利技术涉及数据库查询,尤其涉及一种基于smp的索引并行扫描方法和系统。


技术介绍

1、opengauss数据库中,btree索引扫描是单线程执行的。首先二分查找到符合条件的索引元组的索引页面,将当前索引页面符合条件的索引元组返回,再根据索引元组查询到对应的堆元组返回,如果当前索引页面都符合条件,继续扫描下一个索引页面,直到无法找到符合条件的索引元组。单线程的扫描方式,不能有效地利用cpu、io,导致出现性能瓶颈。

2、opengauss支持smp并行技术,利用计算机的多核cpu架构实现多线程并行计算。smp并行技术实现算子级并行执行,有效地缩短了查询时间,提高了查询性能性能和资源利用率。smp并行执行增加了数据交互算子,实现多个工作线程之间的数据交互,确保查询的正确性和完整性。但是,opengauss的smp并行技术目前支持的扫描算子只有顺序扫描算子,这限制了并行查询时必须对查询的表执行全表扫描。当扫描的表数据量较大时,对于带条件且返回数据较少的查询,不能像索引扫描一样,通过索引元组直接查询堆元组,全表扫描效率较低。

3、因此,如何提供一种并行扫描方法,提高btree索引扫描的性能,成为亟待解决的技术问题。


技术实现思路

1、有鉴于此,为了克服现有技术的不足,本专利技术旨在提供一种基于smp的索引并行扫描方法和系统。

2、根据本专利技术的第一方面,提供一种基于smp的索引并行扫描方法,包括:

3、通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;

4、采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;

5、当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程;

6、主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描。

7、优选地,本专利技术基于smp的索引并行扫描方法中,通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程,包括:

8、通过主线程在数据库内部声明,构建用于存储索引并行扫描共享信息的共享变量,所述共享变量的成员包括下一个索引页面编号、索引并行扫描状态以及保护共享变量的锁,所述索引并行扫描的状态包括未开始状态、推进状态、空闲状态和完成状态;

9、在共享内存中为构建的共享变量申请内存,初始化申请内存的共享变量;

10、根据数据库配置文件中配置的smp并行度设置参与并行扫描的子线程数量,通过主线程启动参与并行扫描的子线程,将需要执行的并行扫描计划和初始化的共享变量传递给启动的子线程。

11、优选地,本专利技术基于smp的索引并行扫描方法中,初始化申请内存的共享变量,包括:将共享变量中下一个索引页面编号初始化为0,将共享变量中索引并行扫描状态初始化为未开始状态,将保护共享变量的锁的计数值初始化为1。

12、优选地,本专利技术基于smp的索引并行扫描方法中,采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程,包括:

13、采用首先进入并行扫描的子线程对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,释放保护共享变量的锁,其他子线程进入睡眠等待;

14、采用首先进入并行扫描的子线程根据查询条件,检索第一个索引页面中第一个符合查询条件的索引元组,将检索结果返回至主线程。

15、优选地,本专利技术基于smp的索引并行扫描方法中,采用首先进入并行扫描的子线程对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,释放保护共享变量的锁,其他子线程进入睡眠等待,包括:通过将保护共享变量的锁的计数值设置为0,对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,通过将保护共享变量的锁的计数设置为1,释放保护共享变量的锁。

16、优选地,本专利技术基于smp的索引并行扫描方法中,采用首先进入并行扫描的子线程根据查询条件,检索第一个索引页面中第一个符合查询条件的索引元组,将检索结果返回至主线程,包括:

17、当在第一个索引页面中检索到符合查询条件的索引元组,记录第一个符合查询条件的索引元组在第一个索引页面中的偏移量,根据所述偏移量读取第一个符合查询条件的索引元组,根据索引元组中存储的堆元组的指针从堆页面查找对应的堆元组,将查找获得的堆元组返回至主线程;

18、判断当前读取的索引元组是否为当前索引页面的最后一个索引元组,如果当前读取的索引元组是当前索引页面的最后一个索引元组,结束首先进入并行扫描的子线程对当前索引页面的扫描;如果当前读取的索引元组不是当前索引页面的最后一个索引元组,采用首先进入并行扫描的子线程检索并读取下一个符合查询条件的索引元组,直至将当前索引页面上所有符合查询条件的索引元组对应的堆元组返回至主线程,结束首先进入并行扫描的子线程对当前索引页面的扫描;

19、当第一个索引页面中不存在符合查询条件的索引元组,对共享变量上锁,将共享变量的索引并行扫描状态更新为扫描完成状态,释放保护共享变量的锁,唤醒其他进入睡眠等待的子线程,所有子线程将空元组返回至主线程后停止扫描。

20、优选地,本专利技术基于smp的索引并行扫描方法中,判断当前读取的索引元组是否为当前索引页面的最后一个索引元组,包括:获取当前读取的索引元组在当前索引页面的页面偏移量,如果当前读取的索引元组在当前索引页面的页面偏移量等于当前索引页面最后一个索引元组的页面偏移量,当前索引元组为当前索引页面的最后一个索引元组。

21、优选地,本专利技术基于smp的索引并行扫描方法中,当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程,包括:

22、当首先进入并行扫描的子线程检索到符合查询条件的索引元组后,采用首先进入并行扫描的子线程对共享变量上锁,将共享变量的下一个页面编号更新为当前索引页面的兄弟页面编号,将共享变量的索引并行扫描状态更新为空闲状态,释放保护共享变量的锁,唤醒其他子线程进入睡眠等待;

23、采用被唤醒的子线程对共享变量竞争上锁,将首个对共享变量上锁的子线程作为首个被唤醒的子线程;

24、采用首个被唤醒的子线程查询共享变量的索引并行扫描状态,当共享变量的索引并行扫描状态为空闲状态,将共享变量的索引并行扫描状态更新为推进状态,获取共享变量中更新后的下一个页面编号,释放保护共享变量的锁,其他子线程进入睡眠等待,首个被唤醒的子线程根据共享变量中更新后的下一个页面编号检索和读取对应的索引页面,将检索结果返回至主线程;

25、当首个被唤醒的子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索本文档来自技高网...

【技术保护点】

1.一种基于SMP的索引并行扫描方法,其特征在于,所述方法包括:

2.根据权利要求1所述的基于SMP的索引并行扫描方法,其特征在于,通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程,包括:

3.根据权利要求2所述的基于SMP的索引并行扫描方法,其特征在于,初始化申请内存的共享变量,包括:将共享变量中下一个索引页面编号初始化为0,将共享变量中索引并行扫描状态初始化为未开始状态,将保护共享变量的锁的计数值初始化为1。

4.根据权利要求1所述的基于SMP的索引并行扫描方法,其特征在于,采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程,包括:

5.根据权利要求4所述的基于SMP的索引并行扫描方法,其特征在于,采用首先进入并行扫描的子线程对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,释放保护共享变量的锁,其他子线程进入睡眠等待,包括:通过将保护共享变量的锁的计数值设置为0,对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,通过将保护共享变量的锁的计数设置为1,释放保护共享变量的锁。

6.根据权利要求4所述的基于SMP的索引并行扫描方法,其特征在于,采用首先进入并行扫描的子线程根据查询条件,检索第一个索引页面中第一个符合查询条件的索引元组,将检索结果返回至主线程,包括:

7.根据权利要求6所述的基于SMP的索引并行扫描方法,其特征在于,判断当前读取的索引元组是否为当前索引页面的最后一个索引元组,包括:获取当前读取的索引元组在当前索引页面的页面偏移量,如果当前读取的索引元组在当前索引页面的页面偏移量等于当前索引页面最后一个索引元组的页面偏移量,当前索引元组为当前索引页面的最后一个索引元组。

8.根据权利要求1所述的基于SMP的索引并行扫描方法,其特征在于,当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程,包括:

9.根据权利要求1所述的基于SMP的索引并行扫描方法,其特征在于,主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描,包括:

10.一种基于SMP的索引并行扫描系统,其特征在于,所述系统包括并行扫描服务端,所述并行扫描服务端用于通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程;主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描。

...

【技术特征摘要】

1.一种基于smp的索引并行扫描方法,其特征在于,所述方法包括:

2.根据权利要求1所述的基于smp的索引并行扫描方法,其特征在于,通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程,包括:

3.根据权利要求2所述的基于smp的索引并行扫描方法,其特征在于,初始化申请内存的共享变量,包括:将共享变量中下一个索引页面编号初始化为0,将共享变量中索引并行扫描状态初始化为未开始状态,将保护共享变量的锁的计数值初始化为1。

4.根据权利要求1所述的基于smp的索引并行扫描方法,其特征在于,采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程,包括:

5.根据权利要求4所述的基于smp的索引并行扫描方法,其特征在于,采用首先进入并行扫描的子线程对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,释放保护共享变量的锁,其他子线程进入睡眠等待,包括:通过将保护共享变量的锁的计数值设置为0,对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,通过将保护共享变量的锁的计数设置为1,释放保护共享变量的锁。

6.根据权利要求4所述的基于smp的索引并行扫描方法,其特征在于,采用首先进入并行扫描的子线程根据查询条件,检索第一个索引页面中第一个符合查询条件的索引元组,将检索结果返回至主线程,包括:

【专利技术属性】
技术研发人员:陈雨纯刘惠
申请(专利权)人:广州海量数据库技术有限公司
类型:发明
国别省市:

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

1