zoukankan      html  css  js  c++  java
  • 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”

    但是碎片率已经释放了。

    算是完成了。。

  • 相关阅读:
    安装nginx
    查看Linux内核
    Python学习总结11:获取当前运行类名和函数名
    Python学习总结10:获取shell输出结果
    Python学习总结9:目录操作方法汇总
    Python学习总结8:文件模式及操作方法汇总
    Python学习总结7:随机字符串和随机数
    Python学习总结6:字符串格式化操作及方法总结
    Python学习总结5:数据类型及转换
    Python学习总结4:字符串常量与操作汇总
  • 原文地址:https://www.cnblogs.com/zjiacun/p/8515909.html
Copyright © 2011-2022 走看看