【发布时间】:2013-05-13 07:15:30
【问题描述】:
我正在对具有 3.5 亿行的表运行 alter table 语句。我怎么知道该语句实际上是在做某事而不是挂起?同样,我不想在声明结束之前打扰它。特别是在它运行了几个小时之后。
我需要能够在 Bash 或 PERL 中编写脚本,因为我的主机是 Redhat Linux 机器。本例中的语句为:
ALTER TABLE table_name AUTO_INCREMENT = 1;
【问题讨论】:
-
我不认为该语句应该花费太多时间,它不必对表格内容做任何事情。
-
我也是这么想的。然而,我在 Google 姑妈的帮助下发现的其他帖子提到,这对于大桌子来说是可以预料的。
-
我不知道有什么方法可以监控mysql服务器的内部活动。我可以建议的最好的方法是在测试服务器上制作表的副本并在那里执行 ALTER,以确保它正常工作。然后在生产服务器上进行。
-
有趣的是,我在专门用于此类事情的离线服务器上执行此操作。然后我的脚本以不同的名称将表复制到生产服务器,然后使用重命名将它们交换为使用。它可以很好地保护生产系统免受此类活动的影响。
-
在表中仅使用了约 3.6 亿行。由于设计原因,它们位于滑动窗口中,并且始终是连续的。因此,当我们达到约 20 亿的关键 MAX 时,我希望只是按顺序重用早期的。实际上,我开始相信我正在尝试的事情是不可能的,因为它提到 here 'InnoDB 在服务器重新启动后将下一个 auto_increment 值重置为表中的最大值 + 1。我想知道 MyISAM 是否也这样做。
标签: mysql