查看innodb表碎片及清理
现在我有一台mysql数据库,请高手指教如何查看innodb表的碎片以及如何清理,谢谢 据我所知,貌似innodb使用表空间,即使有碎片也看查不出来。只能定期的optimize table来清理碎片。 optimize table这个语句是不是只能对myisam表有用?? 对innodb也有用,系统会自动把它转成 alter table 的形式。 定期检查mysql中 `information_schema`.`TABLES`字段,查看 DATA_FREE 字段,大于0话,就表示有碎片
ALTER TABLE table_name ENGINE = Innodb; 查了下`information_schema`.`TABLES`字段,查看 DATA_FREE 字段,绝大多数表的此字段的值都为635093123072,难道碎片有这么大??请高手指导 回复 6# mlxahcf
这个查询结果,和show table status from your database\G;
从你的来看,这些表是用的innodb,而且是共享表空间的,这么大的空间,其中有一部分是undo 空间,
是可用的,只是mysql不会回收。
innodb的alter table engine=innodb,虽然是空操作,记得是lock表,而且是重新建表的。
所以生产系统的,大表空间的,操作要慎重
在主从架构中,此操作也会被复制到Slave上,影响slave的
可以在执行时SET SQL_LOG_BIN=0,记此操作不被记录到binlog中
2, innodb的独立表空间,此操作比较方便,可以对比.ibd文件
3,mysiam就是上面所说的操作,show table status中的data free字段能正常反应出来碎片情况。 回复 8# kerlion
有相关经验吗? 可以分享呢!!
上次在项目中,我提过这种方案,但是担心崩溃,所以一直没有搞 在我们的项目中,生产环境一律采用独立的表空间,对于小表的话直接用ALTER TABLE table_name ENGINE = Innodb;回收表空间,对于大表就不能直接采用这种方式,因为会造成长时间的所表。可以采用新建表转移数据,然后删除旧表的形式
页:
[1]
2