如何在ORDS中调整JDBC fetchSize以提升大数据集响应速度?
解决方案:调整ORDS的JDBC Fetch Size提升跨区域大数据集响应速度
完全可行,调整JDBC fetchSize到1000正是解决你当前问题的关键手段,以下是具体实现方式和注意事项:
一、两种调整方式
1. 单个端点针对性调整
如果只想让这个programs/端点使用更大的fetchSize,可将原有的source_type_collection_feed改为source_type_plsql,在PL/SQL逻辑中显式设置游标fetchSize:
BEGIN ORDS.define_handler( p_module_name => 'default', p_pattern => 'programs/', p_method => 'GET', p_source_type => ORDS.source_type_plsql, p_source => q'[ DECLARE v_cur SYS_REFCURSOR; BEGIN OPEN v_cur FOR SELECT * FROM v_programs; -- 设置fetchSize为1000 DBMS_SQL.SET_FETCH_SIZE(v_cur, 1000); -- 将游标结果序列化为JSON返回 ORDS.HTP.print(ORDS.JSON.serialize(v_cur)); END; ]', p_comments => 'Get a list of programs in the system.', p_items_per_page => 10000); COMMIT; END; /
2. 全局调整(所有端点生效)
如果你的多个ORDS端点都存在跨区域大数据集查询的需求,可直接修改ORDS的配置文件全局设置fetchSize:
- 找到ORDS安装目录下的
conf/ords.properties文件 - 添加或修改以下配置项:
jdbc.fetch.size=1000 - 重启ORDS服务使配置生效
二、注意事项
- 调大fetchSize会增加ORDS服务器的内存占用(每次拉取更多数据到内存缓冲区),1000的取值对于10000条数据来说属于合理范围,不会造成明显内存压力;若后续需要返回更大数据集,可根据ORDS服务器的内存配置适当调整上限。
- 验证效果:调整后往返请求次数会从1001次降低到10次,结合原数据库10秒的查询耗时,整体响应时间会大幅压缩至接近数据库查询耗时+少量网络传输时间。
内容的提问来源于stack exchange,提问作者Göran Paues
相关产品推荐
相关产品推荐

