前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 删除数据不释放内存

MySQL 删除数据不释放内存

作者头像
默存
发布2023-09-01 20:35:34
4340
发布2023-09-01 20:35:34
举报
文章被收录于专栏:默存默存

DELETE 不释放磁盘空间

代码语言:javascript
复制
delete from table_name

原因

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

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

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

影响

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

删除数据释放内存方式

1、使用 drop 或 truncate

代码语言:javascript
复制
drop table table_name;

truncate table table_name;

2、OPTIMIZE

代码语言:javascript
复制
optimize table table_name;

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

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

3、Alter 命令

代码语言:javascript
复制
alter table table_name engine=innodb;

4、导出导入

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

代码语言:javascript
复制
-- mysqldump 导出表语法
mysqldump -u用户名 -p密码 -h主机 数据库 表

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

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

清理 BinLog

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

1、查看 binlog 文件列表

代码语言:javascript
复制
SHOW BINARY LOGS;

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

2、删除特定的 binlog 文件

代码语言:javascript
复制
PURGE BINARY LOGS TO 'binlog文件名';

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

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

代码语言:javascript
复制
PURGE BINARY LOGS TO 'mysql-bin.000003';

3、删除所有 binlog 文件

代码语言:javascript
复制
RESET MASTER;

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DELETE 不释放磁盘空间
  • 删除数据释放内存方式
  • 清理 BinLog
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档