Mysql 磁盘清理相关要点

2021-03-15  本文已影响0人  晨曦入诗

1. 为啥磁盘还是满的 ?

应该是 MySQL 并没有真正清理掉这部分数据,而是假删除。这种假删除的行为在 Linux 中并不稀罕,属于常规操作,算是一种策思想,所以断定 MySQL 也这么干了。

查看碎片信息命令:

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;

2. 磁盘清理神器

不同的 MySQL 存储引擎清理方式有所不同。

SHOW ENGINES;  // 查看引擎命令

MySQL 中有多种存储引擎,常用的有 MyISAM 和 InnoDB,先看看这两个有什么特点:

3.1 MyISAM 引擎

MyISAM 基于 ISAM 存储引擎,并对其进行扩展。

3.2 InnoDB 引擎

3.3 操作命令

InnoDB 可以选择的操作命令包括:

OPTIMIZE TABLE tablename
ALTER TABLE tablename ENGINE = InnoDB

实际上运行上述清理命令时,MySQL 会锁定表,清理的数据越大,消耗的时间越久,因此这个操作一定要在夜深人静的时候操作。
命令好像是一句废话,它实际执行的是一个空的 ALTER 命令会重建整个表,删除未使用的空白空间。

4. MySQL 为什么会有碎片

以 InnoDB 存储引擎为例,来看看为什么会出现碎片。

上一篇 下一篇

猜你喜欢

热点阅读