Voltar ao blog
Janeiro 27, 2026Guias

Como Otimizar o Desempenho do MySQL

Guia completo para otimização do desempenho do banco de dados MySQL: ajuste de configuração, otimização de consultas, indexação e monitoramento.

Como Otimizar o Desempenho do MySQL

A otimização de desempenho do MySQL é crucial para aplicações que lidam com grandes quantidades de dados ou alto tráfego. Este guia cobre técnicas essenciais para melhorar o desempenho do MySQL, desde ajustes de configuração até otimização de consultas.

Otimizando Configuração do MySQL

Edite o arquivo de configuração do MySQL para otimizar o desempenho com base nos recursos do seu servidor:

bash
# Editar configuração do MySQL (Ubuntu/Debian)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# Editar configuração do MySQL (CentOS/RHEL)
sudo nano /etc/my.cnf

# Adicionar ou modificar estas configurações:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
query_cache_size = 64M
query_cache_type = 1
tmp_table_size = 64M
max_heap_table_size = 64M

# Reiniciar MySQL
sudo systemctl restart mysql  # Ubuntu/Debian
sudo systemctl restart mysqld   # CentOS/RHEL

Otimização InnoDB

InnoDB é o mecanismo de armazenamento padrão do MySQL. Otimize-o para melhor desempenho:

bash
# Em /etc/mysql/mysql.conf.d/mysqld.cnf ou /etc/my.cnf
[mysqld]
# Pool de buffer InnoDB (use 70-80% da RAM disponível)
innodb_buffer_pool_size = 2G

# Tamanho do arquivo de log InnoDB
innodb_log_file_size = 512M

# Método de flush InnoDB (para SSD)
innodb_flush_method = O_DIRECT

# Threads I/O InnoDB
innodb_read_io_threads = 4
innodb_write_io_threads = 4

# Flush de log InnoDB no commit da transação
innodb_flush_log_at_trx_commit = 2

Configuração de Cache de Consultas

O cache de consultas pode melhorar o desempenho para cargas de trabalho intensivas em leitura (Nota: O cache de consultas está obsoleto no MySQL 8.0):

bash
# Para MySQL 5.7 e anteriores
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M

# Verificar status do cache de consultas
mysql> SHOW VARIABLES LIKE 'query_cache%';

# Verificar estatísticas do cache de consultas
mysql> SHOW STATUS LIKE 'Qcache%';

Otimização de Índices

A indexação adequada é crucial para o desempenho das consultas:

bash
# Analisar tabela para atualizar estatísticas de índice
ANALYZE TABLE table_name;

# Verificar índices não utilizados
SELECT * FROM sys.schema_unused_indexes;

# Criar índice
CREATE INDEX idx_column ON table_name(column_name);

# Criar índice composto
CREATE INDEX idx_multi ON table_name(col1, col2, col3);

# Mostrar índices
SHOW INDEXES FROM table_name;

# Remover índice não utilizado
DROP INDEX idx_name ON table_name;

Otimização de Consultas

Otimize suas consultas SQL para melhor desempenho:

  • Use EXPLAIN para analisar planos de execução de consultas: EXPLAIN SELECT * FROM table WHERE column = 'value'
  • Evite SELECT * - selecione apenas colunas necessárias
  • Use LIMIT para restringir conjuntos de resultados
  • Use cláusulas WHERE adequadas com colunas indexadas
  • Evite funções em cláusulas WHERE (ex.: WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
  • Use JOINs em vez de subconsultas quando possível
  • Use UNION em vez de OR para múltiplas condições quando apropriado

Monitorando Desempenho do MySQL

bash
# Verificar status do MySQL
mysql> SHOW STATUS;

# Verificar consultas lentas
mysql> SHOW VARIABLES LIKE 'slow_query%';

# Habilitar log de consultas lentas
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

# Verificar lista de processos
mysql> SHOW PROCESSLIST;

# Verificar status da tabela
mysql> SHOW TABLE STATUS LIKE 'table_name';

# Verificar status InnoDB
mysql> SHOW ENGINE INNODB STATUS;

Dicas de Otimização de Desempenho

  • Execute regularmente OPTIMIZE TABLE para desfragmentar tabelas
  • Monitore o log de consultas lentas e otimize consultas lentas
  • Use pool de conexões para reduzir sobrecarga de conexão
  • Particione tabelas grandes por data ou intervalo para melhor desempenho
  • Use réplicas de leitura para cargas de trabalho intensivas em leitura
  • Mantenha o MySQL atualizado para a versão estável mais recente
  • Monitore I/O do disco e considere usar armazenamento SSD/NVMe
  • Use EXPLAIN ANALYZE (MySQL 8.0+) para análise detalhada de consultas