当实例系统文件(主要是undo文件)过大,使存储空间占满,导致实例自动锁定时,您可以参照本文的指引来解锁并清理undo文件。
问题描述
RDS MySQL实例存储空间满,实例运行状态为锁定中。在监控与报警中,查看实例存储空间使用量,undo文件过大。
问题原因
系统文件过大主要是由于undo文件过大。当存在对InnoDB表长时间不结束的查询语句,而且在查询过程中表有大量的数据变化时,系统会生成大量的undo信息,占用大量存储空间,导致存储空间耗尽。为避免数据丢失,RDS会自动锁定实例,实例运行状态显示为锁定中。
对于RDS MySQL 8.0,系统会自动清理undo文件,不会出现此问题。
解决方法
步骤一:解锁实例。
扩容实例存储空间后可解锁实例。扩容存储空间的详细操作请参见变更配置。
步骤二:清理undo文件。
对于RDS MySQL 5.7:
连接RDS MySQL实例并执行如下语句,查询
innodb_undo_tablespaces
参数的值。连接实例的详细请参见连接RDS MySQL实例。SHOW VARIABLES LIKE 'innodb_undo_tablespaces';
当
innodb_undo_tablespaces
取值为2时,表示实例允许使用独立的undo表空间存储undo数据,可以进行清理。请将实例内核版本升级到
20230228
及以上,并且开启innodb_undo_log_truncate
参数。当undo文件大小超过
innodb_max_undo_log_size
参数值且其中的日志不再被任何活动的事务所需要时,系统会对undo文件进行truncate
操作,清理过大的文件并释放空间。开启参数的操作请参见设置实例参数。当
innodb_undo_tablespaces
取值为0时,表示不使用独立的undo表空间,undo文件存储在系统表空间ibdata1中,不可以进行清理。如果您希望清理这部分数据,您可以创建新的实例并迁移数据,或者将实例升级至RDS MySQL 8.0版本。详细操作请参见升级数据库版本。
对于RDS MySQL 5.5、5.6,不支持清理undo文件,建议将实例升级至RDS MySQL 5.7、8.0版本。详细操作请参见升级数据库版本。
如果您计划将实例升级至RDS MySQL 5.7版本时,请选择高可用系列。该系列的
innodb_undo_tablespaces
取值为2,允许使用独立的undo表空间存储undo数据,可以进行清理。
后续维护
减少并及时优化慢SQL。
尽量在业务低峰期进行索引创建删除、表结构修改、表维护和表删除操作。
监控和清理执行时间过长的会话或事务。详情请参见查看监控信息。
相关文档
您可以同时排查和清理数据文件、临时文件、Binlog文件,解决实例存储空间满的问题。
开启自治功能,避免undo文件增长过快导致实例锁定。
- 本页导读 (1)