我继承了一个 MySQL InnoDB 表,它包含大约 200 GB 的数据,以及几个大约 500 GB 的不需要的索引。我已经在场外存档了大约 75% 的记录并从我的表中删除了这些记录,并希望回收表中的空间。我想知道我是否需要大约 200 GB 的可用空间来回收空间,或者接近 700 GB。
innodb_file_per_table 已开启。
MySQL 版本是 5.5。
我正在考虑运行 OPTIMIZE TABLE(例如从表中删除行后恢复磁盘空间)或使用 Percona Toolkit 的在线模式更改(例如http://www.percona.com/blog/2013/09/25/how-to -reclaim-space-in-innodb-when-innodb_file_per_table-is-on/)。我更愿意做后者,因为我可以避免写锁,但如果需要相当大的空间差异,我会使用 OPTIMIZE TABLE。
我是否需要接近 200 GB 或接近 700 GB 的可用空间才能从 InnoDB 回收空间?如果接近 700GB,如果我首先将表转换为 MyISAM(例如http://www.percona.com/blog/2014/08/21/the-mysql-ibdata1-disk-space-issue -and-big-tables-part-1/)?
感谢您的帮助!