System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据库扫描,尤其涉及一种opengauss数据库btree索引扫描方法和系统。
技术介绍
1、在opengauss btree索引扫描时,会先扫描索引页面,找到符合条件的堆元组id,再到堆页面根据tid获取堆元组,然后重复该操作,直到无法找到符合条件的索引元组,这些步骤是同步执行的。步骤中,每次根据堆元组id从堆表页面中获取元组会产生一次随机i/o,查询条件匹配结果越多,该步骤产生的随机i/o也更多,查询效率降低。
2、因此,如何提供一种效率更高的查询方法,成为亟待解决的技术问题。
技术实现思路
1、有鉴于此,为了克服现有技术的不足,本专利技术旨在提供一种opengauss数据库btree索引扫描方法和系统。
2、根据本专利技术的第一方面,提供一种opengauss数据库btree索引扫描方法,包括:
3、根据元组id属性构建异步预取结构;
4、对构建的异步预取结构进行初始化;
5、根据初始化的异步预取结构对元组进行扫描。
6、优选地,本专利技术的opengauss数据库btree索引扫描方法中,根据元组id属性构建异步预取结构,包括:在构建异步预取结构时,将元组id队列queueitems、元组id队列索引queueindex、元组id队列结束位置queueend、已预取页面编号缓存blockcache、预取结束标志prefetchdone以及预取元组id数量prefetchsize作为异步预取
7、优选地,本专利技术的opengauss数据库btree索引扫描方法中,对构建的异步预取结构进行初始化,包括:
8、申请元组id队列queueitems的内存,将元组id队列索引queueindex和元组id队列结束位置queueend的值初始化为0;
9、申请已预取页面编号缓存blockcache的hash表内存,将预取结束标志prefetchdone的值初始化为false;
10、将预取元组id数量prefetchsize的值设置为自定义初始值。
11、优选地,本专利技术的opengauss数据库btree索引扫描方法中,根据初始化的异步预取结构对元组进行扫描,包括:获取元组,对异步预取结构中预取结束标志prefetchdone的值和元组id队列queueitems的状态进行读取和判断,根据判断结果对堆页面进行预取和返回对应堆元组。
12、优选地,本专利技术的opengauss数据库btree索引扫描方法中,获取元组,对异步预取结构中预取结束标志prefetchdone的值和元组id队列queueitems的状态进行读取和判断,根据判断结果对堆页面进行预取和返回对应堆元组,包括:
13、判断异步预取结构中预取结束标志prefetchdone的值是否为false,判断元组id队列queueitems是否已满;
14、当异步预取结构中预取结束标志prefetchdone的值为true或/且元组id队列queueitems已满,判断预取结束标志prefetchdone的值是否为true且元组id队列queueitems是否为空;
15、当预取结束标志prefetchdone的值为true且元组id队列queueitems为空,结束扫描;
16、当元组id队列queueitems不为空,从元组id队列queueitems的元组id队列索引queueindex位置获取下一个元组id,对元组id队列索引queueindex的值进行加1处理,从元组id对应的堆页面返回对应的堆元组,继续获取并扫描下一个元组。
17、优选地,本专利技术的opengauss数据库btree索引扫描方法中,获取元组,对异步预取结构中预取结束标志prefetchdone的值和元组id队列queueitems的状态进行读取和判断,根据判断结果对堆页面进行预取和返回对应堆元组,包括:
18、判断异步预取结构中预取结束标志prefetchdone的值是否为false,判断元组id队列queueitems是否已满;
19、当异步预取结构中预取结束标志prefetchdone的值为false且元组id队列queueitems未满,扫描索引页面获取符合条件的索引元组,根据获取的索引元组获取对应的堆元组的元组id;
20、判断获取的堆元组的元组id是否为空,根据判断结果对堆页面进行预取和返回对应堆元组。
21、优选地,本专利技术的opengauss数据库btree索引扫描方法中,判断获取的堆元组的元组id是否为空,根据判断结果对堆页面进行预取和返回对应堆元组,包括:
22、当堆元组的元组id不为空,将所述元组id存储到queueitems中元组id队列结束位置queueend,将元组id队列结束位置queueend的值加1处理;
23、根据存储到元组id队列queueitems中的元组id获取堆页面编号,通过查询hash表判断获取的堆页面编号对应的页面是否已经预取;
24、当堆元组的元组id为空,将预取结束标志prefetchdone的值设置为true,判断元组id队列queueitems是否为空,根据判断结果对堆页面进行预取和返回对应堆元组。
25、优选地,本专利技术的opengauss数据库btree索引扫描方法中,根据存储到元组id队列queueitems中的元组id获取堆页面编号,通过查询hash表判断获取的堆页面编号对应的页面是否已经预取,包括:
26、当获取的堆页面编号对应的页面没有预取,将获取的堆页面编号存储至已预取页面编号缓存blockcache,并预取该堆页面;
27、当获取的堆页面编号对应的页面已经预取,重新判断异步预取结构中预取结束标志prefetchdone的值是是否为false,判断元组id队列queueitems是否已满。
28、优选地,本专利技术的opengauss数据库btree索引扫描方法中,根据判断结果对堆页面进行预取和返回对应堆元组,包括:当元组id队列queueitems为空,结束扫描;当元组id队列queueitems不为空,从元组id队列queueitems的元组id队列索引queueindex位置获取下一个元组id,对元组id队列索引queueindex的值进行加1处理,从将元组id对应的堆页面返回对应的堆元组,继续获取并扫描下一个元组。
29、根据本专利技术的第二方面,提供一种opengauss数据库btree索引扫描系统,该系统包括扫描服务端,该扫描服务端用于:根据元组id属性构建异步预取结构;对构建的异步预取结构进行初始化;根据初始化的异步预取结构对元组进行扫描。
30、根据本专利技术的第三方面,提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程本文档来自技高网...
【技术保护点】
1.一种openGauss数据库btree索引扫描方法,其特征在于,所述方法包括:
2.根据权利要求1所述的openGauss数据库btree索引扫描方法,其特征在于,根据元组id属性构建异步预取结构,包括:在构建异步预取结构时,将元组id队列queueitems、元组id队列索引queueindex、元组id队列结束位置queueend、已预取页面编号缓存blockcache、预取结束标志prefetchdone以及预取元组id数量prefetchsize作为异步预取结构成员。
3.根据权利要求1所述的openGauss数据库btree索引扫描方法,其特征在于,对构建的异步预取结构进行初始化,包括:
4.根据权利要求1所述的openGauss数据库btree索引扫描方法,其特征在于,根据初始化的异步预取结构对元组进行扫描,包括:获取元组,对异步预取结构中预取结束标志prefetchdone的值和元组id队列queueitems的状态进行读取和判断,根据判断结果对堆页面进行预取和返回对应堆元组。
5.根据权利要求4所述的openGa
6.根据权利要求4所述的openGauss数据库btree索引扫描方法,其特征在于,获取元组,对异步预取结构中预取结束标志prefetchdone的值和元组id队列queueitems的状态进行读取和判断,根据判断结果对堆页面进行预取和返回对应堆元组,包括:
7.根据权利要求6所述的openGauss数据库btree索引扫描方法,其特征在于,判断获取的堆元组的元组id是否为空,根据判断结果对堆页面进行预取和返回对应堆元组,包括:
8.根据权利要求7所述的openGauss数据库btree索引扫描方法,其特征在于,根据存储到元组id队列queueitems中的元组id获取堆页面编号,通过查询hash表判断获取的堆页面编号对应的页面是否已经预取,包括:
9.根据权利要求7所述的openGauss数据库btree索引扫描方法,其特征在于,根据判断结果对堆页面进行预取和返回对应堆元组,包括:当元组id队列queueitems为空,结束扫描;当元组id队列queueitems不为空,从元组id队列queueitems的元组id队列索引queueindex位置获取下一个元组id,对元组id队列索引queueindex的值进行加1处理,从将元组id对应的堆页面返回对应的堆元组,继续获取并扫描下一个元组。
10.一种openGauss数据库btree索引扫描系统,其特征在于,所述系统包括扫描服务端,所述扫描服务端用于:根据元组id属性构建异步预取结构;对构建的异步预取结构进行初始化;根据初始化的异步预取结构对元组进行扫描。
...【技术特征摘要】
1.一种opengauss数据库btree索引扫描方法,其特征在于,所述方法包括:
2.根据权利要求1所述的opengauss数据库btree索引扫描方法,其特征在于,根据元组id属性构建异步预取结构,包括:在构建异步预取结构时,将元组id队列queueitems、元组id队列索引queueindex、元组id队列结束位置queueend、已预取页面编号缓存blockcache、预取结束标志prefetchdone以及预取元组id数量prefetchsize作为异步预取结构成员。
3.根据权利要求1所述的opengauss数据库btree索引扫描方法,其特征在于,对构建的异步预取结构进行初始化,包括:
4.根据权利要求1所述的opengauss数据库btree索引扫描方法,其特征在于,根据初始化的异步预取结构对元组进行扫描,包括:获取元组,对异步预取结构中预取结束标志prefetchdone的值和元组id队列queueitems的状态进行读取和判断,根据判断结果对堆页面进行预取和返回对应堆元组。
5.根据权利要求4所述的opengauss数据库btree索引扫描方法,其特征在于,获取元组,对异步预取结构中预取结束标志prefetchdone的值和元组id队列queueitems的状态进行读取和判断,根据判断结果对堆页面进行预取和返回对应堆元组,包括:
6.根据权利要求4所述的opengauss数据库btree索引扫描方法,其...
【专利技术属性】
技术研发人员:陈雨纯,刘惠,
申请(专利权)人:广州海量数据库技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。