我正在对具有 3.5 亿行的表运行 alter table 语句。我怎么知道该语句实际上是在做某事而不是挂起?同样,我不想在声明结束之前打扰它。特别是在它运行了几个小时之后。
我需要能够在 Bash 或 PERL 中编写脚本,因为我的主机是 Redhat Linux 机器。这种情况下的陈述是:
ALTER TABLE table_name AUTO_INCREMENT = 1;
我正在对具有 3.5 亿行的表运行 alter table 语句。我怎么知道该语句实际上是在做某事而不是挂起?同样,我不想在声明结束之前打扰它。特别是在它运行了几个小时之后。
我需要能够在 Bash 或 PERL 中编写脚本,因为我的主机是 Redhat Linux 机器。这种情况下的陈述是:
ALTER TABLE table_name AUTO_INCREMENT = 1;
你真正要找的是这个。SHOW PROCESSLIST
. 我还要补充一点,在处理大型数据集时,更新自动增量确实需要非常多的时间(正如您所发现的那样)
http://dev.mysql.com/doc/refman/5.1/en/show-processlist.html
如果您打开与数据库的新连接并运行该命令,它将显示正在运行的查询处于哪个阶段(而不是剩余多长时间)。复制到临时表,完成等
正如其他人所提到的,SHOW PROCESSLIST
是你的朋友。有时。当有多个长查询时,您可能希望添加FULL
到该语句:SHOW FULL PROCESSLIST
. 使用 FULL,结果将在 Info 列中包含完整的查询。
我想知道为什么您的查询首先很慢。MySQL 应该知道在哪里查找该表中的最后一条记录。如果它是 auto_increment ,它也会被索引,并且 MySQL 应该非常容易做到。
PROCESSLIST 通常会很好地提示 MySQL 的工作位置,尤其是在查询/命令由于某种原因被阻止的情况下。
只是给你另一个选择......你可以尝试开发工具SQLyog 。
它显示带有变量变化的查询配置文件以及语句的进度