mysql disk full_RDS MySQL出现“the table '/home/mysql/xxxx/xxxx/#tab_name' is full”报错的解决方法...

问题描述

在使用RDS MySQL的过程中,出现了以下错误信息,[$Tab_Name]为临时表。

the table ‘/home/mysql/xxxx/xxxx/#[$Tab_Name]’ is full

问题原因

在进行group by、order by、distinct、union、多表更新、group_concat、count(distinct)、子查询或表连接的情况下,MySQL有可能会使用内部临时表。MySQL首先在内存中创建Memory引擎临时表,当临时表的尺寸过大时,会自动转换为磁盘上的MyISAM引擎临时表,当查询涉及到Blob或Text类型字段,MySQL会直接使用磁盘临时表。这个错误信息说明磁盘上的临时表的物理尺寸受到限制,已经无法再继续扩展了。导致这个错误信息的原因是查询语句使用的内部磁盘临时表(MyISAM 引擎表)总大小已经达到了实例参数loose_rds_max_tmp_disk_space指定的限制,默认值为10GB。

解决方案

阿里云提醒您:

如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。

如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。

如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

请按照实际情况选择以下步骤进行操作:

在控制台的参数设置中,根据RDS实例当前空闲空间和应用空间使用情况,调高参数loose_rds_max_tmp_disk_space(仅限MySQL 5.5或5.6支持该参数),建议设置为略小于当前空闲空间,保留一部分空间以便Binlog和数据文件使用,以避免磁盘临时表总占用空间过高,超过实例规格而导致实例锁定,影响业务。

提示:loose_rds_max_tmp_disk_space参数的单位是字节(Byte),默认10GB,上限1000GB。

ed0467ef447fa12552a6dc1adacf1e54.png

减少同时使用磁盘临时表的会话数量。因为loose_rds_max_tmp_disk_space参数指定的是磁盘临时表文件的总大小,因此减少并发使用磁盘临时表的会话数量可以避免超过该参数指定的限制。

在控制台的参数设置中调高tmp_table_size参数来提高内存临时表的上限。

说明:tmp_table_size单位是字节(Byte),默认256KB,上限64MB。

09de3bb60e03ea0940968f77f28a7948.png

在查询中,尽量避免使用Blog和Text类型字段。

优化查询逻辑,避免过大的中间数据集操作。

更多信息

说明:本节介绍如何判断查询是否使用内部临时表。

使用explain查看执行计划,在Extra字段中有Using temporary,则表示会使用内部临时表。

explain select * fromalarmgroupby created_on order by detail;

系统显示类似如下。

c9f63a5dacf68747e0878e8cecdcae0d.png

适用于

云数据库RDS  MySQL版

如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值