gpt4 book ai didi

mysql - 在大型 Innodb 表上执行 Alter Table

转载 作者:行者123 更新时间:2023-11-29 22:18:49 24 4
gpt4 key购买 nike

我最近被任命为我们服务器的数据库管理员,所以我必须边走边学。我们最近发现我们的一张表的 id 列已满,需要迁移到 bigint。这是一个包含大约 301GB 数据的 INNODB 表。我们正在运行 mysql 版本 5.5.38。我运行的用于迁移表的命令是

ALTER TABLE tb_name CHANGE id id BIGINT NOT NULL;

我开始了迁移,现在迁移已经进行了 18 小时,但我没有看到服务器上的磁盘空间发生任何变化,这让我认为什么都没有发生。我们有足够的内存,所以不用担心,但当我运行“show processlist;”时它仍然显示以下消息状态

copy to tmp table

有人有任何想法或知道我做错了什么吗?请询问您是否需要更多信息。

最佳答案

是的,这需要很长时间。磁盘可能会尽可能快地旋转。 (SSD 使用更快的仓鼠。)

您可以终止 ALTER,因为正如它所说,它所做的只是“复制到 tmp 表”,之后它将把 tmp 表重命名为真正的表并删除旧副本。

我希望您在启动 ALTER 时设置了 innodb_file_per_table = ON。否则它将扩展 ibdata1,之后不会缩小。

pt-online-schema-change 是一种替代方案。它仍然需要很长的时间(多一个“o”,因为它会稍微慢一些)。它将完成这项工作,而不会阻止其他事件。

这可能是检查表中所有列和索引的好时机:

  • 是否可以将某些 INT 转换为 MEDIUMINT 或更小的值?
  • 是否有一些索引未使用?
  • 规范一些 VARCHAR 怎么样?
  • 甚至可能进行分区(但并非没有充分的理由)?时间序列是数据仓库的典型用途。
  • 总结数据,并至少丢弃旧数据?

如果您需要进一步指导,请提供SHOW CREATE TABLE

关于mysql - 在大型 Innodb 表上执行 Alter Table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com