在我的上一个项目中,我们正在处理需要读取大量数据(4000 万行)并且对于每一行我们需要触发一个流程的需求。作为设计的一部分,我们使用了多线程,其中每个线程使用具有可配置提取大小的 Jdbc 游标为给定分区提取数据。但是,当我们在 Prod 环境中的应用程序中运行该作业时,我们观察到它很慢,因为从数据库中查询数据需要更多时间。
由于我们在完成作业执行时的时间线非常紧迫,因此我们想出了一些解决方法,即数据从 SQL Developer 以 csv 文件格式导出并拆分为小文件。这些文件提供给作业。这大大提高了工作绩效,并有助于按时完成工作。
如上所述,我们使用手动步骤将数据导出到文件。如果这需要自动执行此步骤,例如从 Java App 执行导出步骤,以下选项之一(在网络上建议)将更快。
- sqlplus(Java 对 sqlplus 进行本机调用)
- sqlcl 并行假脱机
- 带有 utl_file 和 dbms_parallel_execute 的 pl/sql 过程
下面的链接提供了有关上述内容的一些详细信息,但没有统计信息。
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9536328100346697722
请注意,目前我无法访问此 Oracle 环境,因此无法从我这边进行测试。此外,我是一名应用程序开发人员,在数据库方面没有太多专业知识。因此,请向之前从事过类似用例或具有相关专业知识的人寻求建议。
提前致谢。