[英]Performing Alter Table on Large Innodb table
我最近被迫进入服务器的db admin位置,所以我必须不断学习。 最近,我们发现我们的一个表已使id列最大化,需要将其迁移到bigint。 这用于具有大约301GB数据的INNODB表。 我们正在运行MySQL版本5.5.38。 我正在迁移表的命令是
ALTER TABLE tb_name更改ID id BIGINT不为NULL;
我开始了迁移,现在我们已经进行了18个小时的迁移,但是我看不到服务器上的磁盘空间有任何变化,这让我觉得什么都没发生。 我们有足够的内存,因此不用担心,但是当我运行“ show processlist;”时,它仍然显示以下消息状态。
复制到tmp表
有人有任何想法或知道我在做什么错误吗? 请询问您是否需要更多信息。
是的,这需要很长时间。 磁盘可能正在尽可能快地旋转。 (SSD使用更快的仓鼠。)
您可以杀死ALTER,因为它所做的只是“复制到tmp表”,然后将tmp表重命名为真实表并删除旧副本。
我希望您在启动ALTER
时拥有innodb_file_per_table = ON
。 否则它将扩展ibdata1
,此后不会收缩。
pt-online-schema-change
是一种替代方法。 仍然会花很长的时间(加上一个额外的“ o”,因为它会稍微慢一些)。 它将完成这项工作,而不会阻止其他活动。
这可能是检查表中所有列和索引的好时机:
如果您想要进一步的指导,请提供SHOW CREATE TABLE
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.