失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 记一次delete MySQL数据释放磁盘空间

记一次delete MySQL数据释放磁盘空间

时间:2024-07-17 14:07:40

相关推荐

记一次delete MySQL数据释放磁盘空间

某日收到数据库服务器磁盘报警超过75%,突然想到架构师让每月清理一次流水表这个月还没有清理,于是在18:00提交变更申请清理上个月之前的数据。

执行操作为:

mysql> delete from st_event_water where create_time < “-12-01”;

一共三张表,删除了大约1000w条数据的样子,删除后查看发现磁盘空间使用率成了96%,原来删除数据期间产生了大量的binlog,于是紧急修改binlog保留时间为1天,删除binlog释放磁盘空间

mysql> set global expire_logs_days=1;

mysql> flush logs;

此刻再次查看磁盘空间发现依然是76%使用率

查看磁盘碎片情况

data_free即为磁盘空洞,delete操作并不会释放磁盘空间

尽管一张表删除了许多数据,但是这张表表的数据文件和索引文件却奇怪的没有变小。这是因为mysql在删除数据(特别是有Text和BLOB)的时候,会留下许多的数据空洞,这些空洞会占据原来数据的空间,所以文件的大小没有改变。这些空洞在以后插入数据的时候可能会被再度利用起来,当然也有可能一直存在。这种空洞不仅额外增加了存储代价,同时也因为数据碎片化降低了表的扫描效率。

于是进行清理磁盘空洞

mysql> optimize table st_event_water;

在清理的时候会产生和原表一样大小的临时表,通知相关人员清理过程会产生磁盘报警以及从库延时报警,待完成后磁盘空间释放报警解除。

如果觉得《记一次delete MySQL数据释放磁盘空间》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。