返回顶部
首页 > 资讯 > 数据库 >MySQL delete删除数据后,释放磁盘空间
  • 615
分享到

MySQL delete删除数据后,释放磁盘空间

mysqldelete 2023-08-18 18:08:00 615人浏览 安东尼
摘要

当 Mysql 数据库服务删除部分数据后;有些情况下这些数据占用的存储空间会释放掉,有些情况这些存储空间则不会释放。以下是对这种情况的简单说明: 一、删除表|清空数据表 当执行删除数据表或者清空数据表的全部数据操作时,都会释放掉相应的磁盘存

Mysql 数据库服务删除部分数据后;有些情况下这些数据占用的存储空间会释放掉,有些情况这些存储空间则不会释放。以下是对这种情况的简单说明:

一、删除表|清空数据表

当执行删除数据表或者清空数据表的全部数据操作时,都会释放掉相应的磁盘存储空间

drop table table_name;truncate table table_name;

在MyISAM和InnoDB(innodb_file_per_table)存储引擎中,数据信息存在在单个文件中。删除表操作和清空数据表操作都会释放空间。

二、删除表数据

delete from table_name [where xxx];

使用delete删除的时候,mysql并没有把数据文件删除,而是将数据文件的标识位删除,没有整理文件,因此不会彻底释放空间。被删除的数据将会被保存在一个链接清单中,当有新数据写入的时候,Mysql会利用这些已删除的空间再写入。即,删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。

三、优化表空间

方法一:

optimize table table_name ;

当表数据被大量删除后,释放占用的空间就变得很有必要了。会明显的提高查询速度。使用 optimize table。被删除的记录被保持在链接清单中,后续的 insert 操作会重新使用旧的记录位置。您可以使用 optimize table 来重新利用未使用的空间,并整理数据文件的碎片。optimize 适用于InnoDB和MyISAM存储引擎。

查看表占用硬盘空间大小的SQL语句如下:(默认用M做展示单位)

SELECT TABLE_NAME, (DATA_LENGTH+INDEX_LENGTH)/1048576 as size_Mb, TABLE_ROWS FROM infORMation_schema.tables WHERE TABLE_SCHEMA='wow_tencent_1' AND TABLE_NAME='user'

方法二:

alter table tab_name  ENGINE = 'InnoDB';

注意:该操作执行的时候会把该表格先写入一个tmp临时表,所以磁盘剩余空间必须大于表空间,否则会执行失败。
方法三:
先将整个表的结构和数据导出来,删除整个表,再创建表,最后导入数据。生产环境不建议用这个方法

总结
通过从InnoDB存储空间分布,delete对性能的影响可以看到,delete物理删除既不能释放磁盘空间,而且会产生大量的碎片,导致索引频繁分裂,影响SQL执行计划的稳定性;

同时在碎片回收时,会耗用大量的CPU,磁盘空间,影响表上正常的DML操作。

在业务代码层面,应该做逻辑标记删除,避免物理删除;为了实现数据归档需求,可以用采用MySQL分区表特性来实现,都是DDL操作,没有碎片产生。

另外一个比较好的方案采用Clickhouse,对有生命周期的数据表可以使用Clickhouse存储,利用其TTL特性实现无效数据自动清理。

来源地址:https://blog.csdn.net/qq_33271461/article/details/131629400

您可能感兴趣的文档:

--结束END--

本文标题: MySQL delete删除数据后,释放磁盘空间

