O Que Ninguém Te Contou Sobre a Configuração do WiredTiger (e Como Isso Está Devorando Sua RAM)

setembro 19, 2025 | por dbsnoop

Monitoramento  Observabilidade Bancos de dados na nuvem
O Que Ninguém Te Contou Sobre a Configuração do WiredTiger (e Como Isso Está Devorando Sua RAM)

Sua equipe olha para o painel de monitoramento e a métrica é alarmante: o processo mongodb está consumindo 80%, 90% ou até mais da memória RAM total do servidor. O instinto imediato é de pânico. A primeira suspeita recai sobre um vazamento de memória na aplicação ou queries ineficientes que carregam dados demais. Em casos extremos, o medo do OOM (Out-of-Memory) Killer do Linux — o processo do sistema operacional que mata aplicações para evitar um crash do servidor — se torna uma preocupação real e iminente. Mas, na grande maioria dos casos, a causa não é um bug, nem um erro. É uma feature incompreendida.

O que ninguém te contou é que seu MongoDB está, por padrão, projetado para ser guloso com a memória. O motor de armazenamento por trás dele, o WiredTiger, tenta agressivamente usar uma porção significativa da RAM disponível para seu cache interno. O objetivo é nobre: manter o máximo de dados e índices em memória para que as leituras sejam absurdamente rápidas, evitando o lento acesso ao disco. O problema é que a configuração padrão desse cache é uma faca de dois gumes. Em muitos cenários, ela pode ser o catalisador silencioso para a instabilidade do seu ambiente, sufocando o sistema operacional e outros processos essenciais.

O Padrão Perigoso: A Lógica “Caixa Preta” do Cache

Por padrão, a partir do MongoDB 3.4, o WiredTiger aloca para seu cache o maior valor entre:

  1. 50% da RAM total menos 1 GB.
  2. 256 MB.

Em um servidor com 64GB de RAM, por exemplo, o cache do WiredTiger tentará reservar para si (64 * 0.5) – 1 = 31GB. Isso significa que mais da metade da memória do seu servidor é, por padrão, dedicada a uma única função. Em um servidor dedicado exclusivamente ao MongoDB, isso pode ser aceitável. Mas em um ambiente real — rodando em contêineres, compartilhando recursos com outras aplicações ou com o próprio sistema operacional precisando de memória para seus buffers — essa configuração padrão pode ser desastrosa.

Diagnóstico Prático: Veja o Tamanho do Apetite do Seu Cache

Antes de alterar qualquer coisa, você precisa de dados. Felizmente, o MongoDB oferece uma visão clara do estado do cache do WiredTiger.

Código: Inspecionando o Cache do WiredTiger

Conecte-se ao seu mongosh e execute o seguinte comando para obter um status detalhado do motor de armazenamento:codeJavaScript

// Este comando retorna um documento gigante. Estamos interessados 
// especificamente na seção 'wiredTiger.cache'.
db.serverStatus().wiredTiger.cache

O que procurar na saída:

  • “maximum bytes configured”: Mostra o tamanho máximo, em bytes, que o cache foi configurado para usar. Este é o seu limite superior.
  • “bytes currently in the cache”: O tamanho real do cache no momento. Isso lhe diz quanto daquele limite está sendo efetivamente utilizado.
  • “pages read into cache” e “pages written from cache”: Se esses números estiverem crescendo muito rapidamente, é um sinal de que o cache é pequeno demais e o MongoDB está constantemente lendo do disco (cache miss), o que causa alta latência de I/O.

Este diagnóstico rápido te dá uma imagem clara: o MongoDB está usando a quantidade de memória que você esperava? Ou a configuração padrão criou um gigante faminto por RAM dentro do seu servidor?

Monitoramento  Observabilidade Bancos de dados na nuvem

O Dilema da Configuração: O Ponto de Equilíbrio

