Mysql 删除列时内存不足

Mysql 删除列时内存不足,mysql,Mysql,我有一个数据库托管在聪明的云上(-MySQL插件大小LM:memory 1gb&2vcpus)。我有一个使用InnoDb引擎的表,有188000行,大约311MB 当我尝试删除表中的一列(此列上没有索引)时,我在phpMyAdmin中遇到以下错误: 2006年的今天,MySQL服务器消失了 发生错误时MySQL的日志: 我读到InnoDb引擎使用内存创建一个新表,在不删除列的情况下复制数据,并切换新旧表以执行删除操作 我能做些什么来节省内存吗 有没有办法让InnoDb使用磁盘而不是内存 谢谢

我有一个数据库托管在聪明的云上(-MySQL插件大小LM:memory 1gb&2vcpus)。我有一个使用InnoDb引擎的表,有188000行,大约311MB

当我尝试删除表中的一列(此列上没有索引)时,我在phpMyAdmin中遇到以下错误:

2006年的今天,MySQL服务器消失了 发生错误时MySQL的日志:

我读到InnoDb引擎使用内存创建一个新表,在不删除列的情况下复制数据,并切换新旧表以执行删除操作

  • 我能做些什么来节省内存吗
  • 有没有办法让InnoDb使用磁盘而不是内存

谢谢大家!

为什么不在表更改查询中尝试ALGORITHM=COPY-in?它是强制复制表的一部分,而不是就地修改表。它的内存使用率可能会更低。但某些警告适用

使用ALGORITHM=COPY子句运行的任何ALTER TABLE操作都会阻止 并发DML操作。仍然允许并发查询。那个 也就是说,表复制操作始终至少包括并发性 锁定限制=共享(允许查询,但不允许DML)。你可以 通过指定 LOCK=EXCLUSIVE,用于防止DML和查询


为什么不在表更改查询中尝试ALGORITHM=COPY-in?它是强制复制表的一部分,而不是就地修改表。它的内存使用率可能会更低。但某些警告适用

使用ALGORITHM=COPY子句运行的任何ALTER TABLE操作都会阻止 并发DML操作。仍然允许并发查询。那个 也就是说,表复制操作始终至少包括并发性 锁定限制=共享(允许查询,但不允许DML)。你可以 通过指定 LOCK=EXCLUSIVE,用于防止DML和查询


不确定这是否100%回答了问题,但为了使用更少的内存和磁盘,您可以使用B和B+树来组织记录吗?@OmidCompSCI这可能可行,但我不想改变整个系统!不确定这是否100%回答了问题,但为了使用更少的内存和磁盘,您可以使用B和B+树来组织记录吗?@OmidCompSCI这可能可行,但我不想改变整个系统!好的,谢谢你,我明天一早就试试(我在法国!),而服务上几乎没有人。好的,谢谢你,我明天一早就试试(我在法国!),而服务上几乎没有人