RDS for MySQL 删除数据后空间没有减少处理方法

Posted 巫师的蜕变

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RDS for MySQL 删除数据后空间没有减少处理方法相关的知识,希望对你有一定的参考价值。

公司的程序和数据库部署在阿里云上,数据库使用的是阿里云的RDS,这天,经理在开发群中发了一个信息:

您的RDS实例rm********0oq的磁盘在过去一周平均使用率已超过80.0%,建议您对实例规格进行升级,以免磁盘资源不足,影响业务运行。详情请您查看您阿里云注册邮箱中的邮件。

1、首先我在Navicat上远程delete阿里云RDS数据表中的数据,

找到对应的表,然后delete 删除部分数据,单个表中的数据达五千万条,所以操作起来很笨重。(懊恼啊,为什么当初没有做分表操作。。)

按照产品经理的原话是“近期的任务不要删除,把以前的数据删掉!”

so,切割表的想法就打消了。还好我们的id是自增的,根据id删除了前面的数据。(每次也就几十万)

在复杂一些的就是根据任务字段删除数据。

删了一个小时,MD累死了,才删了几百万条数据,这时候我看了一下RDS的磁盘空间。

!!!!!!!!!!!!!!

MD,我奔溃啊,磁盘空间快满了,什么鬼啊!

吓得我赶紧喝了口82年的拉菲。

我打开百度(全球最大的中文搜索引擎),搜了一下本文的题目“mysql 删除数据后空间没有减少处理方法”,给出了方法:

https://help.aliyun.com/knowledge_detail/41720.html

我就迅速的登上了DMS,找到了表维护--》优化。然后开始庆幸,幸好及时发现,不然就满了。。满了。满了!真的是满了。。。。。。。在我优化的时候我看了一下实例状态:

你TM在逗我?

越优化越满了?什么情况啊。。。。。。。。。

再次打开了全球最大的中文搜索引擎。

给出下面的解决方案,使用命令行:

OPTIMIZE TABLE mission_picture

 这个命令执行时间比较长,可能是数据量较大的原因:但是结果并不理想,

执行结果失败 
note:Table does not support optimize, doing recreate + analyze instead 
error:The table \'mission_picture\' is full status:Operation failed

查询资料,解决方案有下面几个:

1、mysql本身的机制,delete后空间不会自动回收的,需要用optimize table回收。

2、alter table 表 ENGINE = \'InnoDB\';

     analyze table 表;

 

最后解决方法是:

 在DMS中的sql执行第一个方法。执行结束,依然提示“Table does not support optimize, doing recreate + analyze instead”

但是碎片率已经释放了。

算是完成了。。

以上是关于RDS for MySQL 删除数据后空间没有减少处理方法的主要内容,如果未能解决你的问题,请参考以下文章

在意外删除 AWS RDS 二进制日志后恢复 Debezium MySQL 连接器

删除 cassandra 数据后磁盘空间不减少

RDS for MySQL 通过分区归档历史数据

如何减少存储(缩减)我的 RDS 实例?

ali yun RDS for MySQL的基本功能

如何释放 MySQL Amazon RDS 实例中的空间