文档首页> 云数据库 RDS> 最佳实践> RDS for MySQL> 性能调优> RDS for MySQL性能调优-解决空间不足问题
更新时间:2023-04-11 GMT+08:00
分享

RDS 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需要注意实例的空间是否足够,不足的话请提前扩容磁盘

分享:

    相关文档

    相关产品