改进了 Aurora PostgreSQL 中的内存管理 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

改进了 Aurora PostgreSQL 中的内存管理

客户工作负载耗尽数据库实例中的可用内存会导致操作系统重新启动数据库,从而导致数据库不可用。Aurora PostgreSQL 引入了改进的内存管理功能,可主动防止因可用内存不足而导致的稳定性问题和数据库重新启动。原定设置情况下,此改进在以下版本中可用:

  • 15.3 及更高的 15 版本

  • 14.8 及更高的 14 版本

  • 13.11 及更高的 13 版本

  • 12.15 及更高的 12 版本

  • 11.20 及更高的 11 版本

为了改进内存管理,它执行以下操作:

  • 当系统接近临界内存压力时,取消请求更多内存的数据库事务。

  • 当系统耗尽所有物理内存并即将耗尽交换空间时,系统将被认为处于临界内存压力之下。在这些情况下,任何请求内存的事务都将被取消,以立即降低数据库实例中的内存压力。

  • 必不可少的 PostgreSQL 启动器和后台工件(例如 autovacuum 工件)始终受到保护。

配置内存管理参数

开启内存管理

默认情况下,此功能处于启用状态。当由于内存不足而取消事务时,会显示一条错误消息,如以下示例所示:

ERROR: out of memory Detail: Failed on request of size 16777216.
关闭内存管理

要关闭此功能,请使用 psql 连接到 Aurora PostgreSQL 数据库集群,并对参数值使用 SET 语句,如下所述。

对于 Aurora PostgreSQL 11.21、12.16、13.12、14.9、15.4 及更早版本:

postgres=>SET rds.memory_allocation_guard = true;

在参数组中,rds.memory_allocation_guard 参数的默认值设置为 false

对于 Aurora PostgreSQL 12.17、13.13、14.10、15.5 及更高版本:

postgres=>rds.enable_memory_management = false;

在参数组中,rds.enable_memory_management 参数的默认值设置为 true

在数据库集群参数组中设置这些参数的值可以防止查询被取消。有关数据库集群参数组的更多信息,请参阅使用参数组

也可以在会话级别设置这些动态参数的值,以在改进的内存管理中包括或排除会话。

注意

我们建议不要关闭此功能,因为它可能会导致内存不足错误,从而由于系统内存耗尽而导致工作负载引起的数据库重新启动。