数据库是每一个IT工程师必备的技能树,通常一些很小错误操作,尤其对生产环境带来很大的经济损失。收集网上大佬分享的数据库重大事故,警示自己,与君共勉。

本文要点:
1.Insert into select语句引发的生产事故

1.Insert into select语句引发的生产事故

复制表结构和表数据先参考文献:select into from 和 insert into select 的用法和区别

前言:
        Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网络I/O,决定采取别的方法进行实现。通过在Baidu的海洋里遨游,他发现了可以使用insert into select实现,这样就可以避免使用网络I/O,直接使用SQL依靠数据库I/O完成,这样简直不要太棒了。然后他就被开除了。

事件经过:
        由于数据数据库中order_today数据量过大,当时好像有700W了并且每天在以30W的速度增加。所以上司命令xxx将order_today内的部分数据迁移到order_record中,并将order_today中的数据删除。这样来降低order_today表中的数据量。
  由于考虑到会占用数据库I/O,为了不影响业务,计划是9:00以后开始迁移,但是xxx在8:00的时候,尝试迁移了少部分数据(1000条),觉得没啥问题,就开始考虑大批量迁移。

  • 在迁移的过程中,应急群是先反应有小部分用户出现支付失败,随后反应大批用户出现支付失败的情况,以及初始化订单失败的情况,同时腾讯也开始报警。
  • 然后xxx就慌了,立即停止了迁移。本以为停止迁移就就可以恢复了,但是并没有。后面发生的你们可以脑补一下。

解决方案:
网友 大鸡腿童鞋:走普通做法就可以了,查询完再插入。越是花里花哨越多问题。通过外部工具或代码来做归档最好。

作者:不一样的科技宅
链接:https://juejin.im/post/5e670f0151882549274a65ef
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


 评论

联系我 | Contact with me

Copyright © 2019-2020 谁知你知我,我知你知深。此恨经年深,比情度日久

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议