因为开发人员上线的定时删除数据的程序没有执行,坑啊~ 导致了数据库表数据量达到10亿+。
开发人员的需求是只需保留一个月的数据即可,数据都是一些java日志。所以提了需求删除数据的数据库变更。
表数据统计如下:
因为该表的id为自增主键,也可以通过最大最小id进行行数的估算。
统计表大小,索引加数据文件一共600多G
本次的数据变更需求为删除11月17号之前的数据,即日志数据只需保留一个月即可。研发人员提供的SQL如下:即要删除6亿行数据,真的是一次大的变动。
delete from java_decision_detail_log where id < 694859879;
考虑到一次批量删除6亿数据是一个超大事务,执行完成后造成主从延迟。
索引考虑打散执行。
脚本如下,每次删除100万行数据,
这样删除在操作系统上看数据文件的大小没有减小反而增加,空间没有回收,如果想要回收需要进行重建或者alter语句就可以实现,这样按主键删除应该是把一个页上的数据都删掉,空间也许可以复用。