Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL 删除数据不释放内存

MySQL 删除数据不释放内存

作者头像
默存
发布于 2023-09-01 12:35:34
发布于 2023-09-01 12:35:34
75900
代码可运行
举报
文章被收录于专栏:默存默存
运行总次数:0
代码可运行

DELETE 不释放磁盘空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
delete from table_name

原因

使用delete删除的时候,MySQL并没有把数据文件删除,只会将已经删除的数据标记为删除,因此并不会彻底的释放空间。

这些被删除的数据会被保存在一个链接清单中,当有新数据写入的时候,MySQL会利用这些已删除的空间再写入。

删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。这些被标记为删除的记录,就是数据空洞。不仅浪费空间,还影响查询效率。

影响

MySQL 底层是以数据页为单位来存储和读取数据的,每次向磁盘读一次数据就是读一个数据页,每访问一个数据页就对应一次IO操作,磁盘IO访问速度是很慢的。

删除数据释放内存方式

1、使用 drop 或 truncate

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
drop table table_name;

truncate table table_name;

2、OPTIMIZE

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
optimize table table_name;

OPTIMIZE适用于InnoDBMyISAM存储引擎。使用OPTIMIZE TABLE来重新利用未使用的空间,并重新整理数据文件的碎片。

减少表数据与表索引的物理空间,降低访问表时的 IO。在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

3、Alter 命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alter table table_name engine=innodb;

4、导出导入

先将整个表的结构和数据导出来,删除整个表,再创建表,最后将旧表数据重新导入新表中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- mysqldump 导出表语法
mysqldump -u用户名 -p密码 -h主机 数据库 表

-- 例如
mysqldump -uroot -p sqlhk9 a --no-data

注意:这种方式会影响业务正常使用,不推荐。

清理 BinLog

要清理 MySQL 的 BinLog,可以按照以下步骤操作:

1、查看 binlog 文件列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SHOW BINARY LOGS;

将显示当前所有的 binlog 文件及其对应的文件名。

2、删除特定的 binlog 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PURGE BINARY LOGS TO 'binlog文件名';

这将删除指定文件名及其之前的所有binlog文件。

例如:如果要删除名为mysql-bin.000003binlog文件及其之前的所有文件,可以运行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PURGE BINARY LOGS TO 'mysql-bin.000003';

3、删除所有 binlog 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RESET MASTER;

将删除所有的binlog文件,并重新生成一个新的binlog文件。

注意:在清理binlog文件之前,确保已经备份了重要的binlog文件,并且了解清理binlog文件可能会影响到数据库恢复和复制的风险。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL删除数据空间没有释放-碎片
我们在做数据库运维的时候,经常会发现数据库批量删除数据之后,磁盘空间并没有立即释放或者说没有丝毫变化的场景。接下来我们就针对INNODB和MyISAM两款存储引擎分析一下。
Power
2025/03/01
2200
小弟问我:为什么MySQL不建议使用delete删除数据?
我负责的有几个系统随着业务量的增长,存储在MySQL中的数据日益剧增,我当时就想现在的业务方不讲武德,搞偷袭,趁我没反应过来把很多表,很快,很快啊都打到了亿级别,我大意了,没有闪,这就导致跟其Join的表的SQL变得很慢,对的应用接口的response time也变长了,影响了用户体验。
敖丙
2020/11/24
4.6K0
小弟问我:为什么MySQL不建议使用delete删除数据?
MySQL(十四)之数据备份与还原
前言   上一篇分享了关于MySQL事务的知识,在我们数据库中最重要的就是数据了,所以数据的备份就显的特别的重要!   为什么要备份数据?   在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分为以下几种:     硬件故障、软件故障、自然灾害、黑客攻击、误操作(占比例大)   所以, 为了在数据丢失之后能够恢复数据, 我们就需要定期的备份数据, 备份数据的策略要根据不同的应用场景进行定制, 大致有几个参考数值, 我们可以根据这些数值从而定制符合特定环境中的数据备份策略:     能够
用户1195962
2018/01/18
3.2K0
MySQL(十四)之数据备份与还原
Mysql 备份恢复与xtrabackup备份
  备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间。
