在使用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日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
请按照实际情况选择以下步骤进行操作:
提示:loose_rds_max_tmp_disk_space参数的单位是字节(Byte),默认10GB,上限1000GB。
说明:tmp_table_size单位是字节(Byte),默认256KB,上限64MB。
说明:本节介绍如何判断查询是否使用内部临时表。
使用explain查看执行计划,在Extra字段中有Using temporary,则表示会使用内部临时表。
explain select * from alarm group by created_on order by detail;
如果您的问题仍未解决,您可以在阿里云社区提交工单联系阿里云技术支持。