当前位置:  开发笔记 > 后端 > 正文

有没有办法在MySQL中看到ALTER TABLE语句的进度?

如何解决《有没有办法在MySQL中看到ALTERTABLE语句的进度?》经验,为你挑选了2个好方法。

例如,我发出了一个ALTER TABLE语句,用于在InnoDB表中的MEDIUMTEXT字段上创建索引,该表具有134k行,其中索引的大小为255字节,字段中数据的平均大小为30k.此命令已运行最后15分钟左右(并且是数据库上唯一运行的命令).我有什么方法可以确定它是否会在接近5分钟,5小时或5天内完成?



1> 小智..:

我能够执行这两个查询并确定要移动的行数.

select count(*) from `myoriginalrable`;
select count(*) from `#sql-1e8_11ae5`;

这比比较磁盘上的文件大小更有帮助,因为从myisam更改为innodb等会更改行大小.


您是如何获得alter命令创建的临时表的名称的?
临时表的名称可以在文件系统中与其余表一起找到.

2> 小智..:

对于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/

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有