我们正在考虑使用 Oracle REST Data Services返回一些大数据集,但响应时间确实很慢。
与 Oracle 数据库相比,我们将 ORDS 服务器安装在不同的区域,因此存在一些延迟。
我们有一个端点,需要为结果集提供一个包含 10000 个项目的大页面:
BEGIN
ORDS.define_handler(
p_module_name => 'default',
p_pattern => 'programs/',
p_method => 'GET',
p_source_type => ORDS.source_type_collection_feed,
p_source => 'SELECT * FROM v_programs',
p_comments => 'Get a list of programs in the system.',
p_items_per_page => 10000);
COMMIT;
END;
/
数据库执行时间其实很快,~10秒!主要问题似乎是由于 JDBC fetchSize 参数,许多往返是从服务器到数据库完成的。 The default value for this setting is 10 in Oracle ,在这种情况下导致响应缓慢。当访问页面大小为 10000 的端点时,完成了 1001 次提取:
我们想知道是否可以将 ORDS 中 JDBC fetchSize 的值从 10 更改为更高的值?如果我们可以将其更改为 1000,在这种情况下将会带来巨大的性能优势。
显而易见的解决方案是将 ORDS 服务器移至离数据库更近的位置,但在这种情况下我们无法这样做。
最佳答案
TL;DR - 将其添加到您的池配置中。
<entry key="defaultRowPrefetch">200</entry>
更长的答案 -
您的观察是正确的,我们没有偏离池/连接的默认 jdbc/ucp 设置,至少没有偏离 JDBC fetchSize。
但是。
这会变得更好。 我刚刚接受了一项增强请求,以使其更加智能。例如,随着模块及其 REST API 的页面大小增加,我们可以增加 jdbc 获取大小。另外,10 太低了,我们 REST API 的默认负载是 25 行,所以这是一个更合理的默认值。
您可以为池定义它。 将上面的输入键行添加到池配置 xml 文件中。
重新启动 ORDS 后,我可以轻松使用 REST API 进行测试,该 API 可返回 10,000 条记录。
我将提取大小设置为 200,需要 50 (+1) 次提取才能检索 GET 请求的 JSON 响应的 10,000 条记录。
关于oracle - 如何增加 ORDS 中的 JDBC fetchSize 并提高大型结果集的响应时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76367032/