Is there any way to see the progress of an ALTER TABLE statement in MySQL?例如,我发布了一条ALTER TABLE语句在InnoDB表的MEDIUMTEXT字段上创建索引,该表具有134k行,其中索引的大小为255个字节,并且该字段中数据的平均大小为30k。 该命令已经运行了大约15分钟(这是数据库上唯一运行的命令)。 我有什么办法可以确定它是否会在将近5分钟,5小时或5天内完成? 我能够执行这两个查询,并找出还有多少行要移动。
这比比较磁盘上的文件大小更有帮助,因为从myisam更改为innodb等会更改行大小。
对于InnoDB表,可以使用 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/
我进行了一个查询,该查询估计了完成innodb表上的alter命令的时间。您必须在同一会话上至少运行两次,因为它会比较连续运行的统计信息以进行估算。
显然,这是一个非常常见的请求-最早可以追溯到2005年,是bugs.mysql.com上的请求。 就是说,后来提出原始问题的家伙后来发布了MySQL 5.0的补丁程序,该补丁程序反向移植到4.1,这可能会帮到您。
运行
您可以看到正在构造的原始表文件和临时目标表文件,并且具有易于理解的大小。通常,它会随着时间线性增长,因此,如果它是原始表的大小的一半,则它是一半。 Percona的pt-online-schema-change显示剩余时间估计。默认情况下,它每30秒打印一次剩余时间估算和进度百分比。 与仅运行ALTER命令相比,它还具有其他功能。 http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html 如果有人想要一个bash解决方案:(SQL对我不起作用)
结论:
只要确保有免费的ram。和自由空间。 低ram使整个系统工作非常低 Percona Server是MySQL的分支版本,具有一些增强功能,具有此功能。 您可以在SHOW PROCESSLIST中观察ROWS_SENT和ROWS_EXAMINED的其他列。例如,如果您的表有1000000行,而您看到的ROWS_EXAMINED为650000,则表示已完成65%。 参见http://www.percona.com/doc/percona-server/5.6/diagnostics/process_list.html |