我正在开发一个在其他 PL/SQL 过程中调用的存储 Java 过程。在 JAVA 代码中,我需要选择返回 ~5000 行的 ~500 列并处理数据(使用 StAX 生成 XML 到大小约为 8 MB 的 BLOB)。该处理仅具有线性复杂性,并且没有时间或内存昂贵的操作。
当我在桌面上运行代码并连接到远程数据库服务器时,它会在大约 3 秒内运行。当我将程序作为存储的 Java 过程部署到数据库时,它会在大约 14 秒内运行。
我不明白为什么。我希望代码在具有内部 JDBC 驱动程序的数据库上运行得更快,因为没有数据往返。我在代码中所做的唯一更改是我获得连接的方式。
有趣的是,Oracle DB 上的代码消耗的内存明显减少,但是当我增加内存限制时,它并没有帮助。
任何想法怎么可能是问题?
我不能做的是:
- 使用标准的 DB-XML 映射工具,因为它不仅仅是简单的转换,它背后还有一些业务逻辑
- 将算法重写为纯 PL/SQL,因为使用了许多面向对象的功能,并且在程序上编写和维护它太难了
- 将代码放到应用程序服务器上,因为它只是 PL/SQL 中数据处理的一个步骤