博客
关于我
面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么?
阅读量:476 次
发布时间:2019-03-06

本文共 1214 字,大约阅读时间需要 4 分钟。

在使用MySQL InnoDB时,删除数据的操作可能会让人感到困惑:删除了数据之后,磁盘空间为什么不会减少?为什么数据文件的大小看起来没有变化?其实,这背后有着深刻的技术原理。让我带你一步步了解。

数据删除背后的原理

MySQL InnoDB采用B+树存储数据结构,数据是按页存储的。每个数据页包含多个记录。当我们执行DELETE操作时,实际上并不是物理删除数据记录,而是将其标记为“可复用”状态。这种标记让数据库知道这些记录可以被后续的插入操作复用,从而释放空间。

数据页的复用机制

在InnoDB中,数据被组织成数据页(称为"叶子节点")。每个数据页存储多个记录。当删除记录时,InnoDB会将其标记为可复用的位置。如果后续插入的数据键值在可用位置范围内(例如,插入的键值在已标记为可复用的记录的键值范围内),就会复用这些空间。如果不在范围内,则需要新建数据页,增加磁盘空间的使用。

删除操作的两种情况

  • 删除单条记录:标记该记录为可复用。
  • 删除整页记录:标记整个数据页为可复用。
  • 无论是哪种情况,磁盘文件的大小都不会立即减少,因为这些记录仍然占用了空间,只是被标记为可复用。只有通过优化操作(如OPTIMIZE TABLE或ALTER TABLE)才能真正释放空间。

    优化表空间

    为了有效管理数据库容量,可以使用以下方法:

  • OPTIMIZE TABLE:这个命令会扫描表中的记录,找出未使用的碎片,并将其移除。适用于MyISAM、BDB和InnoDB表。
  • ALTER TABLE重建表:通过重建表,可以快速恢复到较小的状态。尤其是在高版本MySQL(如5.6及以上)中,支持在线DDL操作,减少对业务的影响。
  • 在线DDL:解锁更高效的操作

    在高版本MySQL中,Online DDL让DDL操作不再是阻塞任务。通过使用ALGORITHM和LOCK选项,可以灵活控制操作方式:

    • ALGORITHM选项

      • INPLACE:直接修改表结构,不需要复制数据,适合频繁修改表结构的情况。
      • COPY:创建临时表,执行DDL操作后,数据重新导入临时表,适合需要数据一致性的场景。
      • DEFAULT:MySQL自动选择合适的算法。
    • LOCK选项

      • SHARE:允许读操作,禁止写操作。
      • NONE:允许读写操作。
      • EXCLUSIVE:禁止读写操作。
      • DEFAULT:默认锁机制,不建议使用。

    业务低峰期执行关键操作

    为了避免影响业务连续性,建议在业务低峰期执行容量优化操作。例如,使用OPTIMIZE TABLE或ALTER TABLE重建表。这些操作可以有效减少磁盘占用,但需要确保系统稳定运行。

    结论

    删除数据后,磁盘空间不减少的原因在于InnoDB采用标记清理机制。通过标记可复用空间,可以在不影响业务连续性的情况下优化表空间。同时,掌握OPTIMIZE TABLE和Online DDL等技术,可以更高效地管理数据库容量,提升系统性能。

    转载地址:http://xoqbz.baihongyu.com/

    你可能感兴趣的文章
    new和delete用法小结
    查看>>
    new对象时,JVM内部究竟藏了什么小秘密?
    查看>>
    new操作符的实现原理
    查看>>
    Next.js React Server Components 教程
    查看>>
    NextGen Mirth Connect XStream反序列化远程代码执行漏洞(CVE-2023-43208)
    查看>>
    next项目部署到服务器pm2进程守护
    查看>>
    nexus 介绍
    查看>>
    nexus上传jar
    查看>>
    Nexus指南中的更新强调集成和透明度的重要性
    查看>>
    Nexus指南已经发布
    查看>>
    Nexus(1):Nexus的安装与配置
    查看>>
    NFC技术:概述
    查看>>
    NFinal学习笔记 02—NFinalBuild
    查看>>
    NFS
    查看>>
    nfs mount 故障 mount.nfs: access denied by server while mounting 10.0.100.208:/backup_usb
    查看>>
    NFS Server及Client配置与挂载详解
    查看>>
    NFS 服务配置篇
    查看>>
    NFS共享文件系统搭建
    查看>>
    nfs复习
    查看>>
    NFS安装配置
    查看>>