云服务器 99 / 年,新老同享(可以99/年续费),开发者力荐特惠渠道,新客户在享受9折
阿里云推广

mysql某个表中数据量大删除表中数据占用空间还是那么大?

  • 内容
  • 评论
  • 相关

事发过程:

api_log这是一个api的接口日志表,随着时间的积累已经有100万多条数据,大小约10个多G,于是我想着删除下里面的数据,减少磁盘的占用情况,磁盘快满了都。但是我清空完毕里面的数据发现磁盘占用并没有减少。

问题原因:

delete命令并不会把记录删除,他只会把记录头信息里的delete_mask标识改为1,这些被删除的记录之所以不立即从磁盘上移除,是因为移除它们之后把其他的记录在磁盘上重新排列需要性能消耗,所以只是打一个删除标记而已,所有被删除掉的记录都会组成一个所谓的垃圾链表,在这个链表中的记录占用的空间称之为所谓的可重用空间,之后如果有新记录插入到表中的话,可能把这些被删除的记录占用的存储空间覆盖掉。

 

解决方案1

optimize   table   api_log;

只是此命令会锁表,想通过此命令优化表结构,只能在访问量小的时候,或者停机的时候的使用。只是此命令会锁表,想通过此命令优化表结构,只能在访问量小的时候,或者停机的时候的使用。

解决方案2

Alter    table  api_log  engine=innodb;

这个命令就比较厉害了,相当于新建临时表、把旧表插到临时表里、交换表名、删除旧表,并且不锁表还不影响原表的增删改,比较推荐,当然在操作的时候,还是推荐在业务低峰期的时候。以免发生意外。

解决方案3

把这个表导出,然后删除这个表,然后在导入这个表。

本文标签:

版权声明:若无特殊注明,本文皆为《菜鸟站长》原创,转载请保留文章出处。

本文链接:mysql某个表中数据量大删除表中数据占用空间还是那么大? - https://wlphp.com/?post=330

发表评论

电子邮件地址不会被公开。 必填项已用*标注