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
相关产品推荐
相关产品推荐

