日期:2014-05-16 浏览次数:20485 次
清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引。
问题来了,这么大记录量的表,根据date_created字段删除记录,而且还没有索引,难度肯定非常大。enl.ibd文件大小29G大小,磁盘剩余空间32G,两者差距比较小。
[mysql@xxxx-xxx ide]$ ll -h enl.ibd
-rw-rw---- 1 mysql mysql 29G Aug 30 07:21 enl.ibd
方案策划中,大概准备采用shell命令。
虽然date_created 没有索引,但是我们做过实验
mysql> select * from enl where date_created < "2013-01-01 00:00:00" limit 1000;
......
1000 rows in set (0.00 sec)
看来执行效果还不错,那再试下delete效果
mysql> delete from enl where date_created < "2013-01-01 00:00:00" limit 1000;
Query OK, 1000 row affected (2.00 sec)
看起来可以每次删除1000条,写脚本delete吧
for ((i=0;i<1000000;i++));do mysql -uroot -e 'use iden;delete from enl where date_created < "2013-01-01 00:00:00" limit 1000;';done
等delete操作完成之后,找业务低峰期执行 alter table enl engine=innodb;来释放磁盘空间。