大数据量插入如何提高效率?

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】
【问题描述】 一张表大概80个字段,插入3000万记录.开了25并行.大概要12-15分钟.有什么办法可以优化下吗?
【复现路径】问题出现前后相关操作
【问题现象及影响】

【附件】

搜一搜其他帖子,有优化建议
jdbc url上开启批量参数,重写批量,ps缓存相关参数打开。

cacheServerConfiguration=true
rewriteBatchedStatements=true
useServerPrepStmts=true
cachePrepStmts=true

当然代码也是要addBatch,executeBatch的

除了雨齐提供的调优方案,如果是使用ooceanbase4.0的话也可以试着看下关于并行导入的方案,具体还是需要看下实际应用场景。

https://www.oceanbase.com/docs/community-observer-cn-10000000000900958

你这种应该只是适合insert into select 这种并行吧
程序批量写入应该是不可行。

分区表:数据按分区,batch 导入,避免分布式事务,匀速导入。batchSize不宜过大
非分区表:batch 导入,最好限速,匀速导入,batchSize不宜过大

刚刚和相关负责同学确认了下,都可以的,哪怕hint标记错误也会由后端负责忽略

我现在测试环境是32c/128g 的配置。现在的语句如下 insert /*+ enable_parallel_dml parallel(32)/into b select * from a where xxx=’2023-03-01’耗时在900s 请问还有办法再优化吗? a表是分区表。张雨奇提到那几个参数应该是java里到吧?因为这一天的数据是在一个分区里,上面uniq提到的分区导入也没法用吧?

是 insert /*+ parallel(32) enable_parallel_dml */ into b select * from a where xxx=’2023-03-01’; 吧。确认下是否有标记错了

insert / *+ parallel(32) enable_parallel_dml * / into b select / *+ parallel(32) */ * from a where xxx=’2023-03-01’; 查询忘加并发了

方便的话也可以分享下并发导入方案的时间差

没用并发执行3000s都没结束.用了并发大概在700s左右

1 个赞