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”

    但是碎片率已经释放了。

    算是完成了。。

  • 相关阅读:
    Go:错误处理
    Go:闭包
    Go:内置函数
    Go:函数、defer
    mongodb 在PHP中常见问题及解决方法
    PHP 下载apk文件
    阿里云短信服务 PHP
    tp 创建文件并写入数据
    微信小程序中的加载更多(即列表分页)
    百度地图api逆地址解析 PHP
  • 原文地址:https://www.cnblogs.com/zjiacun/p/8515909.html
Copyright © 2011-2022 走看看