全量数据迁移,可能引发内存溢出问题

全量数据迁移,可能引发内存溢出问题

问题描述:当旧数据库数据量达到40w,全量迁移过程中出现内存溢出问题


每次新增2000条数据,当程序执行到4w条左右时,程序好像中断了,数据库一直在等待响应,过了一段时间后程序报错。
2026-05-06T00:11:42.935+08:00  WARN 36400 --- [hardingSphere-1] com.zaxxer.hikari.pool.ProxyConnection   : HikariPool-2 - Connection com.mysql.cj.jdbc.ConnectionImpl@78e94ac7 marked as broken because of SQLSTATE(08S01), ErrorCode(0)


相关截图:

https://img1.sycdn.imooc.com/climg/a057426909fa244c14450802.jpghttps://img1.sycdn.imooc.com/climg/9786d06909fa297513500728.jpg

尝试过的解决方式:我怀疑是长sql引起的oom

  1. 在每次插入操作之间添加休眠函数,降低并发量

  2. 降低每一批插入的数据量

1+2组合使用,数据全量同步完毕,我觉得主要是2起到了作用。

如果是企业级实战,在不修改mysql实例规格和相关配置的情况下,在业务端该如何处理这种情况?即使mysql实例规格能够支撑,这样高内存运行也挺危险吧。

请老师解答

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
Danny_Idea 2026-05-07 09:34:43
1.得限制每次读取的数据量,可以按照offset按需加载。
2.批量写入DB,这里只要是单线程批量写入db,其实不考虑中间睡眠也是可以的。
3.关注db层负载,从截图来看,该MySQL像是一个自己建的docker容器。这里是否默认容器配置导致MySQL该有的性能没有体现出来。正常企业级的MySQL产品写入性能没有这么弱。
  • 提问者 七訫 #1

    使用的就是offset,单线程,该mysql是老师提供的Docker Compose生成的。这个操作好像很消耗db内存,我担心的是在企业级环境如果有其他很消耗db内存的操作同时进行可能会出现问题(预防的方法是不是就是关注db层负载,再根据负载情况限制每次读取的数据量)

    2026-05-10 10:04:19
  • Danny_Idea 回复 提问者 七訫 #2

    对的 一般企业里面的db必须要配套高内存规格才行,否则分分钟内存打爆。

    2026-05-11 14:19:28
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java+大数据+AI架构师实战营
  • 参与学习       102    人
  • 解答问题       126    个

专为1–5年开发者,打造极具竞争力的人才培养方案,快速突破技术/职业瓶颈 “三高”架构托底,海量数据吞吐,实时计算,AI驱动及智能化开发 大型 “社交+电商” 平台从0到1全程贯穿,高复杂架构落地

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师