跳至内容

如何对 Amazon RDS 和 Aurora MySQL 兼容版中的临时表和存储空间已满问题进行故障排除?

2 分钟阅读
0

当我在 Amazon Relational Database Service 或 Amazon Aurora MySQL 兼容版数据库中运行查询时,会遇到临时表和存储空间已满的问题。

简短描述

当您在兼容 Amazon RDS 或 Aurora MySQL 的环境中运行查询时,可能会遇到以下错误消息:

“The table '/rdsdbdata/tmp/#sqlxx_###' is full”

当您在兼容 Amazon RDS 或 Aurora MySQL 的实例上使用所有临时表存储空间时,您会收到上述错误消息。当您运行生成超出配置存储配额的大型临时表的查询时,您也会收到此错误消息。

解决方法

解析完整的临时表

MySQL 8.0 和 Aurora MySQL 兼容版 3.x 使用 TempTable 存储引擎来处理需要您存储中间结果的复杂查询。

TempTable 存储引擎在内存中创建临时表,最高可达 temptable_max_ram 参数的默认大小。当您超出配额时,临时表会使用内存映射文件溢出到磁盘存储空间,最高可达 temptable_max_mmap 参数的默认大小。

如果查询生成的临时数据超出 temptable_max_mmap 参数的默认大小,则可能会出现“Table is full”错误。

要解决此问题,请执行以下操作:

  • 增加 temptable_max_ramtemptable_max_mmap 参数,为临时表留出更多内存和磁盘空间。有关详细信息,请参阅 MySQL 网站上的 temptable_max_ramtemptable_max_mmap
    **注意:**temptable_max_mmap 参数不得超过 Aurora 实例上本地存储大小的 80%。
  • internal_tmp_mem_storage_engine 参数设置为 MEMORY,以避免 temptable_max_mmap 磁盘配额。此外,设置 tmp_table_sizemax_heap_table_size 参数以限制单个内部临时表的大小。有关详细信息,请参阅 MySQL 网站上的 internal_temp_mem_storage_enginetmp_table_sizemax_heap_table_size
    **注意:**MEMORY 设置仅适用于 Aurora 写入器实例。在读取器实例上,Aurora MySQL 使用 TempTable 存储引擎。
  • 打开 aurora_tmptable_enable_per_table_limittune tmp_table_size 参数以限制每个内部临时表的最大内存。
  • 使用 FreeLocalStorage Amazon CloudWatch 指标监控与 Aurora 数据库实例关联的本地存储空间。要监控与 RDS MySQL 实例关联的空闲数据存储空间,请使用 FreeStorageSpace CloudWatch 指标。

优化查询以减少临时表

某些查询可能会生成可能导致错误的大型临时表。

要优化查询,请执行以下操作:

  • 使用适当的索引,特别是对于涉及 GROUP BYORDER BY、子查询和分区表视图的查询。
  • 对分区表进行查询时使用分区修剪,这样就不会扫描整个表。
  • 使用索引进行文件排序的查询来生成隐式临时表。或者,调整 sort_buffer_size 参数。

解决存储空间已满问题的其他原因

以下问题也可能导致兼容 Amazon RDS 和 Aurora MySQL 的实例出现存储空间已满问题:

  • 超出本地存储容量的大型数据库或表大小。
  • 审计日志、慢速查询日志或常规查询日志的本地磁盘空间使用情况。

要解决这些错误,请执行以下操作:

  • 对于 DDL 操作,例如索引重建或表更改,请使用 Percona 工具包,这样就不会生成大型临时表。有关详细信息,请参阅 Percona 网站上的 pt-online-schema-change
  • 监控本地存储使用情况。
  • 优化查询和表结构。
  • 关闭日志。
  • 扩展您的 Aurora MySQL 实例以增加本地存储容量。

相关信息

Use the TempTable Storage Engine on Amazon RDS for MySQL and Amazon Aurora MySQL(在 Amazon RDS for MySQL 和 Amazon Aurora MySQL 上使用 TempTable 存储引擎)

Aurora MySQL 版本 3 中的新临时表行为

Aurora MySQL 的临时存储限制

AWS 官方已更新 4 个月前