Oracle sqlldr是否并行处理多个INFILE

时间:2014-11-06 02:23:27

标签: multithreading oracle sql-loader

我正在使用sqlldr将数据加载到Oracle RAC(在Linux上),我正在尝试提高数据加载的性能。我正在使用'Direct Path'并且我为sqlldr设置了'parallel = true'。此外,由于我的服务器是多核的,因此默认情况下多线程设置为true。

现在,我正在考虑将每个服务器上的输入文件拆分为多个块,并将它们并行加载。我了解到可以在sqlldr的控制文件中列出多个INFILE文件。我的问题是:

  • 如果我在一个控制文件中列出几个INFILE文件,并启动一个 sqlldr实例,它是并行处理文件还是按顺序执行它们?

因为我的另一个选择是并行启动与每个服务器上创建的块数一样多的sqlldr实例,而每个sqlldr实例都有自己的控制文件,只列出一个INFILE文件。但是,如果sqlldr按顺序处理多个INFILE文件,则此选项才有意义。

1 个答案:

答案 0 :(得分:1)

由于您使用的是“直接加载”,因此无法将其并行化。

直接加载“锁定”表/分区的高水位线,并将数据放在那里......因此 - 另一个进程无法并行锁定它。并行进程必须等待当前负载完成。 (我假设您不控制加载的分区..如果您可以控制它 - 您可以为它获得更好的粒度调整..但通常加载的数据不会分成文件,因为它将在分区,如果您根本使用分区...)

如果你“放弃”,那么并行将通过你给出的参数“自动”管理。

但是 - 我建议你继续使用“直接加载”,因为它可能比任何其他加载方法快得多(尽管它的锁定非常“大”)。