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.

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
- MySQL e MariaDB lentos? 12 causas comuns (e como resolver)
- Como fazer um health check completo no MySQL e MariaDB
- MySQL e MariaDB travando? Entenda locks e deadlocks
- Como otimizar o InnoDB buffer pool no MySQL e MariaDB
- Como encontrar queries lentas no MySQL e MariaDB
- Índices no MySQL e MariaDB: quando criar e quando remover
- Consultoria MySQL e MariaDB: quando vale a pena contratar um DBA especializado?
- DBA remoto para MySQL e MariaDB: como funciona?
- Assessment MySQL e MariaDB: o que é avaliado?
- Backup e disaster recovery no MySQL e MariaDB
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).