Shared Buffers e OS Page Cache do PostgreSQL: O que são e como configurar?

setembro 24, 2025 | por dbsnoop

Shared Buffers e OS Page Cache do PostgreSQL: O que são e como configurar?

Shared Buffers e OS Page Cache do PostgreSQL: O que são e como configurar?

Seu servidor PostgreSQL possui uma quantidade generosa de RAM, mas o comportamento da memória é confuso. Ferramentas como htop ou free -g mostram que a memória “livre” está perigosamente baixa, enquanto a memória “em cache/buffer” está altíssima. Ao mesmo tempo, a performance da aplicação é boa, mas você se preocupa que o sistema esteja à beira de um colapso por falta de RAM. Este cenário não é um sinal de problema; é um sinal de que o PostgreSQL, em conjunto com o sistema operacional Linux, está funcionando exatamente como foi projetado.

Diferente de outros SGBDs que tentam gerenciar a memória de forma quase exclusiva, o PostgreSQL adota uma abordagem colaborativa. Ele depende de dois níveis de cache de dados: seu próprio cache interno, o shared_buffers, e o cache do sistema operacional, o OS Page Cache. Entender a dinâmica entre esses dois caches é a chave para o tuning de memória eficaz no PostgreSQL e para evitar a configuração errada mais comum de todas: alocar memória demais para o lugar errado.

A Arquitetura de Duplo Cache: Uma Parceria Silenciosa

Para otimizar o PostgreSQL, você precisa pensar como ele. Cada leitura de dados do disco passa por uma parceria de duas camadas.

1. Shared Buffers: A Oficina Privada do PostgreSQL

O shared_buffers é uma área de RAM gerenciada diretamente pelo PostgreSQL. É o seu cache de trabalho principal. Quando o PostgreSQL modifica dados (um UPDATE ou INSERT), ele obrigatoriamente traz a página de dados para dentro do shared_buffers antes de alterá-la. Ele é, essencialmente, a oficina onde todo o trabalho sujo é feito.

  • Parâmetro de Configuração: shared_buffers no arquivo postgresql.conf.

2. OS Page Cache: O Armazém Gigante do Sistema Operacional

O sistema operacional (especialmente o Linux) é extremamente agressivo e eficiente em usar toda a memória “livre” como um cache de arquivos, o Page Cache. Quando qualquer aplicação lê um arquivo do disco, o SO mantém uma cópia desse bloco na RAM. Na próxima vez que o mesmo bloco for solicitado, ele é servido diretamente da memória, sem tocar no disco. O PostgreSQL armazena seus dados em arquivos, então ele se beneficia enormemente deste mecanismo.

  • Parâmetro de Configuração: Nenhum. É gerenciado automaticamente pelo sistema operacional.

Como Eles Trabalham Juntos (O Fluxo de Leitura)

  1. Uma query precisa de uma página de dados.
  2. PostgreSQL primeiro procura no shared_buffers.
  3. Cache Hit (Nível 1): Se a página está lá, ela é usada imediatamente. Performance máxima.
  4. Cache Miss (Nível 1): Se não está, o PostgreSQL pede a página ao sistema operacional.
  5. O SO primeiro procura em seu OS Page Cache.
  6. Cache Hit (Nível 2): Se a página está no cache do SO, ela é copiada para o shared_buffers (uma operação rápida de RAM para RAM) e então usada. Performance muito boa.
  7. Cache Miss (Nível 2): Se a página não está em nenhum dos caches, o SO a lê do disco físico (operação lenta), a coloca no OS Page Cache, e a entrega ao PostgreSQL, que a coloca no shared_buffers. Performance mais baixa.

A Configuração Correta: Menos é (Muitas Vezes) Mais

O erro mais comum que administradores vindos de outros SGBDs cometem é alocar uma porcentagem enorme da RAM do servidor (70-80%) para o shared_buffers. No PostgreSQL, isso pode ser desastroso para a performance.

Ao superdimensionar o shared_buffers, você “rouba” memória que o sistema operacional poderia usar para o seu eficiente Page Cache. Isso leva a um efeito de “duplo cache”, onde os mesmos dados podem acabar existindo tanto no shared_buffers quanto no Page Cache, um desperdício de RAM.

