当前位置: 代码网 > it编程>数据库>Mysql > mysql表空间碎片率过高怎么清理?这三种方法最有效

mysql表空间碎片率过高怎么清理?这三种方法最有效

2026年08月20日 Mysql 我要评论
背景信息mysql 版本: mysql 5.7.20碎片产的生原因(1)记录被delete,且原空间无法复用(mysql插入为了提高效率直接插入末尾的);(2)记录被update(通常出现在变长字段中

背景信息

mysql 版本: mysql 5.7.20

碎片产的生原因

(1)记录被delete,且原空间无法复用(mysql插入为了提高效率直接插入末尾的);

(2)记录被update(通常出现在变长字段中,重新分配存储空间),原空间无法复用;

(3)记录插入导致页分.裂,页的填充率降低;

碎片率高的影响

(1)浪费磁盘空间;

(2)可能导致查询扫描的io成本提升,效率降低;

如果表空间较小或者碎片率较小,用户无需关注,也不建议执行回收空间碎片操作。

回收表空间碎片的三种方法

方法一

optimize table table_name

optimeze table 重新组织 table 数据和相关索引数据的物理存储,以减少访问table的存储空间并提高i/o效率。对每个 table 所做的确切更改取决于该 table 使用的存储引擎。

回收碎片的常见放大是通过optimize table tablename 来重组文件,操作过程会导致该表上的写操作无法执行(锁表),实例负载增大,请用户谨慎操作,如果确定需要回收,建议放在业务低峰期进行。

方法二

alter table table_name engine=innodb

定期执行”null” alter table 操作,会导致mysql重建table:

alter table tbl_name engine=innodb

还可以使用alter table tbl_name force执行重建table的”null”更改操作。

alter table tbl_name engin=innodb和alter table tbl_name force都使用在线 ddl。

方法三

mysqldumptable、删除table、重新载入数据

执行碎片整理操作的另一种方法是使用mysqldump将table转储到文本文件,删除table,然后从转存文件重新加载它。

拓展

(1) 频繁的 delete 操作导致表空间碎片率增高是不可避免的;

(2) 更新包含可变长字段的数据也会导致表空间碎片率增高,那么在表设计的时候如果可以的话,尽量使用较小的数据类型并且选择定长的数据类型。

参考文献:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com