我怎么知道我的MySQL alter table语句有效?

时间:2013-05-18 04:05:46

标签: mysql

我在一个有3.5亿行的表上运行一个alter table语句。我怎么知道这个陈述实际上是在做什么而且没有挂?同样,我不想在它完成之前的某个时刻打扰一个声明。特别是在它运行了几个小时之后。

我需要能够在Bash或PERL中编写脚本,因为我的主机是Redhat Linux机箱。本案中的陈述是:

ALTER TABLE table_name AUTO_INCREMENT = 1;

3 个答案:

答案 0 :(得分:6)

你真正想要的是这个。 SHOW PROCESSLIST。我还要补充一点,更新自动增量在处理大型数据集时确实需要花费大量时间(正如您所发现的那样)

http://dev.mysql.com/doc/refman/5.1/en/show-processlist.html

如果打开与DB的新连接并运行该命令,它将显示正在运行的查询所处的阶段(不是剩下多长时间)。复制到临时表,完成等等

答案 1 :(得分:1)

正如其他人所说,SHOW PROCESSLIST是你的朋友。有时。如果有多个长查询,您可能需要将FULL添加到该语句中:SHOW FULL PROCESSLIST。使用FULL,结果将包含Info列中的完整查询。

我想知道为什么你的查询起初很慢。 MySQL应该知道在哪里查找该表中的最后一条记录。如果它的auto_increment也被索引,那么MySQL应该非常容易。

PROCESSLIST经常提供关于MySQL在其工作中的位置的良好提示,特别是如果由于某种原因阻止了查询/命令。

答案 2 :(得分:0)

只是给你另一种选择...... 您可以尝试使用开发人员工具SQLyog

它显示了包含变量变量以及语句进度的查询配置文件