【MySQL】- 什么是数据碎片?怎么产生的?有什么副作用?如何优化?
叨叨
今天为什么会提到MySQL的数据碎片?事情是这样的周五跟同事说了一下系统中有一张表有一些容量问题,一开始想是不是需要分库分表了。但是考虑到分库分表的迁移成本问题,以及必要性问题,咨询了DBA的相关同事,DBA询问了一些系统参数(QPS,TPS,表数据占用空间(表数据4G、索引1G、碎片22G)等),给的结果:单实例足够支撑了。

跟我想象的答案不是很一样啊?是哪里出了问题。
紧接着我反驳到:我们表数据目标会打到 ***W,现在查询比较慢,并且磁盘碎片还比较多。
DBA:你给我的这些参数单库就够用了呀,查询慢就优化SQL,碎片多就提工单进行碎片清理。
我:优化SQL我能理解,我只看到数据碎片,整理数据碎片我也没干过呀,有没有推荐的解决方案呀。
DBA:你直接在平台提工单就好了。给了我一个SQL,alert table table_name engine = innodb;
我:看似朴实无华的一句SQL,让我产生了很多疑惑,什么是数据碎片,有啥用,咋优化呢?
什么是数据碎片?
每当MySQL从你的列表中删除了一行内容,该段空间就会被留空。而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大。当MySQL对数据进行扫描时,它扫描的对象实际是列表的容量需求上限,也就是数据被写入的区域中处于峰值位置的部分。如果进行新的插入操作,MySQL将尝试利用这些留空的区域,但仍然无法将其彻底占用。
总结:简单来说就是,数据删除了之后,使得数据不连续

本文介绍了MySQL中的数据碎片现象,其由大量删除操作导致数据不连续产生。数据碎片过多会降低读写速度。通过模拟创建、删除数据展示了碎片的产生过程。优化方法包括使用OPTIMIZE TABLE或ALTER TABLE命令。建议定期对包含可变长度数据类型的表进行碎片清理,以保持数据库性能。
最低0.47元/天 解锁文章
1408

被折叠的 条评论
为什么被折叠?



