MySQL InnoDB表的碎片量化和整理(data free能否用来衡量碎片?)
网络上有很多MySQL表碎片整理的问题,大多数是通过demo一个表然后参考data free来进行碎片整理,这种方式对myisam引擎或者其他引擎可能有效(本人没有做详细的测试). 对Innodb引擎是不是准确的,或者data free是不是可以参考,还是值得商榷的。 本文基于MySQL的Innodb存储引擎,数据库版本是8.0.18,对碎片(fragment)做一个简单的分析,来说明如何量化表的碎片化程度。 涉及的参数 1,information_schema_stats_expiry information_schema是一个基于共享表空间的虚拟数据库,存储的是一些系统元数据信息,某些系统表的数据并不是实时更新的,具体更新是基于参数information_schema_stats_expiry。 information_schema_stats_expiry默认值是86400秒,也就是24小时,意味着24小时刷新一次information_schema中的数据,做测试的时候可以设置为0,实时刷新information_schema中的元数据信息。 2,innodb_fast_shutdown 因为要基于磁盘做一些统计,需要将缓存或者redo log中的数据在重启实例的时候实时刷入磁盘,这里设置为0,在重启数据库的时候将缓存或者redo log实时写入表的物理文件。 3