为什么从 Oracle 外部表返回数据这么慢?

Why so slow returning data from Oracle external tables?

我们是一家 ETL 商店,大量使用外部 tables。通常,这些 tables 被查询到填充的暂存 tables。我对从外部 table 查询 return 数据所需的时间感到惊讶。

通常在 returned 任何结果之前会有大约 15 秒的延迟。即使在数据文件不包含数据和数据文件不存在的情况下也是如此。延迟似乎与文件中的行数无关。

我正在登录数据库服务器本身,外部 table 数据文件位于该服务器上。

这是预期的行为吗?

文件系统操作(ls,vim)至少在较小的文件上没有延迟。

本地磁盘上的所有文件。

甲骨文 12.1.

Oracle Linux 服务器版本 6.6

我建议查看或查看 Oracle 12.2 发行说明。有一个适用于 Exadata 的大数据设备固件 (22911748) 的补丁和一个在 12.2 中进行的修复。

它解决了一个特定于访问外部 table 的视图。您可能会受到此视图的影响。视图名称为LOADER_DIR_OBJS,用于查询外部table指向的目录。

我们的客户 运行 遇到了非常相似的问题,Oracle 建议安装包含补丁的 12.2 版本。

因此,我们目前正在测试 12.2 版本。任何时候读取外部 table 时,它都必须能够访问 LOADER_DIR_OBJS 系统视图。通常,性能不佳来自此视图,它访问 SYS.OBJ$ 和 SYS.X$DIR 系统对象,因为查询计划不是最佳的。有些人找到了变通办法。 (请参阅 Oracle 解决方法文档 ID 2034938.1 以查看它是否适用于您)。