Memória do RDS para PostgreSQL
A memória do RDS para PostgreSQL está dividida em compartilhada e local.
Memória compartilhada no RDS para PostgreSQL
O RDS para PostgreSQL aloca memória compartilhada quando a instância é iniciada. A memória compartilhada está dividida em várias subáreas. A seguir, você encontrará uma descrição das mais importantes.
Buffers compartilhados
O grupo de buffer compartilhado é uma área de memória do RDS para PostgreSQL que contém todas as páginas que estão ou estavam sendo utilizadas por conexões de aplicações. Uma página é a versão de memória de um bloco de disco. O grupo de buffer compartilhado armazena em cache os blocos de dados lidos do disco. O grupo reduz a necessidade de reler dados do disco, fazendo com que o banco de dados opere de maneira mais eficiente.
Cada tabela e índice são armazenados como uma matriz de páginas com tamanho fixo. Cada bloco contém várias tuplas, que correspondem a linhas. Uma tupla pode ser armazenada em qualquer página.
O grupo de buffer compartilhado possui memória finita. Se uma nova solicitação exigir uma página que não esteja na memória e não houver mais memória, o RDS para PostgreSQL removerá uma página utilizada com menos frequência para acomodar essa solicitação. A política de despejo é implementada por um algoritmo de varredura de relógio.
O parâmetro shared_buffers
determina a quantidade de memória que o servidor dedica ao armazenamento em cache de dados.
Buffers de log de gravação antecipada (WAL)
Um buffer de log de gravação antecipada (WAL) mantém dados de transação que o RDS para PostgreSQL grava posteriormente no armazenamento persistente. Utilizando o mecanismo WAL, o RDS para PostgreSQL pode fazer o seguinte:
-
Recupere dados após uma falha
-
Reduzir a E/S de disco, evitando gravações frequentes em disco
Quando um cliente altera dados, o RDS para PostgreSQL grava as alterações no buffer de WAL. Quando o cliente emite um COMMIT
, o processo gravador WAL grava dados de transação no arquivo de WAL.
O parâmetro wal_level
determina quantas informações são gravadas no WAL.
Memória local no RDS para PostgreSQL
Todo processo de backend aloca memória local para processamento de consultas.
Tópicos
Área de memória de trabalho
A área de memória de trabalhocontém dados temporários para consultas que executam classificações e hashes. Por exemplo, uma consulta com uma cláusula ORDER BY
executa uma classificação. Consultas usam tabelas de hash em agregações e junções de hash.
O parâmetro work_mem
é a quantidade de memória a ser utilizada por operações de classificação internas e tabelas de hash antes da gravação em arquivos de disco temporários. O valor padrão é 4 MB. Várias sessões podem ser executadas simultaneamente, e cada uma pode executar operações de manutenção em paralelo. Por esse motivo, a memória de trabalho total utilizada pode ser múltiplos da configuração work_mem
.
Área de memória de trabalho para manutenção
A área de memória de trabalho para manutenção armazena dados em cache para operações de manutenção. Essas operações incluem aspiração, criação de índices e adição de chaves externas.
O parâmetro maintenance_work_mem
especifica a quantidade máxima de memória a ser utilizada por operações de manutenção. O valor padrão é 64 MB. Uma sessão de banco de dados apenas pode executar uma operação de manutenção de cada vez.
Área de buffer temporária
A área de buffer temporária armazena tabelas temporárias em cache para cada sessão de banco de dados.
Cada sessão aloca buffers temporários conforme necessário até o limite especificado. Quando a sessão termina, o servidor limpa os buffers.
O parâmetro temp_buffers
define o número máximo de buffers temporários utilizados por cada sessão. Antes do primeiro uso de tabelas temporárias em uma sessão, é possível alterar o valor de temp_buffers
.