当前位置: 首页 > news >正文

为什么执行了删除语句后mysql内存无变化?

mysql有InnoDB 存储引擎MyISAM 存储引擎

该问题主要出现在InnoDB 存储引擎中,MyISAM 执行delete命令会直接删除记录并释放空间

InnoDB 存储引擎在

  • 执行 delete 命令时,InnoDB 并不会立即从磁盘中擦除数据,而是通过以下步骤处理:

    1. 标记删除:将记录标记为“已删除”,并保留在存储页中。

    2. Purge 线程清理:后台的 Purge 线程异步回收被标记的记录空间,但这些空间仍保留在表中供后续插入重用,不会立即释放给操作系统

    3. MVCC 支持:已删除的记录可能仍对未提交的事务可见(通过 Undo Log 实现多版本控制)。

  • 数据残留风险

    • 被删除的数据在磁盘文件中仍可能以碎片形式存在,直到被新数据覆盖。

    • 通过工具(如数据恢复软件)可能恢复未覆盖的残留数据。

在 InnoDB 中,默认情况下删除的数据并不会立即从磁盘擦除,而是通过标记删除和后台清理机制延迟释放空间。

如果想快速释放空间

可以手动执行 OPTIMIZE TABLE 

OPTIMIZE TABLE your_table; -- 对 InnoDB 表会重建文件

强制重建表,回收碎片空间(适用于 DELETE 后的清理)

但是执行该命令有一定风险

1,表锁

重建表和索引需要复制数据,可能导致长时间锁定。

2,高资源消耗

  • I/O 压力
    重建表需要大量磁盘读写,可能导致I/O瓶颈,影响其他查询性能。

  • CPU 和内存占用
    数据排序和索引重建会消耗大量计算资源,可能拖慢整个数据库。

3,数据损坏缺失风险

  • 操作中断
    若在优化过程中发生服务器崩溃、断电或强制终止进程,可能导致表损坏。

  • 文件系统错误
    在复制或替换表文件时,若文件系统出现错误,可能破坏数据完整性。

相关文章:

  • 介绍下Nginx的作用与请求转发机制
  • 初识c++
  • 【Java学习笔记】克隆对象
  • 【HCIA】NAT Server
  • mysql约束
  • RocketMQ 存储核心:深入解析 CommitLog 设计原理
  • UARA串口开发基础
  • PCB硬件电路设计_pcb布线设计
  • SpringAI集成本地部署DeepSeek大模型服务(Ollama)
  • Android开发,实现一个简约又好看的登录页
  • 深入理解java线程池
  • [RoarCTF 2019]Easy Calc 详解
  • 空洞/膨胀卷积
  • clangd-vscode配置
  • 网络安全之红队LLM的大模型自动化越狱
  • LinuxAgent开源程序是一款智能运维助手,通过接入 DeepSeek API 实现对 Linux 终端的自然语言控制,帮助用户更高效地进行系统运维工作
  • 遗传算法实现单货架库位优化
  • 在Linux系统中安装Anaconda的完整指南
  • vue3代码规范管理;基于vite和vue3、 eslint、prettier、stylelint、husky规范;git触发eslint校验
  • JavaWeb:vueaxios
  • 跟着京剧电影游运河,京杭大运河沿线六城举行京剧电影展映
  • 泽连斯基承认乌情报部门刺杀俄军高官
  • 苏州一季度GDP为6095.68亿元,同比增长6%
  • 第五届全国医院人文管理路演在昆山举办:患者体验才是温度计
  • 伊朗港口爆炸已致46人死亡
  • 李祥翔评《孔子哲学思微》︱理性秩序与美学秩序的碰撞