Aurora临时空间不足问题

aurora临时空间不足

查询aurora时,可能会遇到临时空间不足的问题

select count(xxx) from table1 where number >=5000 and number <600000;
ERROR: could not write to file "base/pgsql_tmp/pgsql_tmp28115.9": No space left on device.

Amazon Aurora 集群中的数据库实例有两种存储类型:

  • 用于持久性数据的存储(共享集群存储)
  • 用于临时数据和日志的存储(本地存储)。所有数据库文件(例如,错误日志、临时文件和临时表)存储在数据库实例的本地存储中。这包括排序操作、哈希表、查询所需的分组操作、错误日志占用的存储空间以及形成的临时表。

每个 Aurora 数据库实例包含有限数量的本地存储,这由数据库实例类决定。通常,本地存储量的数量是数据库实例上的内存数量的两倍。

可使用 Amazon CloudWatch 中的 FreeLocalStorage 指标,监控与 Aurora 数据库实例或节点相关的本地存储空间。该指标报告每个数据库实例中可用于临时表和日志的存储数量。

在数据库实例上用尽临时存储空间时,可能会发生此错误。修改大型表、在大型表上添加索引的操作或者使用复杂 JOIN、GROUP BY 或 ORDER BY 子句执行大型 SELECT 查询的操作可能会导致这些错误。

对于临时文件,在 Aurora PostgreSQL 数据库实例上启用 log_temp_files 参数。此参数记录大小超过指定的千字节数的临时文件使用情况。启用此参数后,删除每个临时文件时将会为该文件创建一个日志条目。值为 0 时记录所有临时文件信息,正值只记录大于或等于指定千字节数的文件。默认值为 -1,这将禁用临时文件日志记录。您可以使用此参数来识别临时文件详细信息,然后您可以将这些临时文件与 FreeLocalStorage 指标关联。

**注意:**启用 log_temp_files 参数可能导致 Aurora PostgreSQL 数据库实例上的日志记录过多。因此,最佳实践是在启用 log_temp_files 之前检查 Aurora PostgreSQL 日志文件大小。如果 Aurora PostgreSQL 日志文件消耗的本地存储空间最多,您可以通过降低 rds.log_retention 参数的值回收空间。rds.log_retention 的默认值为三天。

解决方式

将机器型号扩大。