zoukankan      html  css  js  c++  java
  • mysql删除数据(delete)之后如何释放磁盘空间

    问题背景

    收到运维提示数据库服务所在机器磁盘空间不足,在不满足迁移条件的情况下则需要进行冷数据本地备份删除操作,在delete掉冷数据发现磁盘空间并没有进行释放,表的ibd文件大小没有变化。

    问题分析

    InnoDB 数据库在使用 delete 进行删除操作的时候,只会将已经删除的数据标记为删除,并没有把数据文件删除,因此并不会彻底的释放空间。这些被删除的数据会被保存在一个链接清单中,当有新数据写入的时候,MySQL 会重新利用这些已删除的空间进行再写入。

    解决方法

    官方推荐可以使用 OPTIMIZE TABLE 命令来优化表,该命令会重新利用未使用的空间,并整理数据文件的碎片。

    OPTIMIZE TABLE 是指对表进行优化。如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR 、 BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化。这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费 。

    OPTIMIZE TABLE 命令只对 MyISAM 、 BDB 和 InnoDB 表起作用 。表优化的工作可以每周或者每月定期执行,对提高表的访问效率有一定的好处,但是需要注意的是,优化表期间会锁定表,所以一定要安排在空闲时段进行。

    操作如下

    先查看表的数据量及表ibd文件大小,然后进行冷数据备份删除。

    删除前:

    删除后并进行优化:

    OPTIMIZE TABLE tablename;
    

  • 相关阅读:
    leetcode 78. 子集 JAVA
    leetcode 91. 解码方法 JAVA
    leetcode 75. 颜色分类 JAVA
    leetcode 74 搜索二维矩阵 java
    leetcode 84. 柱状图中最大的矩形 JAVA
    last occurance
    first occurance
    classical binary search
    LC.234.Palindrome Linked List
    LC.142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/whiteY/p/15437915.html
Copyright © 2011-2022 走看看