例如,我发出了一个ALTER TABLE语句,用于在InnoDB表中的MEDIUMTEXT字段上创建索引,该表具有134k行,其中索引的大小为255字节,字段中数据的平均大小为30k.此命令已运行最后15分钟左右(并且是数据库上唯一运行的命令).我有什么方法可以确定它是否会在接近5分钟,5小时或5天内完成?
我能够执行这两个查询并确定要移动的行数.
select count(*) from `myoriginalrable`; select count(*) from `#sql-1e8_11ae5`;
这比比较磁盘上的文件大小更有帮助,因为从myisam更改为innodb等会更改行大小.
对于InnoDB表,可以使用SHOW ENGINE INNODB STATUS
查找执行ALTER TABLE的事务并检查TX保存的行锁数.这是已处理行的数量.这里详细解释:
http://gabrielcain.com/blog/2009/08/05/mysql-alter-table-and-how-to-observe-progress/
此外,MariaDB 5.3及更高版本具有报告某些操作(包括ALTER TABLE)的进度的功能.看到:
http://kb.askmonty.org/en/progress-reporting/