文章预览
来源: https://juejin.cn/post/6931890118538199048 血一般的教训,请慎用 insert into select。同事应用之后,导致公司损失了近10w元,最终被公司开除。 事情的起因 公司的交易量比较大,使用的数据库是mysql,每天的增量差不多在百万左右,公司并没有分库分表,所以想维持这个表的性能只能考虑做数据迁移。 同事李某接到了这个任务,于是他想出了这两个方案 先通过程序查询出来,然后插入历史表,再删除原表 使用insert into select让数据库IO来完成所有操作 第一个方案使用的时候发现一次性全部加载,系统直接就OOM了,但是分批次做就过多io和时间长,于是选用了第二种方案,测试的时候没有任何问题,开开心心上线,然后被开除。 到底发生了啥,我们复盘一下 先来看第一个方案,先看伪代码 // 1、查询对应需要迁移的数据 List list = selectData(); // 2、将数
………………………………