A Regra de Ouro (Ponto de Partida):
Para um servidor de banco de dados dedicado, a recomendação padrão para o shared_buffers é 25% da RAM total do sistema.

  • Servidores com muita RAM (>32GB): Pode-se aumentar, mas raramente faz sentido passar de 40%. Para cargas de trabalho que cabem inteiramente na RAM, o valor pode ser maior.
  • A Chave é o Equilíbrio: O objetivo é dar ao PostgreSQL memória suficiente para suas operações de escrita e dados mais “quentes”, enquanto deixa a maior parte da RAM para o OS Page Cache, que é extremamente eficiente em gerenciar leituras para o “working set” geral.

Código 1: Verificando e Configurando o shared_buffers

-- 1. Verifique a configuração atual (conectado ao psql)
SHOW shared_buffers;

Para alterar, edite o arquivo postgresql.conf:

# Exemplo para um servidor com 64GB de RAM
# 25% de 64GB = 16GB
shared_buffers = 16GB

Importante: Esta é uma alteração que requer a reinicialização do serviço do PostgreSQL para ter efeito.

Validação: Sua Configuração Está Sendo Eficaz?

Você precisa medir a eficiência do seu shared_buffers. A métrica para isso é a Taxa de Acertos do Cache (Cache Hit Rate).

Código 2: Calculando o Cache Hit Rate

-- Esta consulta calcula o hit rate para o banco de dados atual.
SELECT
    'shared_buffers_hit_rate' AS metric,
    (sum(blks_hit) * 100) / sum(blks_hit + blks_read) AS value
FROM
    pg_stat_database
WHERE
    datname = current_database();

O que procurar: Uma taxa de acerto consistentemente acima de 99% é o alvo. Isso indica que quase todas as requisições de dados que chegam ao shared_buffers são atendidas por ele, e ele está funcionando como uma “oficina” eficiente para os dados mais ativos. Se o hit rate for baixo, pode ser um sinal de que o shared_buffers está, de fato, pequeno demais para sua carga de trabalho de escrita/modificação.

Da Configuração Estática à Otimização Contínua com dbsnOOp

A regra dos “25%” é um excelente ponto de partida, mas não é uma lei universal. A carga de trabalho ideal para seu ambiente pode ser 30% ou 20%. Encontrar esse ponto de equilíbrio ótimo requer análise contínua.

dbsnOOp eleva este processo de uma configuração estática para uma otimização dinâmica.

  • Monitoramento Histórico do Hit Rate: A dbsnOOp rastreia a eficiência do seu shared_buffers ao longo do tempo. Você pode correlacionar quedas no hit rate com novos deploys ou mudanças na carga de trabalho, entendendo o impacto real no seu cache.
  • Análise de I/O e Performance de Consultas: A plataforma correlaciona as métricas de cache com a latência das consultas e a atividade de I/O do sistema. Isso permite que você veja se um shared_buffers maior ou menor resulta em melhor performance geral, permitindo um tuning fino baseado em dados reais, não em regras de ouro.

Pare de tratar a memória do PostgreSQL como uma caixa preta. Entenda a parceria entre o shared_buffers e o OS Page Cache para destravar a verdadeira performance do seu ambiente.

Marque uma reunião com nosso especialista ou assista a uma demonstração na prática.

Agende uma demonstração aqui

Saiba mais sobre o dbsnOOp!

Visite nosso canal no youtube e aprenda sobre a plataforma e veja tutoriais

Aprenda sobre monitoramento de banco de dados com ferramentas avançadas aqui.

Leitura Recomendada

  • Ajuste Fino PostgreSQL: Este é o complemento mais direto e essencial ao tema do artigo. A configuração de shared_buffers é a base, e este guia explora outras técnicas e estratégias de otimização para o PostgreSQL.
  • IA Tuning Banco de Dados: Descubra como a Inteligência Artificial pode analisar a complexa interação entre shared_buffers, o OS Page Cache e sua carga de trabalho para recomendar uma configuração ótima, indo além das regras de ouro.
  • Monitoramento e Observabilidade na Nuvem: O Guia Essencial para o seu Banco de Dados: A gestão de memória na nuvem tem um impacto direto nos custos. Este artigo explora os desafios de garantir a performance e a eficiência de recursos em provedores como AWS e Azure.
Compartilhar:

Leia mais

MONITORE SEUS ATIVOS COM O FLIGHTDECK

SEM INSTALAÇÃO – 100% SAAS

Preencha para receber o acesso ao trial

*Obrigatórias