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 |
|
|
Metadados de tabelas de usuário |
Sim — |
|
|
Tuplas de tabelas de sistema |
Sim — |
|
|
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.
-
Instale a extensão:
CREATE EXTENSION rdsutils; No console do ApsaraDB RDS, defina
rds_enable_cache_monitorcomoon. Modifique o parâmetrords_enable_cache_monitorapenas 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 |
|
|
Monitora o uso de cache por conexão. |
|
|
— |
|
|
Número máximo de tabelas de usuário armazenadas em cache por conexão. Defina como |
De |
|
|
|
|
Número máximo de tuplas de tabelas de sistema armazenadas em cache por conexão. Defina como |
De |
|
|
Definirrds_relcache_max_cached_relationsourds_syscache_max_cached_tuplescom 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.