本文链接: https://lsjlt.com/news/374572.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL delete删除数据后,释放磁盘空间
    当 MySQL 数据库服务删除部分数据后;有些情况下这些数据占用的存储空间会释放掉,有些情况这些存储空间则不会释放。以下是对这种情况的简单说明: 一、删除表|清空数据表 当执行删除数据表或者清空数据表的全部数据操作时,都会释放掉相应的磁盘存...
    99+
    2023-08-18
    mysql delete
  • MySQL Delete 删数据后磁盘空间未释放的原因
    问题描述 在 MySQL 中使用 delete 语句删除数据之后,监控视图中可用的磁盘空间没有增加,磁盘使用率没有下降等等。 解决方案 delete 不释放空间是 MySQL 自身机制的原因,需要重建表才可以释放...
    99+
    2022-05-28
    MySQL 删数据 MySQL Delete数据 MySQL 磁盘空间未释放
  • MySQL5.7的表删除数据后的磁盘空间释放过程
    本篇内容介绍了“MySQL5.7的表删除数据后的磁盘空间释放过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • MySQLdelete删除数据后释放磁盘空间的操作方法
    目录一、删除表|清空数据表二、删除表数据三、优化表空间当 MySQL 数据库服务删除部分数据后;有些情况下这些数据占用的存储空间会释放掉,有些情况这些存储空间则不会释放。以下是对这种...
    99+
    2024-04-02
  • Mysql 删除数据,磁盘空间未释放解决办法
    公司的服务器上添加了硬盘监控,收到报警后,确认是mysql的文件占用空间比较大。于是,确认是哪个表占空间比较大后,删除了部分数据,服务器硬盘空间并没有释放掉,报警仍旧存在。 原因及解决办法: 使用de...
    99+
    2023-09-11
    mysql 数据库
  • mysql删除数据后怎么释放空间
    在MySQL中,删除数据并不会立即释放空间,而是将空间标记为可重用。如果您想要释放空间,可以使用OPTIMIZE TABLE命令来重...
    99+
    2024-05-21
    mysql
  • linux删除后未释放磁盘空间怎么解决
    当在Linux中删除文件时,文件系统不会立即释放磁盘空间。相反,它将把空间标记为可用,以便在以后存储新文件。 如果您使用的是ext2...
    99+
    2023-10-25
    linux
  • Mongodb 删除集合数据后释放磁盘空间的操作步骤
    目录删除集合Compact 集合分片集群删除集合 在MongoDB当集合数据占用比较多,对其进行清理后,集合存储空间下降,但磁盘空间并没释放,对于具有活动更新的集合来说,有一些可重用的空间是正常的。过多的可重用空间通常是...
    99+
    2023-11-21
    Mongodb释放磁盘空间 Mongodb 删除集合数据
  • oracle删除数据后怎么释放表空间
    在Oracle数据库中,使用DELETE语句删除数据只会删除数据行,而不会释放表空间。如果需要释放表空间,可以使用以下方法: 使...
    99+
    2023-10-26
    oracle
  • MySQL如何清理数据并释放磁盘空间
    在我们的生产环境中有一张表:courier_consume_fail_message,是存放消息消费失败的数据的,设计之初,这张表的数据量评估在万级别以下,因此没有建立索引。 但目前发现,该表的数据量已经达到百万级别,原因产生了大量的重试消...
    99+
    2023-10-27
    mysql 数据库 后端
  • es删除数据后空间不释放怎么办
    如果删除数据后,空间没有释放,可能是因为数据库中的数据并没有被真正删除,而是被标记为删除状态,数据仍然占用着空间。这种情况通常发生在...
    99+
    2024-04-09
    es
  • es删除数据后空间不释放如何解决
    解决这个问题有多种方法,其中一种方法是使用数据库的压缩功能来释放被删除数据所占用的空间。另外,可以定期对数据库进行备份和恢复操作,这...
    99+
    2024-04-09
    es
  • sqlserver怎么删除数据释放空间
    要删除SQL Server中的数据并释放空间,可以使用以下步骤: 打开SQL Server Management Studio(...
    99+
    2024-04-09
    sqlserver
  • oracle 删除用户后释放表空间
    有个用户占用大量存储。删除之后表空间没有释放。。。。 网上百度一番后: 先使用语句查询表空间大小 HWM。HWM说明参考:https://www.cnblogs.com/husam/p/6604437.html select...
    99+
    2019-10-09
    oracle 删除用户后释放表空间
  • Linux系统下rm删除/mv移动文件后磁盘空间没有释放
    目录 一、问题背景 二、问题描述 三、问题解决 1、检查服务器占用硬盘资源的文件 2、查看删除文件被占用的具体情况 3、如何让进程释放? 一、问题背景 由于生产环境所部署的服务版本太老,加上部署时磁盘规划不合理,导致近几天服务日志增加...
    99+
    2023-10-09
    linux 运维 服务器
  • linux系统删除文件之后服务器磁盘空间未释放处理
    一、通过rm 删除文件之后磁盘空间未释放,这是有进程仍在占用被删除的文件,要想真正的删除,只需要停止或重启进程,就会自动释放磁盘空间 二、应用进程很重要不能重启或停止,可以使用以下方法: 1.查看占用...
    99+
    2023-08-31
    linux 运维 服务器
  • 如何释放Ubuntu磁盘空间
    这篇文章将为大家详细讲解有关如何释放Ubuntu磁盘空间,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、移除不再需要的软件包如果你了解过 apt-get 或 apt&nbs...
    99+
    2023-06-13
  • mongodb怎么释放磁盘空间
    要释放MongoDB使用的磁盘空间,可以采取以下几种方法: 删除不必要的数据:通过删除不再需要的数据库、集合或文档,可以释放一部...
    99+
    2023-10-26
    mongodb
  • db2删除数据后表空间不释放怎么解决
    当删除数据后,表空间不会立即释放,这是因为DB2使用一种称为延迟空间释放(deferred space release)的机制来提高...
    99+
    2024-04-09
    db2
  • MySQL什么情况下删除数据会释放空间
    1、drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM 2、truncate table table_name 立刻释放磁盘空间 ,不管是 In...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作