Mysql delete删除表数据之后,表空间没有释放的问题

事件起因:

今天运维人员找我,说我们的数据库磁盘空间满了。于是提供了一些删除表数据的sql给他,让他执行下。

执行之后,查询数据库,表数据是不在了,但是问题来了。

磁盘空间并没有释放,这是为啥咧????

于是乎,上网查找资料,功夫不负有心人,终于找到问题原因:

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

解决方法:

执行完delete语句的时候,再执行下:OPTIMIZE TABLE  XXXTable(自己的表名)

注意事项:

执行OPTIMIZE TABLE的时候,会导致锁表,而且没有必要每次delete之后都执行,一个月定时清理下即可。另外,OPTIMIZE 操作会导致锁表,建议在访问量小的时候执行!

自我总结

今天才碰到这样的问题,mysql的delete方法,之前一直以为是直接删除掉了,数据占用的表空间也自然会释放,但是今天才发现,delete语句后加where条件删除的数据会自动加个delete标识而不会真的删掉。学的太浅了,还需多多努力!

发布了23 篇原创文章 · 获赞 18 · 访问量 4763

猜你喜欢

转载自blog.csdn.net/guangtouwj/article/details/105112454