1.现象
我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变?
数据库引擎:InnoDB
版本:5.7.0
2.原因分析
(1)在MySql中,如果删除数据页中的某条数据,MySql会标记这条数据为删除状态,下次需要插入一条数据刚好也在这个位置上时就可以复用这个位置了;
(2)如果是删除数据页中的所有数据时,MySql会标记这歌数据页都被删除了,可以被后续复用这个数据页了;
以上两种方式都只是做了标记可以复用,但是数据库文件的大小不会变!
3.解决方案
使用alter重建表,但是要注意选择流量低峰期然后一定要使用online的方式重建表(mysql 5.5以后的版本才支持),否则会造成表被锁住,数据库读取、写入都会阻塞。
当InnoDB数据库中的表删除大量数据后,文件大小并不会立即减小,因为数据页仅被标记为可复用。解决办法是在低峰期使用ALTER TABLE进行在线重建,以压缩表并释放空间。此操作需谨慎,避免阻塞数据库读写。
2083

被折叠的 条评论
为什么被折叠?



