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

某日收到数据库服务器磁盘报警超过75%,突然想到架构师让每月清理一次流水表这个月还没有清理,于是在18:00提交变更申请清理上个月之前的数据。
执行操作为:
mysql> delete from st_event_water where create_time < “2022-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;
在清理的时候会产生和原表一样大小的临时表,通知相关人员清理过程会产生磁盘报警以及从库延时报警,待完成后磁盘空间释放报警解除。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值