Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Use the cache eviction feature

Última atualização: Jun 26, 2026

A evicção de cache limita a quantidade de metadados acumulados por conexão persistente, evitando erros de falta de memória (OOM) em cargas de trabalho de Software como Serviço (SaaS) com muitas conexões persistentes. O recurso usa a política Least Recently Used (LRU) para liberar caches pouco utilizados, reduzindo o uso de memória por conexão e melhorando a estabilidade da instância.

Pré-requisitos

Antes de começar, verifique se:

  • Sua instância RDS executa o PostgreSQL 11 ou posterior

  • Caso o recurso ainda não esteja disponível, atualize a versão secundária do mecanismo da sua instância. Para mais informações, consulte Atualizar a versão secundária do mecanismo.

Contexto

Sempre que um processo de backend do PostgreSQL acessa uma tabela, ele armazena os metadados na memória local do processo. Esse cache nunca é liberado proativamente e se acumula durante toda a vida útil da conexão. Em cargas de trabalho com muitas conexões persistentes, isso pode exaurir a memória disponível e causar erros OOM.

Casos de uso

  • Aplicações SaaS que mantêm grande volume de conexões persistentes com o banco de dados

Observações de uso

  • Alguns caches não podem ser removidos para garantir o funcionamento correto da instância. Em casos extremos, o limite de cache configurado pode não ser totalmente aplicado.

  • Modifique os parâmetros descritos neste tópico não reinicia a instância.

Conceitos principais

O ApsaraDB RDS for PostgreSQL mantém três tipos de caches de conexão:

Tipo de cache

O que armazena

Limite configurável

relcache

Metadados de tabelas de usuário

Sim — rds_relcache_max_cached_relations

syscache

Tuplas de tabelas de sistema

Sim — rds_syscache_max_cached_tuples

plancache

Planos de execução definidos pelo usuário

Não

Configure a evicção de cache

Para a conexão atual

Execute as instruções SQL a seguir para definir limites apenas para a sessão atual.

-- Limit relcache to 1,000 user tables for the current connection
SET rds_relcache_max_cached_relations = 1000;

-- Remove the relcache limit for the current connection
SET rds_relcache_max_cached_relations = -1;

-- Limit syscache to 10,000 system table tuples for the current connection
SET rds_syscache_max_cached_tuples = 10000;

-- Remove the syscache limit for the current connection
SET rds_syscache_max_cached_tuples = -1;

Para todas as conexões

Defina rds_relcache_max_cached_relations e rds_syscache_max_cached_tuples no console do ApsaraDB RDS para aplicar os limites em toda a instância. Para mais informações, consulte Modificar os parâmetros de uma instância ApsaraDB RDS for PostgreSQL.

Monitore o uso de cache por processo

Para monitorar o uso de cache de cada conexão, instale a extensão rdsutils e ative o parâmetro de monitoramento de cache.

  1. Instale a extensão:

    CREATE EXTENSION rdsutils;
  2. No console do ApsaraDB RDS, defina rds_enable_cache_monitor como on. Modifique o parâmetro rds_enable_cache_monitor apenas no console do ApsaraDB RDS. Para mais informações, consulte Modificar os parâmetros de uma instância ApsaraDB RDS for PostgreSQL.

Ativar o rds_enable_cache_monitor adiciona aproximadamente 2 ms de sobrecarga por instrução SQL.

Parâmetros

Parâmetro

Descrição

Valores válidos

Padrão

Valor mínimo recomendado

rds_enable_cache_monitor

Monitora o uso de cache por conexão.

on, off

off

rds_relcache_max_cached_relations

Número máximo de tabelas de usuário armazenadas em cache por conexão. Defina como -1 para desativar o limite. Se usar tabelas particionadas ou a extensão timescaledb, configure este valor como -1 ou um valor alto.

De -1 até INT_MAX

-1 (ilimitado)

1000

rds_syscache_max_cached_tuples

Número máximo de tuplas de tabelas de sistema armazenadas em cache por conexão. Defina como -1 para desativar o limite. Se usar tabelas particionadas ou a extensão timescaledb, configure este valor como -1 ou um valor alto.

De -1 até INT_MAX

-1 (ilimitado)

5000

Definir rds_relcache_max_cached_relations ou rds_syscache_max_cached_tuples com valores muito baixos pode degradar o desempenho das consultas. Dimensione os limites com base na quantidade de tabelas e campos acessados pela carga de trabalho. Caso a aplicação acesse muitas tabelas, utilize um valor maior.