2

我正在对具有 3.5 亿行的表运行 alter table 语句。我怎么知道该语句实际上是在做某事而不是挂起?同样,我不想在声明结束之前打扰它。特别是在它运行了几个小时之后。

我需要能够在 Bash 或 PERL 中编写脚本,因为我的主机是 Redhat Linux 机器。这种情况下的陈述是:

ALTER TABLE table_name AUTO_INCREMENT = 1;
4

3 回答 3

6

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

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

如果您打开与数据库的新连接并运行该命令,它将显示正在运行的查询处于哪个阶段(而不是剩余多长时间)。复制到临时表,完成等

于 2013-05-18T04:14:52.373 回答
1

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

我想知道为什么您的查询首先很慢。MySQL 应该知道在哪里查找该表中的最后一条记录。如果它是 auto_increment ,它也会被索引,并且 MySQL 应该非常容易做到。

PROCESSLIST 通常会很好地提示 MySQL 的工作位置,尤其是在查询/命令由于某种原因被阻止的情况下。

于 2013-05-18T05:37:46.490 回答
0

只是给你另一个选择......你可以尝试开发工具SQLyog

它显示带有变量变化的查询配置文件以及语句的进度

于 2013-05-18T04:36:02.533 回答