• Brusque/SC
  • (47) 3053-7082
-
-

Blog

24 de julho de 2025

Áreas de Memória no MySQL: Como Configurar Corretamente

Uma correta configuração das áreas de memória é um dos pilares da performance em qualquer banco de dados. Um ambiente com uma memória subdimensionada pode apresentar lentidões e alto impacto de IO de disco. Enquanto uma super alocação da memória pode também ocasionar instabilidades e erros de out of memory (falta de memória para os processos em execução).

1. Visão Geral: Tipos de Alocação de Memória

O MySQL aloca a memória em dois principais grupos, a memória global (compartilhada) e a memória por thread (por conexão). Essa separação é essencial e impacta diretamente no consumo de memória do servidor e no comportamento. 
 
Memória Global (Global Memory): é alocada uma única vez, no momento em que o serviço do MySQL é iniciado. 
 
Exemplos:
  • innodb_buffer_pool_size: cache de dados e índices do InnoDB;
  • key_buffer_size: cache para índices MyISAM;
  • table_open_cache: cache de descritores de tabela;
  • query_cache_size (obsoleto a partir do MySQL 8.0).
Características:
  • Não cresce com o número de conexões;
  • Ideal para definir proporcionalmente à RAM total;
  • Garante performance em acesso a disco e leitura de dados.
Memória por Thread (Thread/Connection Memory): é alocada individualmente para cada sessão ativa. Desta forma, quanto maior o número de conexões simultâneas, maior será o consumo total.
 
Exemplos:
  • sort_buffer_size: buffer para ordenações;
  • read_buffer_size: buffer para leitura sequencial;
  • join_buffer_size: buffer para joins sem índice;
  • tmp_table_size: limite para criação de tabelas temporárias em RAM;
  • net_buffer_length, max_allowed_packet.
Características:
  • Multiplicada por max_connections;
  • Pode gerar consumo excessivo de memória se mal configurada;
  • Afeta diretamente a escalabilidade.

2. Principais Áreas de Memória

  • InnoDB Buffer Pool (innodb_buffer_pool_size)
Função: Armazena dados e índices do InnoDB em memória e reduz leituras em disco, acelerando consultas.
 
Recomendação: 60% a 80% da RAM total, em servidores dedicados apenas ao MySQL. Para ambientes com cargas mistas, ajuste para deixar espaço ao SO e outros serviços.
  • InnoDB Log Buffer (innodb_log_buffer_size)
Função: Armazena modificações em memória antes de serem escritas nos redo logs no disco.
 
Recomendação: Para cargas com muitas transações pequenas, aumente esse valor. Padrão: 16M, pode ser ajustado para 64M ou mais em sistemas OLTP com alta escrita.
  • Sort Buffer (sort_buffer_size)
Função: Buffer por conexão usado para ordenações (ORDER BY, GROUP BY).
 
Recomendação: Comece com valores entre 1M a 4M. Cuidado: é alocado por conexão, pode afetar OOM em ambientes com muitas conexões simultâneas.
  • Join Buffer (join_buffer_size)
Função: Usado quando o MySQL precisa realizar joins sem índices apropriados.
 
Recomendação: Manter entre 1M a 4M por conexão. Se for necessário aumentar muito esse valor, talvez seja hora de rever os índices.
  • Read Buffer (read_buffer_size e read_rnd_buffer_size)
Função: Buffers de leitura para varreduras de tabela.
 
Recomendação: Usar valores baixos a moderados (ex: 512K a 2M). Como são buffers por conexão, o uso excessivo pode afetar o consumo total de RAM.
  • Tabela Temporária na Memória (tmp_table_size e max_heap_table_size)
Função: Define o limite máximo para que uma tabela temporária seja criada na memória. Ultrapassado o valor, é criada em disco, o que é mais lento.
 
Recomendação: Mantenha ambos com o mesmo valor, pois o menor prevalece. Aumente se você detectar muitas Created_tmp_disk_tables.
  • Key Buffer (key_buffer_size) — exclusivo MyISAM
Função: Cache de índices das tabelas MyISAM.
 
Recomendação: Se não usa MyISAM, mantenha um valor pequeno. Se usa MyISAM ativamente, considere valores maiores, até 25% da RAM disponível.
  • Table Cache (table_open_cache e table_definition_cache)
Função: Cache de descritores de tabela abertos, evita overhead de abertura repetida.
 
Recomendação: Ajustar conforme o número de tabelas ativas e consultas concorrentes. Use SHOW STATUS LIKE 'Opened_tables' para avaliar.
 
ATENÇÃO: Antes de ajustar qualquer parâmetro de memória.
  • Verifique as variáveis ativas (SHOW VARIABLES);
  • Analise o comportamento do banco (SHOW STATUS);
  • Monitore o sistema operacional;
  • Use ferramentas como o Performance Schema e mysqltuner.
Esses passos evitam o risco de causar um OOM (Out of Memory) e ajudam a garantir que cada byte de RAM esteja sendo usado com inteligência.
Postado por: Jhonata Lamim.
252 visualizações

Compartilhe este post

Converse com a equipe Exímio

Encontre a melhor solução para sua empresa
Agende uma conversa com a nossa equipe!

Conteudo

Newsletter

Receba todas as nossas
novidades no seu e-mail

 
Fale conosco! WhatsApp