项目中遇到的数据迁移问题?

项目中遇到的数据迁移问题?

答:有一个需求是将每天支付数据表需要做备份(迁移到)项目备用库支付数据表中,每天的数据量新增的数据量特别大

当时考虑的方案1:通过程序来实现“先查询 再插入”的方法来完成,这个方案的缺点是需要消耗大量的网络I/O时间。

方案2:使用的Insert into select 方法,这个方法可以避免网络I/O消耗的时间。

采用的方案2的方法,当进行开始执行迁移的过程中,运维群就有人反映支付出现问题,然后就是大批量的开始出现支付失败,最后停止迁移,问题还是没有解决。

经排查事故原因:pay_today的加锁规则,这个表的加锁规则是逐步锁(扫描一个锁一个),当MySQL 执行Insert into pay  select * from pay_today where today_time = 'xxxx-xx-xx'

的时候会自上而下进行扫描,随着扫描记录的增多锁定记录也在增多,最终就是锁表了,

解决方法:由于查询条件会导致全表扫描,怎么样才能避免全表扫描,就是需要添加索引就OK了,由于走索引查询就不会导致扫描全表而锁表了,只会锁符合条件的记录。

本例中:Insert into pay  select * from pay_today where today_time = 'xxxx-xx-xx' 是给today_time字段加索引就可以了

 

 

 

 

 

原文链接:https://juejin.im/post/5e670f0151882549274a65ef

posted @ 2020-05-03 10:14  慕容天白  阅读(343)  评论(0编辑  收藏  举报