

# 排查 Aurora PostgreSQL 中的存储问题
<a name="AuroraPostgreSQL.BestPractices.TroubleshootingStorage"></a>

如果排序或索引创建操作所需的工作内存量超过 `work_mem` 参数分配的量，则 Aurora PostgreSQL 将多余的数据写入到临时磁盘文件。写入数据时，Aurora PostgreSQL 使用它用于存储错误和消息日志的相同存储空间，也即*本地存储*。您的 Aurora PostgreSQL 数据库集群中的每个实例都有一定量的可用本地存储。存储量基于其数据库实例类。要增加本地存储量，您需要修改实例以使用更大的数据库实例类。有关数据库实例类规格，请参阅 [适用于 Aurora 的数据库实例类的硬件规格](Concepts.DBInstanceClass.Summary.md)。

您可以通过观看 Amazon CloudWatch 的 `FreeLocalStorage` 指标来监控 Aurora PostgreSQL 数据库集群的本地存储空间。此指标报告 Aurora 数据库集群中的每个数据库实例可用于临时表和日志的存储量。有关更多信息，请参阅 [使用 Amazon CloudWatch 监控 Amazon Aurora 指标](monitoring-cloudwatch.md)。

排序、索引和分组操作在工作内存中开始，但通常必须分载到本地存储。如果您的 Aurora PostgreSQL 数据库集群由于这些类型的操作而耗尽本地存储，则可以通过采取以下操作之一来解决问题。
+ 增加工作内存量。这减少了使用本地存储的需求。缺省情况下，PostgreSQL 为每个排序、分组和索引操作分配 4MB。要检查 Aurora PostgreSQL 数据库集群的写入器实例的当前工作内存值，请使用 `psql` 连接到该实例，并运行以下命令。

  ```
  postgres=> SHOW work_mem;
  work_mem
  ----------
   4MB
  (1 row)
  ```

  可以在排序、分组和其他操作之前增加会话级别的工作内存，如下所示。

  ```
  SET work_mem TO '1 GB';
  ```

  有关共享内存的更多信息，请参阅 PostgreSQL 文档中的[资源消耗量](https://www.postgresql.org/docs/current/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY)。
+ 更改日志保留期，以便将日志存储更短的时间范围。要了解如何操作，请参阅[Aurora PostgreSQL 数据库日志文件](USER_LogAccess.Concepts.PostgreSQL.md)。

对于大于 40TB 的 Aurora PostgreSQL 集数据库群，请勿使用 db.t2、db.t3 或 db.t4g 实例类。建议仅将 T 数据库实例类用于开发和测试服务器，或其他非生产服务器。有关更多信息，请参阅 [数据库实例类类型](Concepts.DBInstanceClass.Types.md)。