性能优化处理1.15亿条记录插入到Oracle



我有一个需求,我正在读取一个大小为19 GB的Unix文本文件,并且有大约1.15亿个记录。我的Spring Batch (Launcher)被Autosys和Shell脚本触发,一旦文件被放置在该位置。

最初在执行这个进程时,大约需要72小时来读取,处理(Null检查和日期解析)并将数据写入Oracle数据库。

但是经过某些配置更改,如使用节流限制,任务执行器等,我能够将执行时间减少到目前的28小时。我需要这个过程是在4小时内完成,也,使用SQL加载程序单独我在35分钟内完成的工作。但是我只能使用spring Batch。

谁能告诉我是否有可能在不到4小时内完成它使用春季批,什么是最好的方法来实现这一目标?

在我参与的一个项目中,我们必须将50亿条记录从db2传输到oracle。具有相当复杂的转换逻辑。在转换过程中,数据在不同的文件中保存了大约4次。我们能够在oracle数据库中插入一行大约50,000条记录的数据。从这个角度来看,在4小时内完成似乎是可行的。

你没有说明你的瓶颈在哪里,但这里有一些想法。

  1. 并行化——你能把文件分割成可以并行处理的块吗,比如我们作业的几个实例?
  2. chunksize -当写入oracle
  3. 时,我们使用了5000到10000的块大小。
  4. 删除不必要的数据解析,特别是日期/时间戳解析——例如,我们的数据中有很多时间戳,但它们与处理逻辑无关。由于我们必须在处理过程中多次从文件中读取和写入它们,因此我们不进行解析,只保留字符串表示形式。此外,很多这样的时间戳都有特殊的值,如1.1.0001 00:00:00.000000或31.12.9999 23.59.59 000000,我们使用LD或HD(用于低日期和高日期)来表示它们。

HTH .

最新更新