学习
实践
活动
专区
工具
TVP
写文章
  • 广告
    关闭

    2023新春采购节

    领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    聊聊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

    1.4K10

    使用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.1K10

    扫码关注腾讯云开发者

    领取腾讯云代金券