Ajustar (“tunar”) o my.cnf corretamente faz muita diferença em servidores com muita RAM e muitos cores, principalmente em ambientes de hospedagem, WordPress e bancos com alta concorrência. Abaixo vai um guia prático, focado em MariaDB/MySQL modernos rodando em servidores parrudos.
Vou assumir um cenário comum:
- Servidor dedicado ou VPS grande
- 16+ cores
- 64 GB, 128 GB ou mais de RAM
- Uso intenso de InnoDB (WordPress, WooCommerce, sistemas web)
1️⃣ Princípios importantes antes de tunar
Antes de sair aumentando números:
✔ InnoDB deve ser prioridade
✔ Evite overcommit de memória
✔ Prefira menos conexões bem atendidas do que milhares lentas
✔ MySQL não escala linearmente só aumentando buffers
⚠ Erro comum: max_connections alto + buffers grandes = OOM killer.
2️⃣ Configurações essenciais para servidores com muita RAM
🔹 InnoDB Buffer Pool (o mais importante)
👉 Deve usar 60% a 75% da RAM total se o servidor for dedicado ao MySQL.
Exemplos:
| RAM total | innodb_buffer_pool_size |
|---|---|
| 64 GB | 40G – 48G |
| 128 GB | 80G – 96G |
| 256 GB | 160G – 192G |
innodb_buffer_pool_size = 96G innodb_buffer_pool_instances = 16
📌 Regra prática:
- Até 64G → 8 instâncias
- 128G+ → 16 ou 32 instâncias
3️⃣ Ajustes de CPU e paralelismo
🔹 Threads e concorrência
innodb_read_io_threads = 16 innodb_write_io_threads = 16 innodb_thread_concurrency = 0
✔ 0 = o MySQL se autoajusta
✔ Ideal para servidores com muitos cores
4️⃣ Log e Flush (performance vs segurança)
🔹 Log de transações
innodb_log_file_size = 4G innodb_log_files_in_group = 2 innodb_flush_log_at_trx_commit = 2
📌 Benefícios:
- Escrita mais rápida
- Menos I/O
- Ideal para WordPress e aplicações web
⚠ Se precisar 100% ACID, use 1 (perde performance).
5️⃣ I/O e disco (SSD / NVMe)
🔹 Otimizações para SSD
innodb_flush_method = O_DIRECT innodb_io_capacity = 2000 innodb_io_capacity_max = 4000
📌 Para NVMe rápidos:
innodb_io_capacity = 5000 innodb_io_capacity_max = 10000
6️⃣ Conexões e buffers (muito cuidado aqui)
🔹 Conexões simultâneas
Evite exagerar:
max_connections = 300
✔ Para WordPress com PHP-FPM bem ajustado, 200–400 é suficiente.
🔹 Buffers por conexão (NÃO exagere)
sort_buffer_size = 4M join_buffer_size = 4M read_buffer_size = 2M read_rnd_buffer_size = 4M
📌 Esses buffers são por conexão ativa.
300 conexões × buffers grandes = desastre.
7️⃣ Query Cache (MariaDB)
⚠ Em MySQL 8, não existe mais.
Em MariaDB, pode ajudar em leitura intensa.
query_cache_type = 1 query_cache_size = 256M query_cache_limit = 4M
✔ Bom para sites com muitas leituras repetidas
❌ Ruim para escrita intensa
8️⃣ Tabela temporária e memória
tmp_table_size = 512M max_heap_table_size = 512M
✔ Evita tabelas temporárias em disco
✔ Ótimo para relatórios e consultas complexas
9️⃣ Configurações extras recomendadas
table_open_cache = 10000 table_definition_cache = 8000 open_files_limit = 100000
Ideal para servidores com muitos bancos e tabelas.
🔟 Exemplo de my.cnf para servidor grande (128 GB RAM)
[mysqld] max_connections = 300 innodb_buffer_pool_size = 96G innodb_buffer_pool_instances = 16 innodb_log_file_size = 4G innodb_log_files_in_group = 2 innodb_flush_log_at_trx_commit = 2 innodb_read_io_threads = 16 innodb_write_io_threads = 16 innodb_thread_concurrency = 0 innodb_flush_method = O_DIRECT innodb_io_capacity = 4000 innodb_io_capacity_max = 8000 tmp_table_size = 512M max_heap_table_size = 512M sort_buffer_size = 4M join_buffer_size = 4M read_buffer_size = 2M read_rnd_buffer_size = 4M table_open_cache = 10000 table_definition_cache = 8000 open_files_limit = 100000
1️⃣1️⃣ Ferramentas para validar seu tuning
✔ mysqltuner
✔ pt-query-digest (Percona Toolkit)
✔ SHOW ENGINE INNODB STATUS\G
✔ SHOW GLOBAL STATUS;
⚠ Alertas finais
🚫 Não copie configs cegamente
🚫 Não use 90% da RAM no MySQL se houver PHP, Nginx, Apache, Redis
🚫 Sempre reinicie o MySQL após mudar buffers grandes
Clique aqui e consulte nossos planos de Gerenciamento de Servidor
