首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Alter巨表消耗了所有磁盘空间。

Alter巨表消耗了所有磁盘空间。
EN

Database Administration用户
提问于 2019-11-20 05:55:51
回答 1查看 291关注 0票数 0

我在Ubuntu 19上运行MySQL 8,我有一个543 g的表,我必须添加一个新的列和索引。我从新的专栏开始:

代码语言:javascript
复制
alter table hugeTable add column newCol tinyint(1) after existingColumn;

在运行了几个小时之后,我收到了一个错误,大致是:

代码语言:javascript
复制
... table 'hugeTable' is full

我环顾四周,没有发现任何不好的地方--我还剩下大约294克的磁盘空间。查看错误日志,就会发现发生了什么--它正在生成一个不断增长的#sql文件。我又一次启动了它,以了解它增长得有多快,一个小时后它就超过了35G:

代码语言:javascript
复制
-rw-r----- 1 mysql mysql  35G Nov 19 21:53 '#sql-ib1124-819861495.ibd'

而且长得很快。

所以真正的问题是,有办法解决这个问题吗?我有这个表的备份,所以有可能关闭它并在没有撤销、#sql等文件的情况下运行更新。或者,我必须使用sed来修改备份文件并使用它吗?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2019-11-20 20:05:08

利用新的、更好的方法来改变:

代码语言:javascript
复制
SET SESSION alter_algorithm='INSTANT' ;
ALTER TABLE foo ADD COLUMN ... ;  -- without the AFTER

SET SESSION alter_algorithm='NOCOPY' ;
ALTER TABLE foo ADD INDEX name(col1, col2);

如果请求的算法无法完成这些操作,它们将在不执行ALTER的情况下给出一个错误。从那里,你可以决定该做什么。

“标志”上的单列索引很少有用。也许你不需要新的索引?

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/253684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档