我正在使用sqlldr将数据加载到Oracle RAC(在Linux上),并且试图提高数据加载的性能。我正在使用“直接路径”,并且为sqlldr设置了“parallel = true”。而且,由于我的服务器是多核的,因此默认情况下多线程设置为true。
现在,我正在考虑将每个服务器上的输入文件拆分为几个块,然后并行加载它们。我了解到可以在sqlldr的控制文件中列出多个INFILE文件。我的问题是:
因为对我来说,另一个选择是并行启动与我在每个服务器上创建的块数量一样多的sqlldr实例,而每个sqlldr实例都有自己的控制文件,该控制文件仅列出一个INFILE文件。但是,只有在sqlldr顺序处理多个INFILE文件时,此选项才有意义。
最佳答案
由于您使用的是“直接加载”,因此无法并行化。
直接加载“锁定”表/分区的高水位标记,并将数据放置在此处...因此-另一个进程无法并行锁定它。并行进程将必须等待当前负载完成。
(我假设您不控制要加载到的分区。。如果可以控制它,则可以对其进行更好的细调。分区,如果您完全使用分区...)
如果您“放弃”,并行处理将通过您提供的参数为您“自动”管理。
但是-我建议您继续使用“直接加载”,因为它可能比现有的任何其他加载方法都快得多(尽管其锁定非常“大”)。
关于multithreading - Oracle sqlldr是否并行处理多个INFILE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26770727/