首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

聊聊jdbc的大数据量读写相关异常的防御措施

不同的数据的jdbc driver实现可能不一样,比如pg的jdbc driver是会将maxRows和fetchSize做比较,取最小的值做为limit参数值来去查询。...3.fetchSize jdbc提供fetchSize参数来设置每次查询按fetchSize分批获取。不同的数据库的jdbc driver实现不一样。...比如mysql需要url设置useCursorFetch=true,且设置了statement的fetchSize,这样才真正的批量fetch,否则是全量拉取数据。...比如pg的话在executeQuery方法默认会拉取第一批fetchSize的数据并返回,之后resultSet的next()方法根据需要再去fetch 使用fetchSize来避免OOM的话有个限制条件...如果不是边遍历边处理,还是把结果集循环添加到list中返回,在不是reactive模式的编程范式下,这个fetchSize也就失去效果了,因为最后你还是在内存中堆积所有的数据集再去处理,因此终究会有OOM

2.3K10

使用MySQL Server Side Cursor解决查询数据量过大造成OOM

二、MySQL Server Side Cursor 2.1 使用 要使用MySQL Server Side游标需要满足下面条件: 必须是select语句 设置了fetchSize>0 在mapper...服务器边的游标则是mysqlclient一次从自己的接受缓存读取fetchSize个记录(如果buffer不够fetchSize也没关系,因为Server一直在向这个buffer 刷新数据)。...mysqlclient获取fetchSize个记录放到mysqlclient的游标内部的数组里面,游标获取的时候是从数组里面获取数据,如果数组为空了,在向buffer获取fetchSize个记录。...三、总结对比 服务器边的游标的使用的确可以减少server端阻塞,这是因为client一次从接受缓存读取fetchsize个记录,所以大概率情况下给Server写入腾出了空间。

1.6K10

MyBatis Plus 解决大数据量查询慢问题

常规查询: 一次性读取 100w 数据到 JVM 内存中,或者分页读取 流式查询: 建立长连接,利用服务端游标,每次读取一条加载到 JVM 内存(多次获取,一次一行) 游标查询: 和流式一样,通过 fetchSize...一次查询指定 fetchSize 的数据,直到把数据全部处理完。...big_data_search bds ${ew.customSqlSegment} ") @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize...big_data_search bds ${ew.customSqlSegment} ") @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize...ResultSet.SCROLL_INSENSITIVE:结果集的游标可以上下移动,当数据库变化时,当前结果集不变 ResultSet.SCROLL_SENSITIVE:返回可滚动的结果集,当数据库变化时,当前结果集同步改变 fetchSize

36830
领券