我愚蠢地试图将一列添加到我没有足够的磁盘空间来复制的表中,不得不终止它并扩展我的 RDS 实例的存储容量以避免站点崩溃。我想再做一次(这次有足够的磁盘空间),但我似乎无法恢复到查询前的免费存储水平。我的查询是创建一个像巨型表一样的表,添加一列,然后将旧表的全部内容连同 null 一起插入到新表中。我尝试了 CALL mysql.rds_rotate_slow_log;
和 CALL mysql.rds_rotate_general_log;
但从我的 AWS Cloudwatch 面板来看,我仍然比查询前的水平低了约 10GB。没有行成功插入到新表中。是否有一些“清除硬盘缓存”命令或类似的命令?由于它是 RDS,我无权访问运行它的实例,但我有主用户和 RDS CLI 访问权限。
编辑:看来我的问题可能与巨大的 ibdata
文件有关,但由于我没有根访问权限,我无法真正执行中提到的解决方案How to shrink/purge ibdata1 file in MySQL
最佳答案
解决方案是删除新表。我不认为新表中存储了任何内容,因为 select count(*) from new_table;
返回了 0,但我猜临时数据无论如何都绑定(bind)到新表中。从数据库结构的角度来看,我不确定这到底是如何工作的,但幸运的是它做了我想要的。
底线:杀死的插入仍然使用存储空间。
如果有人能解释为什么会这样,那将对 future 有所帮助。
关于mysql - 从失败的插入中回收磁盘空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11184229/