zoukankan      html  css  js  c++  java
  • 项目中遇到的数据迁移问题?

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

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

    当时考虑的方案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

  • 相关阅读:
    学习Swift -- 构造器(上)
    学习Swift -- 继承
    学习Swift -- 数组(Array)
    学习Swift--下标脚本
    学习Swift--方法
    学习Swift--属性
    Swift 类和结构体的简单认识
    dedecms代码研究二
    dedecms代码研究一
    PHP isset()与empty()的区别
  • 原文地址:https://www.cnblogs.com/XiDaPuBen/p/12820953.html
Copyright © 2011-2022 走看看