MariaDB更新表结构时preallocating大量存储空间导致服务不可用,可能是什么原因?

在一次后端服务升级发布中,需要对数据表增加字段,使用JPA Hibernate的自动更新表结构功能(spring.jpa.hibernate.ddl-auto=update)

在代码更新后,启动服务,按照以往的情况,会自动更新表结构,增加字段,但这次更新非常诡异的直接导致数据库不可用了,看日志,是一张很小的表,mariadb尝试分配一个非常大的空间,大约100GB,超过了db服务器的最大存储,db服务立刻不可用

查看jpa的增加字段语句非常简单

alter table users add column new_column varchar(255) null default '';

执行更新的时候,表的大小还不到5MB,非常小,记录也只有大约5000条

查看db日志,按照先后顺序,是3种

[ERROR] InnoDB: preallocating 103934853120 bytes for file ./mydbname/users.ibd failed with error 28

Disk is full writing '/rdsdbdata/log/binlog/mysql-bin-changelog.~rec~' (Errcode: 28 "No space left on device"). Waiting for someone to free space... (Expect up to 60 secs delay for server to continue after freeing disk space)

[ERROR] mysqld: Disk full (/rdsdbdata/tmp/#sql_4c44_0.MAI); waiting for someone to free some space... (errno: 28 "No space left on device")

Mariadb 版本 10.3.8,表存储引擎InnoDB

不知道是否有人遇到过类似这种情况,是否了解大概可能什么原因引起。

阅读 2.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