Mysql优化碎片空间

mysql的表在使用的过程,会不断产生碎片空间,占用存储

1.查询表的碎片空间

select ROW_FORMAT,TABLE_ROWS,DATA_LENGTH,INDEX_LENGTH,MAX_DATA_LENGTH,DATA_FREE,ENGINE from information_schema.TABLES where TABLE_SCHEMA='clcz' and TABLE_NAME='if_resp' limit 1;

Mysql优化碎片空间

可以看到有120M左右的碎片空间

下面执行命令进行优化,表越大执行时间越长,执行过程中会锁住表,切记在业务低峰操作

optimize table clcz.if_resp;

Mysql优化碎片空间

可以看到2G的数据,120M的碎片空整理用了8分钟

此时再次查看表空间使用情况

Mysql优化碎片空间

可以看到碎片空间被清理掉了,但是table_row和data_length也有变动。

 

我们也可以直接查看Mysql存储的磁盘空间验证下

首先查询Mysql存储位置:

show variables like '%datadir%’;

Mysql优化碎片空间

可以看到是 /var/lib/mysql/

清理前空间占用是2.4G

Mysql优化碎片空间

 

清理后空间占用是

Mysql优化碎片空间

 

 

但是有时候会遇到MySQL的存储空间用满,在优化的时候报错table is full

 

此时需要先把MySQL的存储空间先释放些,比如可以删除一些binlog,然后再做清理。