华为云云数据库rdsRDS for MySQL性能调优-解决空间不足问题_云淘科技

RDS MySQL实例的空间使用率是日常需要重点关注的监控项之一,如果实例的存储空间不足,会导致严重后果,例如数据库无法写入、数据库无法备份、存储空间扩容任务耗时过长等。本文介绍查看空间使用情况的方式,以及各种空间问题的原因和解决方案。

查看空间使用情况

您可以在实例的基本信息页面查看存储空间和备份空间的使用情况,这里只展示当前的空间使用总量,没有展示各类数据分别占用的磁盘空间信息,也没有空间使用的历史信息。

您可以在实例基本信息的“查看监控指标”或者控制台的云监控服务设置监控指标“磁盘使用量”查看磁盘空间使用的历史信息和变化曲线。

索引太多导致空间不足

原因及现象

通常表上除了主键索引,还存在二级索引,二级索引越多,整个表空间就越大。

解决方案

优化数据结构,减少二级索引的数量。

大字段导致空间不足

原因及现象

如果表结构定义中有blob、text等大字段或很长的varchar字段,也会占用更大的表空间。

解决方案

压缩数据后再插入。

空闲表空间太多导致空间不足

原因及现象

空闲表空间太多是指InnoDB表的碎片率高。InnoDB是按页(Page)管理表空间的,如果Page写满记录,然后部分记录又被删除,后续这些删除的记录位置又没有新的记录插入,就会产生很多空闲空间。

解决方案

可以通过命令show table status like ” 查看表上空闲的空间,如果空闲空间过多,可以执行命令optimize table ” 整理表空间。

临时表空间过大导致空间不足

原因及现象

半连接(Semi-join)、去重(distinct)、不走索引的排序等操作,会创建临时表,如果涉及的数据量过多,可能导致临时表空间过大。

DDL操作重建表空间时,如果表特别大,创建索引排序时产生的临时文件也会特别大。RDS MySQL 5.6和5.7不支持即时增加字段,很多DDL是通过创建新表实现的,DDL执行结束再删除旧表,DDL过程中会同时存在两份表。

解决方案

可以查看执行计划,确认是否包含Using Temporary

大表DDL需要注意实例的空间是否足够,不足的话请提前扩容磁盘。

父主题: 性能调优

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家