数据表复制(只复制了表结构和数据,丢失了主键和索引)
背景
一次上线过程,搞了一个现网事故,
过程是这样子的,
部署之后,要做一些数据验证,于是对表做了一个备份,计划备份好后,测试一把,再把数据还原。
于是用的是
create table xx01 as select * from xx;
嗯,看到表和数据都被复制了,感觉很美好,
等测试完,
再把 xx drop 掉,把 xx01替换成 xx, 一切仿佛都没发生过,完美。(真是个大聪明)。
于是就这样,上线完了。
--------------------- 分割线 ---------------------
第二天早,现网炸了!
页面很慢,各种响应超时?
什么情况?昨晚的上线应该也不至于造成这么大的影响啊?
就只是改了一个小模块,怎么就整个系统都瘫了呢?
但很肯定的一件事就是昨天的更新部署引发的问题,
但为什么会引起这么大的事情呢。
分析
1、上线了一个导入功能,这个导入功能,导入的数据量动辄数十万一个文件,并且使用的用户比较多。
就是产生了一个相对高并发的一个场景。
2、create table xx01 as select * from xx; 这个语句,只复制了表结构和表数据,
它的主键,唯一键,索引等它是不复制的!!
导致这个表的数据量上来之后,因为索引丢失之后,它的查询性能急剧下降,
又因为是一个高频接口,导致接口积压,越来越慢,最后整个系统都拖垮了。
教训
1、表复制要注意,在现网也轻易不要做这种操作。。。
create table xx01 as select * from xx; 这个语句,只复制了表结构和表数据,不复制主键和索引!
有没有其它的办法可以复制主键和索引呢?
在达梦下面,试了好几种都不太行,等等看吧。。。现状就是记得不能用这种方式去做表复制就是了。
大意了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性