← Voltar ao blog
MySQL 5 min de leitura

Como otimizar o InnoDB buffer pool no MySQL e MariaDB

O buffer pool é a memória mais importante do MySQL e do MariaDB. Veja como dimensionar, medir e ajustar sem reiniciar.

Como otimizar o InnoDB buffer pool no MySQL e MariaDB

Ler da memória é ordens de grandeza mais rápido do que ler do disco, mesmo de SSD. O buffer pool é a área de memória onde o InnoDB, do MySQL e do MariaDB, guarda páginas de dados e índices. Se ele for pequeno, o banco vive buscando no disco. É o ajuste de maior impacto que existe.

Resumo rápido: O buffer pool é a memória mais importante do MySQL e do MariaDB. Veja como dimensionar, medir e ajustar sem reiniciar.

Série MySQL e MariaDB na prática: comandos válidos para MySQL 8.x e MariaDB 10.6+/11.x, com as diferenças indicadas quando existem.

Como funciona

          consulta
             │
     ┌───────▼────────┐  página está aqui?  ── sim ──▶ resposta em microssegundos
     │  BUFFER POOL   │
     │ new  ◀─▶  old  │  (LRU em duas partes: páginas quentes x recém-lidas)
     └───────┬────────┘
             │ não
     ┌───────▼────────┐
     │     disco      │  milissegundos (e espera na fila de I/O)
     └────────────────┘

Qual o tamanho certo?

Regra de partida para servidor dedicado: 60% a 75% da RAM. Sobra memória para o sistema operacional, conexões e buffers por sessão. O objetivo real é que o conjunto de trabalho (os dados usados com frequência) caiba na memória, não o banco inteiro.

[mysqld]   # ou [mariadb]
innodb_buffer_pool_size = 24G      # servidor de 32 GB dedicado
innodb_buffer_pool_instances = 8   # MySQL; no MariaDB 10.5+ é ignorado (uma instância)

Medindo: hit ratio e leituras de disco

SELECT
  (1 - (SELECT variable_value FROM performance_schema.global_status WHERE variable_name='Innodb_buffer_pool_reads')
     / (SELECT variable_value FROM performance_schema.global_status WHERE variable_name='Innodb_buffer_pool_read_requests')
  ) * 100 AS hit_ratio_pct;

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages%';   -- free, data, dirty
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_wait_free'; -- > 0 = faltou página livre

Hit ratio acima de 99% é o normal num sistema saudável, mas não se iluda: olhe a taxa de Innodb_buffer_pool_reads por segundo. Centenas por segundo significam disco trabalhando.

Redimensionar sem reiniciar

SET GLOBAL innodb_buffer_pool_size = 28 * 1024 * 1024 * 1024;
SHOW STATUS LIKE 'Innodb_buffer_pool_resize_status';

Funciona nos dois. Lembre de gravar o valor no arquivo de configuração, ou ele volta ao antigo no próximo restart.

Warm-up depois do restart

innodb_buffer_pool_dump_at_shutdown = ON
innodb_buffer_pool_load_at_startup  = ON

O servidor salva a lista de páginas quentes e as recarrega ao subir. Sem isso, a primeira hora depois de um restart é lenta.

Erros comuns

  • Buffer pool maior que a RAM disponível: swap e, no limite, o OOM killer derruba o servidor.
  • Servidor compartilhado com aplicação: 70% da RAM vira agressivo demais.
  • Achar que memória resolve query ruim: um full scan em tabela de 500 GB não cabe em lugar nenhum. Veja índices: quando criar e quando remover.

A série completa: MySQL e MariaDB na prática

Precisa de ajuda especializada?

Se o seu ambiente MySQL ou MariaDB precisa de diagnóstico, otimização, backup confiável ou acompanhamento contínuo, conheça a HTI Tecnologia, especialista em bancos de dados.

Ainda decidindo entre os dois? Leia MySQL ou MariaDB: qual é o melhor? e o guia definitivo de MySQL.

Quer dominar a base que os dois compartilham?

MariaDB nasceu do MySQL, e tudo o que é fundamento (modelagem, índices, transações, replicação, otimização) vale para os dois. É isso que eu ensino no livro Aprendendo MySQL: Prática, Teoria, Laboratórios, Desafios e Projetos: 292 páginas, 10 laboratórios guiados, 277 exercícios e 4 desafios com gabarito, e uma máquina virtual pronta para você quebrar (e consertar) à vontade.

Conheça o livro e leia a degustação gratuita.

Bora trocar ideia?

Se este artigo te ajudou (ou te fez discordar, que também vale), me siga no LinkedIn e no Instagram. Lá eu posto bastidores de banco de dados, história da computação e histórias de produção que ninguém conta em curso oficial.


Sobre o autor: Alexandre Almeida atua com bancos de dados há mais de 25 anos, foi instrutor oficial de MySQL e Oracle para mais de 1.000 alunos e escreveu Aprendendo MySQL: Prática, Teoria e Laboratórios.

Fontes: MySQL 8.4 Reference Manual (Oracle), MariaDB Server Documentation (MariaDB Knowledge Base), documentação do Percona Toolkit e do Percona XtraBackup. Imagem de capa: ilustração gerada por IA (mãos instalando módulos de memória ram em uma placa de servidor).