ob旁路导入的创建索引阶段设计成串行是为什么

【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.3.5
【问题描述】OB旁路导入,在数据写入以后的创建索引阶段,观察GV$SESSION_LONGOPS表发现索引是一个个串行创建的,这个在设计上有什么深意吗,为什么不能并行做节约点时间呢 :thinking:

你使用ob的旁路导入的语句 是什么样的 能发一下么?

是用的OMS上面全量导入时候勾选的direct load

这是索引后置和旁路导入的方式没有关系 旁路导入只是写数据的一种方式 这个创建索引的并发 应该和参数有关系
struct.transfer.config 你可以看看这里面的配置参数 默认索引的并发是多少

select * from __all_ddl_operation where ddl_stmt_str like ‘%create index idx on t1%’; 可以根据这个表 查看一下 正在执行的索引 是否加了并发


感觉不是的,旁路导入看着原理是先把数据写进一个临时表,然后再建索引然后交换表名来完成的,我并没有选索引后置的地方。我OMS仅选择的是全量数据迁移,都没选结构迁移


你这里怎么选择的 是选择的索引后置还是


我的全量迁移里怎么没有这个选项?我是ob to ob的导入

你使用的oms是哪个版本

4.2.9_CE

你选择了结构迁移了么?如果没有选择确实是没有的


我是没有选择的 也是没有的

没有,我是提前建好空表然后只选了全量迁移导入的。而且我在空表里有索引的情况下,看这个SESSION_LONGOPS表还是在建索引,所以我猜测旁路导入的原理是交换表名的方式


全量迁移-表索引 界面截个图看下


没有的,我没有结构迁移,提前建好表的

正常情况下 没有表结构迁移的话 应该不会创建索引的 按照上面发的 截图看看

然而我选的旁路导入确实在SESSION_LONGOPS里看到了建索引的进度,你说的截图是指截什么的图?

我们在看看 可能和旁路导入的处理方式有关系

确实是和旁路导入流程有关系 因为旁路导入也是一种ddl处理。流程大概是会先创建hidden table,用于导入,把原表的数据和新导入的数据合并后写入hidden table中,在hidden table中重建原表的索引和外键,交换原表和hidden table的table_id。之前你的猜测也是有道理的,有点类似在线修改表名一样

好的,那回到一开始的问题,旁路导入在数据导入完,对隐藏表建索引的时候,现在的设计是串行一个个加,这部分在后续版本能不能优化呢?我搞的都几十亿的大表,索引一个个加,每次都全表扫,感觉有很长时间的无意义等待,如果能并行就好了


这个应该和oms有关系 oms目前使用旁路导入不支持并发 你可以自己测试一下ob直接使用语句的方式旁路导入看看 是支持并发的