RDS实例存储空间不足的解决方法如下
RDS实例的空间使用率是日常需要重点关注的监控项之一,如果实例的存储空间不足,会导致严重后果,例如数据库无法写入、数据库无法备份、存储空间扩容任务耗时过长等。本文介绍各种空间不足问题的原因和解决方案。
索引太多导致空间不足
原因及现象
通常表上除了主键索引,还存在二级索引,二级索引越多,整个表空间就越大。
解决方案
优化数据结构,减少二级索引的数量。
大字段导致空间不足
原因及现象
如果表结构定义中有blob、text等大字段或很长的varchar字段,也会占用更大的表空间。
解决方案
压缩数据后再插入。
空闲表空间太多导致空间不足
原因及现象
空闲表空间太多是指InnoDB表的碎片率高。InnoDB是按页(Page)管理表空间的,如果Page写满记录,然后部分记录又被删除,后续这些删除的记录位置又没有新的记录插入,就会产生很多空闲空间。
解决方案
可以通过命令show table status like '<表名>'; 查看表上空闲的空间,如果空闲空间过多,可以执行命令optimize table '<表名>' ;整理表空间。
临时表空间过大导致空间不足
原因及现象
半连接(Semi-join)、去重(distinct)、不走索引的排序等操作,会创建临时表,如果涉及的数据量过多,可能导致临时表空间过大。
DDL操作重建表空间时,如果表特别大,创建索引排序时产生的临时文件也会特别大。RDS 5.7不支持即时增加字段,很多DDL是通过创建新表实现的,DDL执行结束再删除旧表,DDL过程中会同时存在两份表。
解决方案
可以查看执行计划,确认是否包含Using Temporary 。
大表DDL需要注意实例的空间是否足够,不足的话请提前扩容磁盘。