什么是表空间碎片

表空间中,占据内存空间,但没有用于存储数据的碎片空间

如何查看 & 判断

show table status from db_name;
image.png

产生原因

  • 数据被delete,且原空间无法复用
  • 数据被update,常见于变长的字段中,原空间无法复用
  • 数据插入,导致页分裂,页填充率降低

产生影响

  • 浪费磁盘空间
  • 查询IO成本上升,效率低
  • 如果表数据量不大,则无需关注,不建议清理

如何清理

alter table table_name engine = innodb;
视具体表存储引擎决定

  • 该命令会重建整个表,清楚碎片空间
  • 重建整理聚簇索引上的数据

需要注意

虽然MySql 5.6支持了Online DDL,但是也会有升级写锁的时间,如果该表数据量过大或是业务高频读写,依然会引起问题,建议在低频业务时段处理,或者用其他替代方案


老污的猫
30 声望5 粉丝