MySQL 删除数据不释放内存

DELETE 不释放磁盘空间

delete from table_name

原因

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

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

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

影响

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

删除数据释放内存方式

1、使用 drop 或 truncate

drop table table_name;

truncate table table_name;

2、OPTIMIZE

optimize table table_name;

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

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

3、Alter 命令

alter table table_name engine=innodb;

4、导出导入

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

-- mysqldump 导出表语法
mysqldump -u用户名 -p密码 -h主机 数据库 表

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

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

清理 BinLog

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

1、查看 binlog 文件列表

SHOW BINARY LOGS;

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

2、删除特定的 binlog 文件

PURGE BINARY LOGS TO 'binlog文件名';

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

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

PURGE BINARY LOGS TO 'mysql-bin.000003';

3、删除所有 binlog 文件

RESET MASTER;

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

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

欢迎关注

MySQL 删除数据不释放内存

MySQL 删除数据不释放内存


原文始发于微信公众号(全栈客):MySQL 删除数据不释放内存

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/162545.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!