Memória do RDS para PostgreSQL - Amazon Relational Database Service

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.

Á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.