System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及本地索引创建,尤其涉及一种并行创建opengauss外部分区表分区索引的方法和系统。
技术介绍
1、openguass数据库支持分区表,对表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,只需要扫描相关的分区即可。分区表的索引分为本地索引和全局索引,本地索引是指为每个分区创建一个独立的索引,全局索引是指在整个表上创建索引,不限于任何特定的分区。
2、opengauss数据库支持分区表的本地索引,并且为了提高创建索引的效率,支持并行方式创建本地索引。但是其实质是非分区表并行创建索引的简单扩展,即顺序遍历每个分区,然后按照普通表并行创建索引的方式给每个分区创建索引,主要步骤包括:并行读取数据,并行排序生成中间结果,对中间排序结果进行归并,生成索引。在实际应用中,这种方式通过并行提高读取数据的效率、排序效率来提升创建索引的效率,但是当并行度增加到一定程度时,创建索引的效率反而会劣化,其原因包括:
3、1.受openguass事务一致性机制的限制,只有读取数据、排序生成中间结果的步骤可以在并行子线程中进行,对排序中间结果归并、生成索引这种涉及dml操作的步骤只能在主线程中进行,不能有效发挥并行的优势;
4、2.随着并行度的增加,每个并行子线程可以用于排序生成中间结果的内存会进一步减少,会导致后期主线程要归并的中间排序结果成倍的增加,而归并中间排序结果、生成索引都涉及大量的io操作,又是单线程方式执行;当并行度增加到一定程度后
5、因此,如何提供一种更加高效的并行创建外部分区表分区索引的方法,成为亟待解决的技术问题。
技术实现思路
1、有鉴于此,为了克服现有技术的不足,本专利技术旨在提供一种并行创建opengauss外部分区表分区索引的方法和系统。
2、根据本专利技术的第一方面,提供一种并行创建opengauss外部分区表分区索引的方法,该方法包括:
3、获取外部分区表的分区列表,为分区列表中的每个分区创建对应的分区索引元数据;
4、根据分区信息和分区索引元数据创建任务队列元素,根据创建的任务队列元素构建任务队列;
5、为创建分区索引的子线程设置并行度,主线程根据设置的并行度将主事务信息和任务队列地址发送至每个子线程;
6、子线程根据任务队列的地址并发地从任务队列中抢占获取任务队列元素,根据获取的任务队列元素创建对应的分区索引;
7、主线程检测子线程的分区索引创建任务状态,根据检测的分区索引创建任务状态撤销分区索引创建或提交创建的分区索引。
8、优选地,本专利技术并行创建opengauss外部分区表分区索引的方法中,获取外部分区表的分区列表,为分区列表中的每个分区创建对应的分区索引元数据,包括:通过主线程访问系统表,从系统表中获取外部分区表的分区列表,根据分区列表中的分区名称生成对应的分区索引名称,为分区对应的分区索引创建索引存储文件,将分区与分区索引的关系写入系统表中。
9、优选地,本专利技术并行创建opengauss外部分区表分区索引的方法中,根据分区信息和分区索引元数据创建任务队列元素,根据创建的任务队列元素构建任务队列,包括:任务队列元素与外部分区表中的分区一一对应,该任务队列元素包括分区的定义信息、分区数据的存储信息、分区索引的key定义信息、分区索引数据的存储信息。
10、优选地,本专利技术并行创建opengauss外部分区表分区索引的方法中,为创建分区索引的子线程设置并行度,主线程根据设置的并行度将主事务信息和任务队列地址发送至每个子线程,包括:
11、根据外部分区表的分区数量以及为每个区分创建分区索引所需要的内存和系统资源设置并行度;
12、主线程根据设置的并行度启动子线程,将主事务的事务信息拷贝至每个子线程,将构建的任务队列的地址传递至每个子线程。
13、优选地,本专利技术并行创建opengauss外部分区表分区索引的方法中,主事务的事务信息包括事务id、事务快照和事务命令id。
14、优选地,本专利技术并行创建opengauss外部分区表分区索引的方法中,子线程根据任务队列的地址并发地从任务队列中抢占获取任务队列元素,根据获取的任务队列元素创建对应的分区索引,包括:子线程根据分区的定义信息和分区数据的存储信息读取分区数据,根据分区索引的key定义信息生成索引数据,对生成的索引数据进行排序,根据分区索引数据的存储信息将排序后的索引数据写入至索引存储文件。
15、优选地,本专利技术并行创建opengauss外部分区表分区索引的方法中,子线程根据任务队列的地址并发地从任务队列中抢占获取任务队列元素,根据获取的任务队列元素创建对应的分区索引,还包括:每个子线程在完成一个分区索引创建任务后,继续从任务队列中抢占获取任务队列元素,根据获取的任务队列元素创建对应的分区索引。
16、优选地,本专利技术并行创建opengauss外部分区表分区索引的方法中,主线程检测子线程的分区索引创建任务状态,根据检测的分区索引创建任务状态撤销分区索引创建或提交创建的分区索引,包括:在子线程创建分区索引的过程中,检测子线程的状态,如果存在异常子线程,将当前分区索引创建任务状态判定为异常,中止所有子线程,主线程执行分区索引创建异常终止的清理工作,撤销本次创建分区索引产生的所有操作。
17、优选地,本专利技术并行创建opengauss外部分区表分区索引的方法中,主线程检测子线程的分区索引创建任务状态,根据检测的分区索引创建任务状态撤销分区索引创建或提交创建的分区索引,包括:如果所有子线程都完成分区索引的创建,由主线程将主事务按事务机制提交。
18、根据本专利技术的第二方面,提供一种并行创建opengauss外部分区表分区索引的系统,该系统包括分区索引创建服务端,该分区索引创建服务端用于:获取外部分区表的分区列表,为分区列表中的每个分区创建对应的分区索引元数据;根据分区信息和分区索引元数据创建任务队列元素,根据创建的任务队列元素构建任务队列;为创建分区索引的子线程设置并行度,主线程根据设置的并行度将主事务信息和任务队列地址发送至每个子线程;子线程根据任务队列的地址并发地从任务队列中抢占获取任务队列元素,根据获取的任务队列元素创建对应的分区索引;主线程检测子线程的分区索引创建任务状态,根据检测的分区索引创建任务状态撤销分区索引创建或提交创建的分区索引。
19、根据本专利技术的第三方面,提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现本专利技术第一方面所述的方法。
20、本专利技术并行创建opengauss外部分区表分区索引的方法和系统,通过采用分本文档来自技高网...
【技术保护点】
1.一种并行创建openGauss外部分区表分区索引的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的并行创建openGauss外部分区表分区索引的方法,其特征在于,获取外部分区表的分区列表,为分区列表中的每个分区创建对应的分区索引元数据,包括:通过主线程访问系统表,从系统表中获取外部分区表的分区列表,根据分区列表中的分区名称生成对应的分区索引名称,为分区对应的分区索引创建索引存储文件,将分区与分区索引的关系写入系统表中。
3.根据权利要求1所述的并行创建openGauss外部分区表分区索引的方法,其特征在于,根据分区信息和分区索引元数据创建任务队列元素,根据创建的任务队列元素构建任务队列,包括:任务队列元素与外部分区表中的分区一一对应,所述任务队列元素包括分区的定义信息、分区数据的存储信息、分区索引的key定义信息、分区索引数据的存储信息。
4.根据权利要求1所述的并行创建openGauss外部分区表分区索引的方法,其特征在于,为创建分区索引的子线程设置并行度,主线程根据设置的并行度将主事务信息和任务队列地址发送至每个子线程,包括:
5.根据权利要求4所述的并行创建openGauss外部分区表分区索引的方法,其特征在于,主事务的事务信息包括事务ID、事务快照和事务命令ID。
6.根据权利要求1所述的并行创建openGauss外部分区表分区索引的方法,其特征在于,子线程根据任务队列的地址并发地从任务队列中抢占获取任务队列元素,根据获取的任务队列元素创建对应的分区索引,包括:子线程根据分区的定义信息和分区数据的存储信息读取分区数据,根据分区索引的key定义信息生成索引数据,对生成的索引数据进行排序,根据分区索引数据的存储信息将排序后的索引数据写入至索引存储文件。
7.根据权利要求1所述的并行创建openGauss外部分区表分区索引的方法,其特征在于,子线程根据任务队列的地址并发地从任务队列中抢占获取任务队列元素,根据获取的任务队列元素创建对应的分区索引,还包括:每个子线程在完成一个分区索引创建任务后,继续从任务队列中抢占获取任务队列元素,根据获取的任务队列元素创建对应的分区索引。
8.根据权利要求1所述的并行创建openGauss外部分区表分区索引的方法,其特征在于,主线程检测子线程的分区索引创建任务状态,根据检测的分区索引创建任务状态撤销分区索引创建或提交创建的分区索引,包括:在子线程创建分区索引的过程中,检测子线程的状态,如果存在异常子线程,将当前分区索引创建任务状态判定为异常,中止所有子线程,主线程执行分区索引创建异常终止的清理工作,撤销本次创建分区索引产生的所有操作。
9.根据权利要求1所述的并行创建openGauss外部分区表分区索引的方法,其特征在于,主线程检测子线程的分区索引创建任务状态,根据检测的分区索引创建任务状态撤销分区索引创建或提交创建的分区索引,包括:如果所有子线程都完成分区索引的创建,由主线程将主事务按事务机制提交。
10.一种并行创建openGauss外部分区表分区索引的系统,其特征在于,所述系统包括分区索引创建服务端,所述分区索引创建服务端用于:获取外部分区表的分区列表,为分区列表中的每个分区创建对应的分区索引元数据;根据分区信息和分区索引元数据创建任务队列元素,根据创建的任务队列元素构建任务队列;为创建分区索引的子线程设置并行度,主线程根据设置的并行度将主事务信息和任务队列地址发送至每个子线程;子线程根据任务队列的地址并发地从任务队列中抢占获取任务队列元素,根据获取的任务队列元素创建对应的分区索引;主线程检测子线程的分区索引创建任务状态,根据检测的分区索引创建任务状态撤销分区索引创建或提交创建的分区索引。
...【技术特征摘要】
1.一种并行创建opengauss外部分区表分区索引的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的并行创建opengauss外部分区表分区索引的方法,其特征在于,获取外部分区表的分区列表,为分区列表中的每个分区创建对应的分区索引元数据,包括:通过主线程访问系统表,从系统表中获取外部分区表的分区列表,根据分区列表中的分区名称生成对应的分区索引名称,为分区对应的分区索引创建索引存储文件,将分区与分区索引的关系写入系统表中。
3.根据权利要求1所述的并行创建opengauss外部分区表分区索引的方法,其特征在于,根据分区信息和分区索引元数据创建任务队列元素,根据创建的任务队列元素构建任务队列,包括:任务队列元素与外部分区表中的分区一一对应,所述任务队列元素包括分区的定义信息、分区数据的存储信息、分区索引的key定义信息、分区索引数据的存储信息。
4.根据权利要求1所述的并行创建opengauss外部分区表分区索引的方法,其特征在于,为创建分区索引的子线程设置并行度,主线程根据设置的并行度将主事务信息和任务队列地址发送至每个子线程,包括:
5.根据权利要求4所述的并行创建opengauss外部分区表分区索引的方法,其特征在于,主事务的事务信息包括事务id、事务快照和事务命令id。
6.根据权利要求1所述的并行创建opengauss外部分区表分区索引的方法,其特征在于,子线程根据任务队列的地址并发地从任务队列中抢占获取任务队列元素,根据获取的任务队列元素创建对应的分区索引,包括:子线程根据分区的定义信息和分区数据的存储信息读取分区数据,根据分区索引的key定义信息生成索引数据,对生成的索引数据进行排序,根据分区索引数据的存储信息将排序后的索引数据写入至索引存储文件。
7.根据权利要求1所述的并行创建op...
【专利技术属性】
技术研发人员:那海涛,何小栋,
申请(专利权)人:北京海量数据技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。