mysql表碎片清理和表空间收缩(即清理碎片后report_site_day.ibd文件磁盘空间减小,
该方案基于独立表空间存储方式)
清除碎片的优点:
1. 降低访问表时的IO,提高mysql性能。
2. 释放表空间降低磁盘空间使用率。
碎片产生的原因:
1.删除了一行数据,该段空间就会变为被留空;
2.执行插入操作时,MySQL会尝试使用空白空间,
如果某个空白空间一直没有被大小合适的数据占用,仍然无法将其彻底占用,就形成了碎片;
3.频繁修改了含有可变长度列的表。(如:含有VARCHAR, BLOB或TEXT列的表)
碎片查看:
SELECT * from
(
SELECT CONCAT(table_schema,'.',table_name) AS 'table_name',
table_rows AS 'Number of Rows',
CONCAT(ROUND(data_length/(1024*1024),6),' M') AS 'data_size',
CONCAT(ROUND(index_length/(1024*1024),6),' M') AS 'index_size' ,
CONCAT(ROUND(data_free/(1024*1024),6),' M') AS'data_free',
ENGINE as 'engine'
FROM information_schema.TABLES
WHERE table_schema = #{库名}
) t ORDER BY data_free DESC;
data_size : 数据的大小。
index_size: 索引的大小。
data_free :数据在使用中的留存空间。
engine:表引擎名称。
碎片清洗
OPTIMIZE TABLE tbl_name [, tbl_name];
注:
1.对存储引擎为myisam,innodb的有用。
2.在OPTIMIZE TABLE 运行过程中,MySQL会锁定表,数据量越大,耗费的时间也越长。大表操作一定要在数据库空闲时期进行。
3.并不是所有表都需要进行碎片整理,一般只需要对包含可变长度的文本数据类型的表进行整理即可。
4.MySQL官方建议不要经常(每小时或每天)进行碎片整理,一般根据实际情况,只需要每周或者每月整理一次即可。