例如,我发出ALTER TABLE语句在一个InnoDB表中的MEDIUMTEXT字段上创建索引,该表有134k行,其中索引大小为255字节,字段中数据的平均大小为30k。该命令已经运行了大约15分钟(并且是数据库上唯一运行的命令)。有没有办法让我确定它是否会在5分钟、5小时或5天内完成?
发布于 2008-09-04 10:13:02
这是一个非常常见的请求--早在2005年就已经在bugs.mysql.com上被请求了。它已经存在于Oracle中,并且被列为有用的,但是"it is not a simple thing to do, so don't expect it to be implemented soon."。尽管那是在2005年:)
尽管如此,提出原始问题的人后来发布了MySQL 5.0的patch,向后移植到4.1,这可能会对您有所帮助。
发布于 2011-10-10 21:40:54
我能够执行这两个查询,并计算出还有多少行需要移动。
select count(*) from `myoriginalrable`;
select count(*) from `#sql-1e8_11ae5`;
这比比较磁盘上的文件大小更有帮助,因为从myisam更改为innodb等会改变行大小。
发布于 2012-08-21 20:53:21
对于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)的进度的功能。请参见:
https://stackoverflow.com/questions/43422
复制相似问题