mysql表碎片清理和表空间收缩

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官方建议不要经常(每小时或每天)进行碎片整理,一般根据实际情况,只需要每周或者每月整理一次即可。

你可能感兴趣的:(mysql表碎片清理和表空间收缩)