数据库上亿级数据清理方案,已Mysql为例,其他数据库思路一致

     在工作中,系统上线后数据日积月累将会使数据库表记录相当庞大。这时候需要我们进行部分数据迁移以及清理,下文讲讲述Mysql数据库上亿级表记录如何合理迁移以及清理。(其他数据库原理一致)

     在讲述之前,我们需了解删除的效率级别,DROP   >  TRUNCATE  >  DELETE

     TRUNCATE 速度快,DELETE 慢的原因是DELETE 需要额外的事务开销,防止删除异常时可及时回滚。然而TRUNCATE是事务不可回滚操作,也就意味着我们在线上实际操作时需在测试环境中反复校验咱们的语句以及条件的准确性,以及及时做好备份操作。

 

*********************************************************具体操作*************************************************************

第一步:新的表结构创建

CREATE TABLE TableName_old SELECT * FROM TableName WHERE 1=2;

第二步:将需要保留的数据迁移至新创建的表中

INSERT INTO TableName_old SELECT * FROM TableName t WHERE  t.xxx = xxxx

第三步:清理旧表数据

TRUNCATE TABLE TableName;

第四步:回迁数据(无需写条件,全表回迁)

INSERT INTO TableName SELECT * FROM TableName_old

第五步:校验数据回迁完整性以及删除废表

 

*********************************************************注意事项*************************************************************

注意事项:

1、整理数据之前确保停止服务,避免同时操作表数据产生死锁。

2、在执行第三步之前确保无外键依赖,如果有清取消。(业务处理结束需再次生效外键约束)

      #取消外键约束

      SET foreign_key_checks = 0;

3、设置SQL语句事务执行超时时间,可动态设置不需重启数据库,但需要重新连接数据库使设置生效。在使用结束以后还原之前的设置。

      #设置全局等待事务锁超时时间 (依据具体业务量设置,默认50)

      SET GLOBAL innodb_lock_wait_timeout=100;

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值