oracle - 30个线程的Nifi executeSql非常慢
问题描述
我们正在使用 HDF 从 oracle 获取大量数据。我们有一个 generateTableFetch 来创建 8000 条记录的分区,这些记录创建如下查询:
Select * from ( Select a.*, ROWNUM rnum FROM (SELECT * FROM OPUSER.DEPENDENCY_TYPES WHERE (1=1))a WHERE ROWNUM <= 368000) WHERE rnum > 361000
现在这个查询需要将近 20-25 分钟才能从 oracle 返回。
我们做错了什么或者我们可以做的任何配置更改。
Nifi 使用 jdbc 连接,因此是否有任何 oracle 端配置。
此外,如果我们以某种方式向查询示例 / parallel(c,2) /添加并行提示。这会有帮助吗?
解决方案
我猜您使用的是 Oracle 11(或更低版本)并已选择Oracle
数据库类型。由于 LIMIT/OFFSET 直到 Oracle 12 才引入,NiFi 使用带有 ROWNUM 的嵌套 SELECT 方法来确保数据的每个“页面”都包含唯一值。如果您使用的是 Oracle 12+,请确保改用Oracle 12+
数据库适配器,因为它可以利用 LIMIT/OFFSET 功能,从而加快查询速度。还要确保您有适当的索引来帮助执行查询。
从 NiFi 1.7.0 开始,您还可以考虑设置该Column for Value Partitioning
属性。如果您有一个DEPENDENCY_TYPES
分布相当均匀的列(可能是您的列),并且相对于您的Partition Size
属性值不是“太稀疏”,GenerateTableFetch 可以使用列的值而不是 ROWNUM 方法,从而加快查询速度。有关更多详细信息,请参阅NIFI-5143和 GenerateTableFetch 文档。
如果您需要向 JDBC 会话添加提示,那么从 NiFi 1.9.0 开始(有关更多详细信息,请参阅NIFI-5780),您可以将查询前和查询后语句添加到 ExecuteSQL。
推荐阅读
- ios - 使用动态 url 深度链接 iOS
- ios - Actionscript netStream 用 ios 播放 mp4
- apache - 有条件的 apache 重写
- http - 从 webdav 服务器下载文件
- python - openCV:cv2.VideoCapture(0) 和 cv2.VideoCapture(-1) 的问题
- jekyll - 在 Jekyll 中按类别显示语言过滤的帖子
- protractor - 每次在量角器中打开浏览器时如何访问onPrepare中的功能
- python - 将 QMessageBox 设置转移到 Python 中的单独类
- python - PyAudio 在 Raspberry Pi 上引发警告
- excel - Vlookup 用分号分隔的多个值