You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgres JDBC驱动自适应取数内存溢出及配置maxResultBuffer后仍报错问题求助

Postgres JDBC驱动自适应取数内存溢出及配置maxResultBuffer后仍报错问题求助

我最近遇到个头疼的问题:用Postgres JDBC驱动查询一张单条数据最大约50MB的表,没做内存限制的时候,驱动会在本地缓存大量数据,哪怕JVM的Xmx设置得很充足,还是会出现OOM。

为了限制驱动的内存使用,我尝试把内存上限设为1GB,同时调小了缓存相关的配置——按说单条数据才50MB,这个配置应该完全够用,但现在驱动反而抛出异常了。

我用的JDBC连接配置是:

jdbc:postgresql://localhost/dbname?maxResultBuffer=1G&adaptiveFetch=true&adaptiveFetchMaximum=2&defaultRowFetchSize=1

异常是在PGStream的这段代码里触发的:

if (resultBufferByteCount > maxResultBuffer) {
    throw new PSQLException(GT.tr(
        "Result set exceeded maxResultBuffer limit. Received:  {0}; Current limit: {1}",
        String.valueOf(resultBufferByteCount), String.valueOf(maxResultBuffer)),PSQLState.COMMUNICATION_ERROR);
}

我打了断点查看,数值如下:

  • value = 41155480
  • resultBufferByteCount = 1021091718
  • maxResultBuffer = 1000000000

看得出来配置是生效的,fetch size相关的参数也确实被驱动读取到了,但它还是会读取超出内存限制的数据量。

有没有大佬知道我是不是漏了什么关键配置?麻烦指点一下,谢谢!

(环境:postgresql 42.5.1,java 17.0.5,hikaricp 5.0.1,最大连接数设为1)

备注:内容来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:47:31