关系数据库MySQL版磁盘空间不足问题 大字段导致空间不足 原因及现象: 如果表结构定义中有blob、text等大字段或很长的varchar字段,也会占用更大的表空间。 解决方案: 优化表数据结构,压缩数据后再插入。 表空间碎片太多导致空间不足 原因及现象: 空闲表空间太多到最后InnoDB表的碎片率高。InnoDB是按页(Page)管理表空间的,如果Page写满记录,然后部分记录又被删除,后续这些删除的记录位置又没有新的记录插入,就会产生很多空闲空间。MySQL 的表在进行了长时间多次 delete 、update 和 insert 后,表空间会出现碎片。定期进行表空间整理,消除碎片可以提高访问表空间的性能。 解决方案: 使用以下命令可以找出表空间中可释放空间超过100M的最大10个表: mysql> select tablename,round(datalength/1024/1024) as datalengthmb, round(datafree/1024/1024) as datafreemb from informationschema.tables where round(datafree/1024/1024) > 100 order by datafreemb desc limit 10; +++ TABLENAME datalengthmb datafreemb +++ sbtest1 232 274 +++ 1 row in set (0.02 sec) 使用 alter table ... force 进行表空间整理和 OPTIMIZE TABLE tablename命令的作用一样,这个命令适用于 InnoDB , MyISAM 和 ARCHIVE 三种引擎的表。但是对于 InnoDB 的表,不支持 OPTIMIZE TABLE 命令,可以用 alter table sbtest1 engineinnodb 代替 ,在业务低峰期整理表空间。 mysql> OPTIMIZE TABLE sbtest1; ++++ Table Op Msgtype Msgtext ++++ sbtest.sbtest1 optimize note Table does not support optimize, doing recreate + analyze instead sbtest.sbtest1 optimize status OK ++++ 2 rows in set (1 min 25.24 sec) mysql> alter table sbtest1 engineinnodb; Query OK, 0 rows affected (1 min 3.06 sec) Records: 0 Duplicates: 0 Warnings: 0