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

为什么执行了删除语句后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,数据损坏缺失风险

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

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

http://www.xdnf.cn/news/2829.html

相关文章:

  • Vue 2 和 Vue 3 中 Vue 实例变量方法的功能差异对比,包含关键方法的详细说明和表格总结
  • 硅基计划 学习总结 拾
  • 软考-软件设计师中级备考 7、算法设计与分析
  • 如何理解promise 续二
  • C语言学习路线
  • 国内外都有哪些医药医学方面的指南检索数据库?
  • 模电——PN结
  • TensorRT详解
  • 如何在idea中编写spark程序
  • java快速幂
  • 从传统制造到智能工厂:MES如何重塑电子制造业?
  • ship_plant船舶模型
  • QT事件Trick
  • 网络》》ARP、NAT
  • 【题解】CF2096F
  • JAVA中Spring全局异常处理@ControllerAdvice解析
  • 【前端】跟进新趋势- PWA WebAssembly
  • 医院信息管理系统全解析
  • 第六章:Tool and LLM Integration
  • DDS(数据分发服务)原理详解
  • 第三章:Configuration Management
  • 测试用例设计的完整过程详解:从需求到覆盖的实战指南
  • Python 中调用方法内部定义的类详解(类在方法中的各种操作)
  • 3、CMake语法:制作和使用动态库和静态库
  • 现代c++获取linux所有的网络接口名称
  • Java大师成长计划之第6天:Java流式API(Stream API)
  • Kubernetes基础与部署实战
  • shell(3)
  • windows中无法关闭mysql57服务
  • 深度学习近十年的汇总