MySQL Delete 删数据后磁盘空间未释放的原因

作者:王文安 时间:2024-01-23 10:56:14 

目录
  • 问题描述

  • 解决方案

  • 问题分析

问题描述

在 MySQL 中使用 delete 语句删除数据之后,监控视图中可用的磁盘空间没有增加,磁盘使用率没有下降等等。

解决方案

delete 不释放空间是 MySQL 自身机制的原因,需要重建表才可以释放磁盘空间,可以参考的操作:

  1. 执行 optimize table ${table_name}。

  2. 如果是 InnoDB 的表,执行 alter table ${table_name} engine = innodb。

需要注意以下两个问题:

这两个命令都会重建表,尽量不要在磁盘空间紧张(>90%)的时候进行操作,先扩容磁盘,操作完之后再缩容。
这两个命令在开始和结束的时候都会尝试获取 metadata lock,所以尽量不要在业务高峰期执行。

问题分析

在 MySQL 的机制中,delete 删除的行只是被标记为删除状态,如果删除的行很多,整个数据页(innodb_page)的行都会被删除的时候,数据页也只会标记为删除,都不会真正的物理删除,而是一直占用,等待被复用。

例如:

MySQL Delete 删数据后磁盘空间未释放的原因

可以看到 delete 前后,data_length 并没有发生变化,但是 data_free 增加了很多。这说明数据虽然删了,但是并没有被释放,仍旧被 test1 表占用,只是显示处于 free 状态,以后再写入新数据的时候就可以直接复用,而不需要在申请新的磁盘空间了。

这个时候使用alter table test1 engine = innodb 看看效果:

MySQL Delete 删数据后磁盘空间未释放的原因

可以看到 data_length 和 data_free 都变成了空表的状态,仅有一个 innodb_page (默认 16k)。

PS:data_free 本身也可以用来评估表的空间碎片,当这个数字非常高的时候,可以考虑用同样的方法重建表,回收一部分磁盘空间。

来源:https://cloud.tencent.com/developer/inventory/2101/article/1688879

标签:MySQL,删数据,delete,磁盘空间
0
投稿

猜你喜欢

  • Golang通脉之流程控制详情

    2024-02-20 06:56:34
  • 使用Python为中秋节绘制一块美味的月饼

    2023-06-30 17:36:10
  • Python基础中的的if-else语句详解

    2023-03-14 16:05:23
  • Go中的条件语句Switch示例详解

    2024-05-09 10:11:25
  • python3.7.2 tkinter entry框限定输入数字的操作

    2021-02-22 14:40:36
  • 详解Python中Pyyaml模块的使用

    2021-08-19 08:18:23
  • 网页优化之加速图片显示(CSS Sprite)

    2007-09-29 21:39:00
  • 一篇文章教会你PYcharm的用法

    2023-06-30 14:18:56
  • Sqlserver 2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

    2024-01-27 10:14:51
  • asp正则表达式在网页处理中的应用四则

    2008-02-24 14:44:00
  • 解读python正则表达式括号问题

    2023-08-10 10:22:19
  • Vue日期时间选择器组件使用方法详解

    2024-05-02 16:35:27
  • Python改变对象的字符串显示的方法

    2022-11-10 17:16:12
  • MySQL数据库升级的一些"陷阱"

    2024-01-15 17:35:22
  • 网页栅格系统研究(4):技术实现

    2008-11-06 11:44:00
  • MySQL数据库中删除重复记录的方法总结[推荐]

    2024-01-13 07:13:45
  • JS实现动画中的布局转换

    2023-10-14 15:58:04
  • Appium+Python自动化测试之运行App程序示例

    2023-07-29 01:54:20
  • Django 2.0版本的新特性抢先看!

    2021-01-03 11:10:50
  • MySQL分区表的正确使用方法

    2024-01-29 01:51:26
  • asp之家 网络编程 m.aspxhome.com