Uma configuração incorreta do cache leva a dois cenários de falha distintos:

  1. Cache Grande Demais (O Risco de Asfixia): Se o cache do WiredTiger é muito grande, ele deixa pouca memória para o sistema operacional e quaisquer outros processos rodando na máquina. O SO pode começar a usar a memória de troca (swap) no disco, o que é catastroficamente lento e anula todo o benefício de ter um cache. No pior cenário, o OOM Killer do Linux identificará o mongod como o culpado pelo consumo de memória e o encerrará abruptamente, causando uma parada total do seu banco de dados.
  2. Cache Pequeno Demais (O Risco de Lentidão): Com medo do consumo de RAM, muitas equipes definem um cache muito pequeno. O resultado é um “cache churn” constante. O MongoDB precisa ler dados do disco, colocá-los no cache, e quase imediatamente removê-los para dar espaço a novos dados. Isso se manifesta como baixa utilização de RAM, mas alta latência, I/O de disco elevado e uma performance geral ruim.

Código: Assumindo o Controle da Configuração

A solução é definir manualmente um tamanho de cache que faça sentido para a sua carga de trabalho e seu ambiente. Isso é feito no arquivo de configuração do MongoDB (mongod.conf).codeYaml

# Exemplo de configuração no seu arquivo mongod.conf
# Define um limite rígido de 16GB para o cache do WiredTiger.

storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 16

Após aplicar essa configuração e reiniciar o processo mongod, você terá controle total sobre o apetite de memória do seu banco de dados.

A Solução de Engenharia: Da Adivinhação à Observabilidade com dbsnOOp

Definir o cacheSizeGB resolve o problema do consumo descontrolado, mas cria uma nova pergunta: qual é o número certo? 16GB? 24GB? 10GB? A resposta correta não é um número fixo, mas um ponto de equilíbrio que depende da sua carga de trabalho, e essa carga muda com o tempo.

É aqui que a adivinhação manual termina e a engenharia de performance começa.

  • Análise de Cache Hit Ratio: A dbsnOOp monitora continuamente a eficiência do seu cache. Ela calcula a taxa de acertos (cache hit ratio), mostrando a porcentagem de leituras que são atendidas pela memória versus pelo disco. Uma taxa de acerto consistentemente alta (acima de 99%) indica um cache saudável. Uma queda nessa métrica após um deploy pode indicar uma nova consulta que está invalidando o cache.
  • Correlação com a Latência: A plataforma correlaciona as métricas do cache (como páginas lidas do disco) com a latência das suas queries. Isso permite que você veja o impacto direto de um cache subdimensionado na experiência do usuário final.
  • Visibilidade Histórica: Em vez de olhar para um snapshot momentâneo com serverStatus, a dbsnOOp fornece um histórico completo. Isso permite que você tome decisões informadas, como aumentar o cache durante picos sazonais ou reduzi-lo em períodos de baixa atividade para economizar custos na nuvem.

Não deixe que uma configuração padrão e mal compreendida dite a estabilidade do seu ambiente MongoDB.

Assuma o controle do seu consumo de memória com base em dados, não em medo. 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.

Monitoramento  Observabilidade Bancos de dados na nuvem

Leitura Recomendada

  • Ajuste Fino MongoDB: Este é o complemento mais direto e essencial ao tema do artigo. Aprofunde seus conhecimentos em outras técnicas e estratégias de otimização específicas para o MongoDB, indo além do cache para otimizar índices, queries e schema.
  • Monitoramento e Observabilidade na Nuvem: O Guia Essencial para o seu Banco de Dados: A gestão de recursos como a RAM é crítica em ambientes de nuvem onde cada gigabyte tem um custo. Este artigo explora os desafios de garantir a performance e o controle de custos em plataformas como o MongoDB Atlas.
  • IA Tuning Banco de Dados: Descubra como a Inteligência Artificial pode analisar padrões complexos de uso de memória e I/O para recomendar configurações ótimas, transformando o “jogo de adivinhação” do tuning em uma ciência de dados.
Compartilhar:

Leia mais

MONITORE SEUS ATIVOS COM O FLIGHTDECK

SEM INSTALAÇÃO – 100% SAAS

Preencha para receber o acesso ao trial

*Obrigatórias