【问题标题】:Why mysql alter table always doing copy to temptable?为什么mysql alter table 总是复制到temptable?
【发布时间】:2025-12-13 08:15:02
【问题描述】:

我在 mysql 中有 innodb 表,记录少于 200 万条,数据 + 索引大小约为 1.5 GB 我需要更改表以向表中添加一行。每当我在做 alter table mysql 时,总是会复制到 temptable。 数据库机器有 100 GB 的 RAM,所以我希望 alter table 应该在内存中执行。 我已经设置:

tmp_table_size = 10G
max_heap_table_size = 10G
sort_buffer_size = 10G
innodb_buffer_pool_size=50G

但这并没有帮助。如何配置mysql避免复制到temptable?

【问题讨论】:

  • 你的服务器是什么版本的?
  • 服务器版本:5.5.24
  • 还有你的服务器是什么。赢/*nix?
  • 红帽企业 Linux 服务器 6.4 版(圣地亚哥)
  • 我假设您的意思是“向表中添加一列”,而不是“向表中添加一行”。

标签: mysql performance memory innodb


【解决方案1】:

MySQL 在任何情况下都不会在内存中执行ALTER TABLE。向表中添加新列需要创建一个新表(使用新模式),将旧表中的所有行复制到新表中,并以原子方式交换新旧表。根据 MySQL 版本,某些类型的ALTER TABLE,例如添加新索引,可能可以“在线”完成,而其他操作在操作期间不会被阻塞。但是,对于您的问题,这仍然是“在磁盘上”完成的。

【讨论】: