一、数据清理(truncate方式)
收到运维同事提示,有台机器磁盘使用率过高
查看之后发现是数据库文件过大,磁盘本身500g,数据库单表文件占用300多g
表中存了一些历史数据,历史数据可以删除了,于是执行
truncate table XXX 删除表数据。
表数据删除后,本以为完事了,查询了一下磁盘使用率,发现使用率并没有降下来。
看了一下,表对应的ibd文件并没有变化。
于是再次执行
optimize table XXX
才将表空间释放。
二、MySQL数据清理方式
MySQL数据清理有三种方式
drop:DDL 语句,执行速度最快,全量删除表数据;除此之外,还会删除表结构以及表的索引、约束和触发器(如果表还在使用不要使用该命令)。
truncate:DDL 语句,执行速度较快,全量删除表数据,表结构以及表的索引、约束和触发器保留;需要配合optimize 命令来进一步优化磁盘空间(有一定执行时间,需考虑对业务影响)
delete: DML 语句,执行速度最慢,但是可以选择性删除部分数据,表结构以及表的索引、约束和触发器保留。
truncate与delete区别:
truncate 表数据全部清空,会重置自增列为 1,而 delete 就算全部清空数据,也不会重置自增列。