multithreading - Oracle sqlldr是否并行处理多个INFILE

标签 multithreading oracle sql-loader

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

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

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

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

    最佳答案

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

    直接加载“锁定”表/分区的高水位标记,并将数据放置在此处...因此-另一个进程无法并行锁定它。并行进程将必须等待当前负载完成。
    (我假设您不控制要加载到的分区。。如果可以控制它,则可以对其进行更好的细调。分区,如果您完全使用分区...)

    如果您“放弃”,并行处理将通过您提供的参数为您“自动”管理。

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

    关于multithreading - Oracle sqlldr是否并行处理多个INFILE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26770727/

    相关文章:

    python - Pandas、Concurrent.Futures 和 GIL

    java - 并发测试: test case scenario automatization

    php - oci_bind_by_name RETURNING INTO 截断值

    java - 在大量插入 SQLLDR 后获取或检索生成的 PK

    c - 编写线程安全 UNIX 代码的技巧?

    java - 多个线程处理矩阵的问题

    sql - 查找多次出现的情况

    java - 将 Eclipse(Java) 连接到 Oracle 数据库

    oracle - Oracle中的sqlldr错误

    java - 在 Linux 中作为其他用户选项运行