惨绿少年
2019/05/24
15.7K0
实战Zabbix-Server数据库mysq的libdata1文件过大
今天我们的zabbix-server机器根空间不够了,我一步步排查结果发现是/var/lib/mysql/下的libdata1文件过大,已经达到了41G。我立即想到了zabbix的数据库原因,随后百度、谷歌才知道zabbix的数据库他的表模式是共享表空间模式,随着数据增长,ibdata1 越来越大,性能方面会有影响,而且innodb把数据和索引都放在ibdata1下。
DevinGeng
2019/04/09
1.2K1
MySQL删除数据的简单尝试 (r7笔记第98天)
在Oracle里面对于数据清理,如果是非分区表,目前我经常的处理思路是下面三个。 第一种是中规中矩,做好备份,然后开始清理,当然这种情况只是说明数据清理的部分,不考虑高水位线的影响。可以使用shrin
jeanron100
2018/03/19
8700
MySQL删除数据的简单尝试 (r7笔记第98天)
如何删库跑路?教你使用Binlog日志恢复误删的MySQL数据
开个玩笑,今天文章的主题是如何使用Mysql内置的Binlog日志对误删的数据进行恢复,读完本文,你能够了解到:
Rude3Knife的公众号
2020/01/16
2.2K0
如何删库跑路?教你使用Binlog日志恢复误删的MySQL数据
Mysql空间回收总结
MySQL 5.6中开始支持把undo log分离到独立的表空间,并放到单独的文件目录下;这给我们部署不同IO类型的文件位置带来便利,对于并发写入型负载,我们可以把undo文件部署到单独的高速存储设备上。增加了如下几个参数来控制该行为。
mingjie
2022/05/12
9900
Mysql备份系列(1)--备份方案总结性梳理
mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种备份方案: 一、binlog二进制日志通常作为备份的重要资源,所以再说备份方案之前先总结一下binlog日志~~ 1.binlog日志内容 1)引起mysql服务器改变的任何操作。 2)复制功能依赖于此日志。 3)slave服务器通过复制master服务器的二进制日志完成主从复制,在执行之前保存于中继日志(relay log)中。 4)slave服务器通常可以关闭二进制日志以提升性能。 2.binlog日志文件的文
洗尽了浮华
2018/01/23
3.3K0
MySQL 案例:Delete 删数据后磁盘空间未释放
在 MySQL 中使用 delete 语句删除数据之后,监控视图中可用的磁盘空间没有增加,磁盘使用率没有下降等等。
王文安@DBA
2020/08/28
11.4K0
MySQL 案例:Delete 删数据后磁盘空间未释放
MySQL面试宝典-文件篇
读取顺序:/etc/mysql/my.cnf>/etc/my.cnf>~/.my.cnf
CRMEB商城源码
2022/06/17
5830
关于mysql 删除数据后物理空间未释
[OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致。OPTIMIZE TABLE 是指对表进行优化。如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR 、 BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 [OPTIMIZE TABLE 命令来进行表优化。这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费] 。[OPTIMIZE TABLE 命令只对 MyISAM 、 BDB 和 InnoDB 表起作用]
明哥的运维笔记
2019/01/30
1.1K0
MySQL七:一文详解六大日志
「mysql数据库中日志是重要组成部分,记录着数据库运行期间各种状态信息」。主要有6类:
云扬四海
2022/09/26
1.4K0
MySQL数据库快问快答
今天楼主给大家列一下关于数据库几个常见问题的要点,如果大家对其中的问题感兴趣,可以自行扩展研究。
用户6543014
2020/03/18
7520
MySQL delete 删数据后磁盘空间未释放
在 MySQL 中使用 delete 语句删除数据之后,监控视图中可用的磁盘空间没有增加,磁盘使用率没有下降等等。
DBA实战
2024/09/06
3880
MySQL delete 删数据后磁盘空间未释放
青铜到王者,看看你的MySQL数据库是什么段位,如何提升?
作者 | 张甦, 数据库领域的专家和知名人士、图书《MySQL王者晋级之路》作者,51CTO 专家博主。近10年互联网线上处理及培训经验,专注于 MySQL 数据库,对 MongoDB、Redis 等 NoSQL 数据库以及 Hadoop 生态圈相关技术有深入研究,具备非常丰富的理论与实战经验。
数据和云
2018/07/27
1.1K0
青铜到王者,看看你的MySQL数据库是什么段位,如何提升?
MySQL 之日志
MySQL日志记录了MySQL数据库日常操作和错误信息。MySQL有不同类型的日志文件(各自存储了不同类型的日志),从日志当中可以查询到MySQL数据库的运行情况、用户的操作、错误的信息等。
小手冰凉
2020/05/21
1.2K0
mysql 数据库备份和恢复
物理备份是指直接复制包含数据的文件夹和文件。这种类型的备份适用于大数据量且非常重要,遇到问题需要快速回复的数据库。
WindWant
2020/09/11
3.8K0
innodb核心配置总结---官方文档阅读笔记
-- 每个表单独文件和单独表空间,而不是放在系统表空间,每个表的文件表空间允许操作系统在表被截断或删除时回收磁盘空间。每表文件表空间还支持动态和压缩行格式以及相关功能
丿丶MySQL灬灬
2021/10/25
1.1K0
教同事小姐姐删除MySQL数据的几种姿势
上周四下班后我正在工位上梳理一些文档,同事小姐姐阿侨来找我,“哈哥,晚上有空么?”
陈哈哈
2020/07/07
4910
相关推荐
MySQL删除数据空间没有释放-碎片
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验