MySQL表碎片整理

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

MySQL表碎片整理

1 表碎片介绍

在InnoDB表中删除行的时候,这些行只是被标记为“已删除”,而不是真正从物理存储上进行删除,碎片的存在十分影响数据库的性能。

删除数据就会导致页(Page)中出现空白空间,大量随机的DELETE操作,必然会在数据文件中造成不连续的空白空间。而当插入数据时,这些空白空间则又会被利用起来,于是造成了数据的存储位置不连续。物理存储顺序与逻辑上的排序不同,这种就是数据碎片。


对于大量的UPDATE,也会造成文件碎片化,InnoDB的最小物理存储分配单位是页(Page),而UPDATE也可能导致页分裂(Page Split)。频繁的页分裂,页会变得稀疏,并且被不规则地填充,所以最终数据会有碎片。


影响:

(1)由于碎片空间是不连续的,导致这些空间不能充分被利用;

(2)数据库的磁盘I/O操作变成离散随机读写,加重了磁盘I/O的负担。


2 查看表碎片

碎片大小 = 表数据总大小 - 实际表空间大小


表大小查看示例:show table status like 't_meta_form' \G;



表数据总大小 = Data_length + Index_length    = 594001920

实际表空间大小 = Rows * Avg_row_length        = 577956231

(单位为字节byte)


碎片大小=(表数据总大小 - 实际表空间大小)/ 1024/1024 = 16045689/1024/1024 = 15.3MB

可以计算出当前表碎片大小为15.3MB。


3 清理表碎片

通过重建表清理表碎片

示例:

cosmic@zy01_meta17:14> alter table t_meta_form engine=innodb;



注:MySQL8.0支持在线重建表,但还是会有锁表动作,建议测试环境验证后,生产环境在业务空闲时期操作。生产环境可以按大小查询排名前20的表,针对增删改操作频繁的业务大表做针对性碎片清理。

MySQL表碎片整理

1 表碎片介绍在InnoDB表中删除行的时候,这些行只是被标记为“已删除”,而不是真正从物理存储上进行删除,碎片的存在十分影响数据库的性...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息