紧急情况!关键 mysql 生产数据库的更新语句现在运行了 18 小时,需要帮助

Tim*_*Tim 6 mysql update

我们有一个包含 5 亿行的表。不幸的是,其中一列是 int(11),它是一个有符号整数,它是一个递增的值,刚好超过 21 亿幻数。这立即导致大约 10.000 名用户停机。我们讨论了许多解决方案,并决定我们可以安全地回滚这个值,比如 10 亿。但是我们必须为每一行回滚它。

这是我们所做的:

更新 Table1 Set MessageId = case when MessageId < 1073741824 then 0 else MessageId - 1073741824 end;

我在一个有 1000 万行的表上测试了这个,花了 11 分钟。所以我假设更大的桌子需要 550 分钟,或 9 小时。这将是我们 3 年来最大的停机时间。(我们是一家初创公司)。现在是18小时。

我们应该做什么?

请不要说我们应该做什么。我认为我们应该一次更新几百万行。

有没有办法让我们看到进步?Mysql 可能挂了?使用 mysql 5.0.22。

谢谢!

小智 1

尝试查看 SHOW PROCESSLIST 的输出;它应该让您简要了解该线程内发生的情况;最坏的情况是,您可以杀死该线程(使用 KILL $threadID),然后手动清理。

HTH。