【原】阿里云RDS数据库超大表分区实现

[背景]

  1. 一张数据量约1亿条数据的表,由于最初设计疏忽,未做分区,现需要根据创建时间字段来做分区;
  2. 业务要求,该表仅需要保留3个月的数据,数据量在9千万~1亿3千万左右;
  3. 业务允许短时间停机,10分钟左右;
  4. 该表数据,仅最近14天左右数据会有更新操作,其余数据为统计查询;
  5. 原表创建时间用的timestamp,无法作为分区字段;
  6. ID为主键;

[RDS信息]

  1. 数据库类型:MySQL 5.6;
  2. CPU:8核;
  3. 最大连接数:8000;
  4. 最大IOPS:12000;

[解决思路]

  1. 创建新的分区表,与原表保持同样的结构,将创建时间类型改为datetime;
  2. 分批写入历史数据,每次1000万,大约7分钟时间;(查出最近14天会更新的最小ID,这批数据停机插入!
  3. 停机插入最后的14天数据;
  4. Rename表,重启服务;

insert my_table_temp
select *
  from my_table
 where id>= 150000000
   and id< 160000000;
RENAME TABLE my_table TO my_table_to_delete;
RENAME TABLE my_table_temp TO my_table ;
DROP TABLE my_table_to_delete;

 

 

[总结]

这种方案还是有些限制的,比如能段时间停服务,且有明确历史数据不会更新,否则可能需要添加trigger来解决了。

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) 
https://www.cnblogs.com/cooqer/p/9139873.html
出自【Cooqer的博客】

转载于:https://www.cnblogs.com/cooqer/p/9139873.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值