CN117743388A - 一种基于smp的索引并行扫描方法和系统 - Google Patents
一种基于smp的索引并行扫描方法和系统 Download PDFInfo
- Publication number
- CN117743388A CN117743388A CN202311806596.XA CN202311806596A CN117743388A CN 117743388 A CN117743388 A CN 117743388A CN 202311806596 A CN202311806596 A CN 202311806596A CN 117743388 A CN117743388 A CN 117743388A
- Authority
- CN
- China
- Prior art keywords
- index
- sub
- thread
- parallel scanning
- tuple
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 230000002618 waking effect Effects 0.000 claims abstract description 12
- 238000004891 communication Methods 0.000 description 18
- 230000006870 function Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据库查询技术领域,提供一种基于SMP的索引并行扫描方法和系统,包括:通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程;主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描。本发明基于SMP的索引并行扫描方法和系统,可以实现多线程扫描btree索引页面,提升查询效率。
Description
技术领域
本发明涉及数据库查询技术领域,尤其涉及一种基于SMP的索引并行扫描方法和系统。
背景技术
openGauss数据库中,btree索引扫描是单线程执行的。首先二分查找到符合条件的索引元组的索引页面,将当前索引页面符合条件的索引元组返回,再根据索引元组查询到对应的堆元组返回,如果当前索引页面都符合条件,继续扫描下一个索引页面,直到无法找到符合条件的索引元组。单线程的扫描方式,不能有效地利用CPU、IO,导致出现性能瓶颈。
openGauss支持SMP并行技术,利用计算机的多核CPU架构实现多线程并行计算。SMP并行技术实现算子级并行执行,有效地缩短了查询时间,提高了查询性能性能和资源利用率。SMP并行执行增加了数据交互算子,实现多个工作线程之间的数据交互,确保查询的正确性和完整性。但是,openGauss的SMP并行技术目前支持的扫描算子只有顺序扫描算子,这限制了并行查询时必须对查询的表执行全表扫描。当扫描的表数据量较大时,对于带条件且返回数据较少的查询,不能像索引扫描一样,通过索引元组直接查询堆元组,全表扫描效率较低。
因此,如何提供一种并行扫描方法,提高btree索引扫描的性能,成为亟待解决的技术问题。
发明内容
有鉴于此,为了克服现有技术的不足,本发明旨在提供一种基于SMP的索引并行扫描方法和系统。
根据本发明的第一方面,提供一种基于SMP的索引并行扫描方法,包括:
通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;
采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;
当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程;
主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描。
优选地,本发明基于SMP的索引并行扫描方法中,通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程,包括:
通过主线程在数据库内部声明,构建用于存储索引并行扫描共享信息的共享变量,所述共享变量的成员包括下一个索引页面编号、索引并行扫描状态以及保护共享变量的锁,所述索引并行扫描的状态包括未开始状态、推进状态、空闲状态和完成状态;
在共享内存中为构建的共享变量申请内存,初始化申请内存的共享变量;
根据数据库配置文件中配置的SMP并行度设置参与并行扫描的子线程数量,通过主线程启动参与并行扫描的子线程,将需要执行的并行扫描计划和初始化的共享变量传递给启动的子线程。
优选地,本发明基于SMP的索引并行扫描方法中,初始化申请内存的共享变量,包括:将共享变量中下一个索引页面编号初始化为0,将共享变量中索引并行扫描状态初始化为未开始状态,将保护共享变量的锁的计数值初始化为1。
优选地,本发明基于SMP的索引并行扫描方法中,采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程,包括:
采用首先进入并行扫描的子线程对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,释放保护共享变量的锁,其他子线程进入睡眠等待;
采用首先进入并行扫描的子线程根据查询条件,检索第一个索引页面中第一个符合查询条件的索引元组,将检索结果返回至主线程。
优选地,本发明基于SMP的索引并行扫描方法中,采用首先进入并行扫描的子线程对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,释放保护共享变量的锁,其他子线程进入睡眠等待,包括:通过将保护共享变量的锁的计数值设置为0,对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,通过将保护共享变量的锁的计数设置为1,释放保护共享变量的锁。
优选地,本发明基于SMP的索引并行扫描方法中,采用首先进入并行扫描的子线程根据查询条件,检索第一个索引页面中第一个符合查询条件的索引元组,将检索结果返回至主线程,包括:
当在第一个索引页面中检索到符合查询条件的索引元组,记录第一个符合查询条件的索引元组在第一个索引页面中的偏移量,根据所述偏移量读取第一个符合查询条件的索引元组,根据索引元组中存储的堆元组的指针从堆页面查找对应的堆元组,将查找获得的堆元组返回至主线程;
判断当前读取的索引元组是否为当前索引页面的最后一个索引元组,如果当前读取的索引元组是当前索引页面的最后一个索引元组,结束首先进入并行扫描的子线程对当前索引页面的扫描;如果当前读取的索引元组不是当前索引页面的最后一个索引元组,采用首先进入并行扫描的子线程检索并读取下一个符合查询条件的索引元组,直至将当前索引页面上所有符合查询条件的索引元组对应的堆元组返回至主线程,结束首先进入并行扫描的子线程对当前索引页面的扫描;
当第一个索引页面中不存在符合查询条件的索引元组,对共享变量上锁,将共享变量的索引并行扫描状态更新为扫描完成状态,释放保护共享变量的锁,唤醒其他进入睡眠等待的子线程,所有子线程将空元组返回至主线程后停止扫描。
优选地,本发明基于SMP的索引并行扫描方法中,判断当前读取的索引元组是否为当前索引页面的最后一个索引元组,包括:获取当前读取的索引元组在当前索引页面的页面偏移量,如果当前读取的索引元组在当前索引页面的页面偏移量等于当前索引页面最后一个索引元组的页面偏移量,当前索引元组为当前索引页面的最后一个索引元组。
优选地,本发明基于SMP的索引并行扫描方法中,当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程,包括:
当首先进入并行扫描的子线程检索到符合查询条件的索引元组后,采用首先进入并行扫描的子线程对共享变量上锁,将共享变量的下一个页面编号更新为当前索引页面的兄弟页面编号,将共享变量的索引并行扫描状态更新为空闲状态,释放保护共享变量的锁,唤醒其他子线程进入睡眠等待;
采用被唤醒的子线程对共享变量竞争上锁,将首个对共享变量上锁的子线程作为首个被唤醒的子线程;
采用首个被唤醒的子线程查询共享变量的索引并行扫描状态,当共享变量的索引并行扫描状态为空闲状态,将共享变量的索引并行扫描状态更新为推进状态,获取共享变量中更新后的下一个页面编号,释放保护共享变量的锁,其他子线程进入睡眠等待,首个被唤醒的子线程根据共享变量中更新后的下一个页面编号检索和读取对应的索引页面,将检索结果返回至主线程;
当首个被唤醒的子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程,直至将所有索引页面上所有符合查询条件的索引元组对应的堆元组返回至主线程,结束子线程的扫描。
优选地,本发明基于SMP的索引并行扫描方法中,主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描,包括:
主线程判断从子线程返回的堆元组是否为空,当子线程返回的堆元组为空,将子线程的数量减1处理,判断减1处理后的子线程数量是否为0,当减1处理后的子线程数量不为0,继续等待子线程返回堆元组;当减1处理后的子线程数量为0,停止所有子线程;
当子线程返回的堆元组不为空,将收到的堆元组发送到数据库的客户端输出,继续等待子线程返回堆元组。
根据本发明的第二方面,提供一种基于SMP的索引并行扫描系统,该系统包括并行扫描服务端,该并行扫描服务端用于通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程;主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描。
根据本发明的第三方面,提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现本发明第一方面所述的方法。
本发明基于SMP的索引并行扫描方法和系统,通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程,可以实现多线程扫描btree索引页面,提升查询效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为一种适用于本发明实施例的基于SMP的索引并行扫描方法的系统的示意图;
图2为根据本发明实施例的一种基于SMP的索引并行扫描方法的步骤流程图;
图3为根据本发明实施例的基于SMP的索引并行扫描方法的一种执行流程示例图;
图4为根据本发明实施例的基于SMP的索引并行扫描方法的另一种执行流程示例图;
图5为本发明提供的设备的结构示意图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合;并且,基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
图1示出了一种适用于本发明实施例的基于SMP的索引并行扫描方法的示例性系统。如图1所示,该系统可以包括并行扫描服务端101、通信网络102和/或一个或多个并行扫描客户端103,图1中示例为多个并行扫描客户端103。
并行扫描服务端101可以时用于存储信息、数据、程序和/或任何其他合适类型的内容的任何适当的服务器。在一些实施例中,并行扫描服务端101可以执行适当的功能。例如,在一些实施例中,并行扫描服务端101可以用于基于SMP对索引进行并行扫描。作为可选的示例,在一些实施例中,并行扫描服务端101可以被用于通过构建共享变量实现基于SMP对索引进行并行扫描。例如,并行扫描服务端101可以用于通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程;主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描。
作为另一示例,在一些实施例中,并行扫描服务端101可以根据并行扫描客户端103的请求,将基于SMP的索引并行扫描方法发送到并行扫描客户端103供用户使用。
作为可选的示例,在一些实施例中,并行扫描客户端103用于提供可视化扫描界面,该可视化扫描界面用于接收用户基于SMP对索引进行并行扫描的选择输入操作,以及,用于响应于选择输入操作,从并行扫描服务端101获取与选择输入操作所选择的选项所对应的扫描界面并展示扫描界面,扫描界面中至少展示有基于SMP对索引进行并行扫描的信息以及针对基于SMP对索引进行并行扫描的操作选项。
在一些实施例中,通信网络102可以是一个或多个有线和/或无线网络的任何适当的组合。例如,通信网络102能够包括以下各项中的任何一种或多种:互联网、内联网、广域网(WAN)、局域网(LAN)、无线网络、数字订户线路(DSL)网络、帧中继网络、异步转移模式(ATM)网络、虚拟专用网(VPN)和/或任何其它合适的通信网络。并行扫描客户端103能够通过一个或多个通信链路(例如,通信链路104)连接到通信网络102,该通信网络102能够经由一个或多个通信链路(例如,通信链路105)被链接到并行扫描服务端101。通信链路可以是适合于在并行扫描客户端103和并行扫描服务端101之间传送数据的任何通信链路,诸如网络链路、拨号链路、无线链路、硬连线链路、任何其它合适的通信链路或此类链路的任何合适的组合。
并行扫描客户端103可以包括通过适当形式呈现与高速访问ORC外部表相关的界面,以供用户使用和操作的任何一个或多个客户端。在一些实施例中,并行扫描客户端103可以包括任何合适类型的设备。例如,在一些实施例中,并行扫描客户端103可以包括移动设备、平板计算机、膝上型计算机、台式计算机和/或任何其他合适类型的客户端设备。
尽管将并行扫描服务端101图示为一个设备,但是在一些实施例中,可以使用任何适当数量的设备来执行由并行扫描服务端101执行的功能。例如,在一些实施例中,可以使用多个设备来实现由并行扫描服务端101执行的功能。或者,可使用云服务实现并行扫描服务端101的功能。
基于上述系统,本发明实施例提供了一种基于SMP的索引并行扫描方法,以下通过以下实施例进行说明。
参照图2,示出了根据本发明实施例的一种基于SMP的索引并行扫描方法的步骤流程图。
本实施例的基于SMP的索引并行扫描方法可在并行扫描服务端执行,该基于SMP的索引并行扫描方法包括以下步骤:
首先,本发明实施例方法需要通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程。
作为可选的示例,本发明实施例方法中,通过主线程在数据库内部声明,构建用于存储索引并行扫描共享信息的共享变量。本实施例方法中,共享变量的成员包括下一个索引页面编号、索引并行扫描状态以及保护共享变量的锁,索引并行扫描的状态包括未开始状态、推进状态、空闲状态和完成状态,其中,未开始状态表示扫描未开始,推进状态表示某个工作线程正在将扫描推进至一个新的索引页面,其他工作线程需要等待,完成状态表示扫描完成。
在完成共享变量的构建后,本发明实施例方法在共享内存中为构建的共享变量申请内存,初始化申请内存的共享变量。举例来说,本实施例方法按以下方式对共享变量进行初始化:将共享变量中下一个索引页面编号初始化为0,将共享变量中索引并行扫描状态初始化为未开始状态,将保护共享变量的锁的计数值初始化为1。
在完成对共享变量的初始化后,本发明实施例方法还需要根据数据库配置文件中配置的SMP并行度设置参与并行扫描的子线程数量,通过主线程启动参与并行扫描的子线程,将需要执行的并行扫描计划和初始化的共享变量传递给启动的子线程。
接着,本发明实施例方法需要采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程。
作为可选的示例,本发明实施例方法采用首先进入并行扫描的子线程对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,释放保护共享变量的锁,其他子线程进入睡眠等待。需要说明的是,本发明实施例方法通过修改保护共享变量的锁的计数值实现对锁的上锁和释放。举例来说,本实施方法中,通过将保护共享变量的锁的计数值设置为0,对共享变量上锁,将共享变量的索引并行扫描状态更新为推进状态,通过将保护共享变量的锁的计数设置为1,释放保护共享变量的锁。
图3为根据本发明实施例的基于SMP的索引并行扫描方法的一种执行流程示例图。如图3所示,作为可选的示例,本发明实施例方法采用首先进入并行扫描的子线程根据查询条件,检索第一个索引页面中第一个符合查询条件的索引元组,将检索结果返回至主线程。
当在第一个索引页面中检索到符合查询条件的索引元组,记录第一个符合查询条件的索引元组在第一个索引页面中的偏移量,根据所述偏移量读取第一个符合查询条件的索引元组,根据索引元组中存储的堆元组的指针从堆页面查找对应的堆元组,将查找获得的堆元组返回至主线程;
判断当前读取的索引元组是否为当前索引页面的最后一个索引元组,如果当前读取的索引元组是当前索引页面的最后一个索引元组,结束首先进入并行扫描的子线程对当前索引页面的扫描;如果当前读取的索引元组不是当前索引页面的最后一个索引元组,采用首先进入并行扫描的子线程检索并读取下一个符合查询条件的索引元组,直至将当前索引页面上所有符合查询条件的索引元组对应的堆元组返回至主线程,结束首先进入并行扫描的子线程对当前索引页面的扫描。需要说明的是,本发明实施例方法中,通过比对索引元组的页面偏移量实现对索引元组是否为当前索引页面的最后一个索引元组的判断。具体的,获取当前读取的索引元组在当前索引页面的页面偏移量,如果当前读取的索引元组在当前索引页面的页面偏移量等于当前索引页面最后一个索引元组的页面偏移量,当前索引元组为当前索引页面的最后一个索引元组。本领域技术人员在实施例本发明方法时,还可以根据实际应用场景选择其它合适的方式对当前索引元组是否为当前索引页面最后一个索引元组进行判断,本实施例对此不做限制。
当第一个索引页面中不存在符合查询条件的索引元组,对共享变量上锁,将共享变量的索引并行扫描状态更新为扫描完成状态,释放保护共享变量的锁,唤醒其他进入睡眠等待的子线程,所有子线程将空元组返回至主线程后停止扫描。
需要说明的是,本发明实施例方法中,当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程。
具体的,当首先进入并行扫描的子线程检索到符合查询条件的索引元组后,采用首先进入并行扫描的子线程对共享变量上锁,将共享变量的下一个页面编号更新为当前索引页面的兄弟页面编号,将共享变量的索引并行扫描状态更新为空闲状态,释放保护共享变量的锁,唤醒其他子线程进入睡眠等待;
采用被唤醒的子线程对共享变量竞争上锁,将首个对共享变量上锁的子线程作为首个被唤醒的子线程;
采用首个被唤醒的子线程查询共享变量的索引并行扫描状态,当共享变量的索引并行扫描状态为空闲状态,将共享变量的索引并行扫描状态更新为推进状态,获取共享变量中更新后的下一个页面编号,释放保护共享变量的锁,其他子线程进入睡眠等待,首个被唤醒的子线程根据共享变量中更新后的下一个页面编号检索和读取对应的索引页面,将检索结果返回至主线程;
当首个被唤醒的子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程,直至将所有索引页面上所有符合查询条件的索引元组对应的堆元组返回至主线程,结束子线程的扫描。
需要注意的是,本发明实施例方法中,主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描。图4为根据本发明实施例的基于SMP的索引并行扫描方法的另一种执行流程示例图,具体的,如图4所示,主线程判断从子线程返回的堆元组是否为空,当子线程返回的堆元组为空,将子线程的数量减1处理,判断减1处理后的子线程数量是否为0,当减1处理后的子线程数量不为0,继续等待子线程返回堆元组;当减1处理后的子线程数量为0,停止所有子线程;当子线程返回的堆元组不为空,将收到的堆元组发送到数据库的客户端输出,继续等待子线程返回堆元组。
本发明实施例的基于SMP的索引并行扫描方法和系统中,主线程启动子线程为工作线程,在多个工作线程间维护一个共享变量,存储并行扫描工作线程的共享信息。工作线程访问该共享变量时,对共享变量加锁,防止其他工作线程修改共享变量;根据共享变量中并行扫描的状态,判断是否执行扫描,还是睡眠等待;工作线程获取到下一个页面编号后,释放锁,同时唤醒其他线程获取下一个页面编号。工作线程根据获取到的页面编号,扫描页面返回符合条件的索引元组,根据索引元组中存储的堆元组的指针,到堆页面查找对应的堆元组,返回给主线程。在返回所有符合条件的元组后,主线程停止所有子线程。
本发明实施例的基于SMP的索引并行扫描方法和系统中,通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程,可以实现多线程扫描btree索引页面,提升查询效率。需要说明的是,本实施例的方法适用于openGauss数据库的btree索引扫描,还适用于其他类型数据库的扫描。
如图5所示,本发明还提供了一种设备,包括处理器310、通信接口320、用于存储处理器可执行计算机程序的存储器330及通信总线340。其中,处理器310、通信接口320及存储器330通过通信总线340完成相互间的通信。处理器310通过运行可执行计算机程序以实现上述的基于SMP的索引并行扫描方法。
其中,存储器330中的计算机程序可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以基于实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种基于SMP的索引并行扫描方法,其特征在于,所述方法包括:
通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;
采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;
当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程;
主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描。
2.根据权利要求1所述的基于SMP的索引并行扫描方法,其特征在于,通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程,包括:
通过主线程在数据库内部声明,构建用于存储索引并行扫描共享信息的共享变量,所述共享变量的成员包括下一个索引页面编号、索引并行扫描状态以及保护共享变量的锁,所述索引并行扫描的状态包括未开始状态、推进状态、空闲状态和完成状态;
在共享内存中为构建的共享变量申请内存,初始化申请内存的共享变量;
根据数据库配置文件中配置的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的索引并行扫描方法,其特征在于,主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描,包括:
主线程判断从子线程返回的堆元组是否为空,当子线程返回的堆元组为空,将子线程的数量减1处理,判断减1处理后的子线程数量是否为0,当减1处理后的子线程数量不为0,继续等待子线程返回堆元组;当减1处理后的子线程数量为0,停止所有子线程;
当子线程返回的堆元组不为空,将收到的堆元组发送到数据库的客户端输出,继续等待子线程返回堆元组。
10.一种基于SMP的索引并行扫描系统,其特征在于,所述系统包括并行扫描服务端,所述并行扫描服务端用于通过主线程构建和初始化索引并行扫描的共享变量,启动参与并行扫描的子线程;采用首先进入并行扫描的子线程检索和读取索引页面中符合查询条件的索引元组,将检索结果返回至主线程;当每个子线程检索到符合查询条件的索引元组后,通过更新共享变量唤醒下一个子线程并行检索和读取下一个索引页面中符合查询条件的索引元组,将检索结果返回至主线程;主线程判断接收的检索结果是否为空,根据判断结果判定是否继续并行扫描。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311806596.XA CN117743388B (zh) | 2023-12-26 | 2023-12-26 | 一种基于smp的索引并行扫描方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311806596.XA CN117743388B (zh) | 2023-12-26 | 2023-12-26 | 一种基于smp的索引并行扫描方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117743388A true CN117743388A (zh) | 2024-03-22 |
CN117743388B CN117743388B (zh) | 2024-06-25 |
Family
ID=90281293
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311806596.XA Active CN117743388B (zh) | 2023-12-26 | 2023-12-26 | 一种基于smp的索引并行扫描方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117743388B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8417735B1 (en) * | 2007-12-12 | 2013-04-09 | Nvidia Corporation | Instruction-efficient algorithm for parallel scan using initialized memory regions to replace conditional statements |
US20150227570A1 (en) * | 2012-09-20 | 2015-08-13 | Cray Inc. | Dynamic updates to a semantic database using fine-grain locking |
US20170154014A1 (en) * | 2014-05-21 | 2017-06-01 | Facebook, Inc. | Asynchronous execution of animation tasks for a gui |
CN107710200A (zh) * | 2015-06-24 | 2018-02-16 | 华为技术有限公司 | 用于并行化smp数据库中的基于散列的运算符的系统和方法 |
CN110704433A (zh) * | 2019-09-23 | 2020-01-17 | 北京优炫软件股份有限公司 | 列式存储数据的brin索引构建方法、数据检索方法及装置 |
CN112364027A (zh) * | 2020-12-09 | 2021-02-12 | 北京海量数据技术股份有限公司 | 并行创建openGauss分区表索引方法、装置及系统 |
US20210382896A1 (en) * | 2020-06-09 | 2021-12-09 | Walmart Apollo, Llc | High Efficiency Data Querying |
CN115204010A (zh) * | 2022-06-30 | 2022-10-18 | 哈尔滨工业大学 | 基于多核并行的原子氧或紫外通量的蒙特卡罗模拟方法 |
CN115576899A (zh) * | 2022-12-09 | 2023-01-06 | 深圳市木浪云科技有限公司 | 构建索引的方法和装置以及文件查找方法和装置 |
US11615083B1 (en) * | 2017-11-22 | 2023-03-28 | Amazon Technologies, Inc. | Storage level parallel query processing |
CN116701010A (zh) * | 2023-05-11 | 2023-09-05 | 苏州浪潮智能科技有限公司 | 一种多线程共享变量的更新方法、系统、装置及介质 |
CN117112619A (zh) * | 2023-05-30 | 2023-11-24 | 广州海量数据库技术有限公司 | 一种在openGauss数据库上实现并行位图堆扫描的方法 |
-
2023
- 2023-12-26 CN CN202311806596.XA patent/CN117743388B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8417735B1 (en) * | 2007-12-12 | 2013-04-09 | Nvidia Corporation | Instruction-efficient algorithm for parallel scan using initialized memory regions to replace conditional statements |
US20150227570A1 (en) * | 2012-09-20 | 2015-08-13 | Cray Inc. | Dynamic updates to a semantic database using fine-grain locking |
US20170154014A1 (en) * | 2014-05-21 | 2017-06-01 | Facebook, Inc. | Asynchronous execution of animation tasks for a gui |
CN107710200A (zh) * | 2015-06-24 | 2018-02-16 | 华为技术有限公司 | 用于并行化smp数据库中的基于散列的运算符的系统和方法 |
US11615083B1 (en) * | 2017-11-22 | 2023-03-28 | Amazon Technologies, Inc. | Storage level parallel query processing |
CN110704433A (zh) * | 2019-09-23 | 2020-01-17 | 北京优炫软件股份有限公司 | 列式存储数据的brin索引构建方法、数据检索方法及装置 |
US20210382896A1 (en) * | 2020-06-09 | 2021-12-09 | Walmart Apollo, Llc | High Efficiency Data Querying |
CN112364027A (zh) * | 2020-12-09 | 2021-02-12 | 北京海量数据技术股份有限公司 | 并行创建openGauss分区表索引方法、装置及系统 |
CN115204010A (zh) * | 2022-06-30 | 2022-10-18 | 哈尔滨工业大学 | 基于多核并行的原子氧或紫外通量的蒙特卡罗模拟方法 |
CN115576899A (zh) * | 2022-12-09 | 2023-01-06 | 深圳市木浪云科技有限公司 | 构建索引的方法和装置以及文件查找方法和装置 |
CN116701010A (zh) * | 2023-05-11 | 2023-09-05 | 苏州浪潮智能科技有限公司 | 一种多线程共享变量的更新方法、系统、装置及介质 |
CN117112619A (zh) * | 2023-05-30 | 2023-11-24 | 广州海量数据库技术有限公司 | 一种在openGauss数据库上实现并行位图堆扫描的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117743388B (zh) | 2024-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Shi et al. | Fast and concurrent {RDF} queries with {RDMA-Based} distributed graph exploration | |
US8156082B2 (en) | System and methods for temporary data management in shared disk cluster | |
EP3796150B1 (en) | Storage volume creation method and apparatus, server, and storage medium | |
US9177025B2 (en) | Hash-join in parallel computation environments | |
Armbrust et al. | PIQL: Success-tolerant query processing in the cloud | |
US8620903B2 (en) | Database distribution system and methods for scale-out applications | |
US20120117075A1 (en) | Systems and methods for grouped request execution | |
US8392388B2 (en) | Adaptive locking of retained resources in a distributed database processing environment | |
US20100293135A1 (en) | Highconcurrency query operator and method | |
JP2017157229A (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
JP6103037B2 (ja) | 計算機システム | |
US5845113A (en) | Method for external sorting in shared-nothing parallel architectures | |
US20090083238A1 (en) | Stop-and-restart style execution for long running decision support queries | |
EP2469423B1 (en) | Aggregation in parallel computation environments with shared memory | |
WO2018040488A1 (zh) | 一种处理连接查询的方法及装置 | |
CN108829740B (zh) | 数据存储方法和装置 | |
US8407713B2 (en) | Infrastructure of data summarization including light programs and helper steps | |
US20230195726A1 (en) | Selecting between hydration-based scanning and stateless scale-out scanning to improve query performance | |
Tang et al. | Toward coordination-free and reconfigurable mixed concurrency control | |
US10803043B2 (en) | Managing hash indexing | |
Wang et al. | RDMA-enabled concurrency control protocols for transactions in the cloud era | |
US9229969B2 (en) | Management of searches in a database system | |
CN117743388B (zh) | 一种基于smp的索引并行扫描方法和系统 | |
Joldzic et al. | The impact of cluster characteristics on HiveQL query optimization | |
US11816103B1 (en) | Dynamic prefetching for database queries |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |