我在一个有3.5亿行的表上运行一个alter table语句。我怎么知道这个陈述实际上是在做什么而且没有挂?同样,我不想在它完成之前的某个时刻打扰一个声明。特别是在它运行了几个小时之后。
我需要能够在Bash或PERL中编写脚本,因为我的主机是Redhat Linux机箱。本案中的陈述是:
ALTER TABLE table_name AUTO_INCREMENT = 1;
答案 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。
它显示了包含变量变量以及语句进度的查询配置文件