⚙️ MySQL e MariaDB — Otimização, Desempenho e Velocidade com OptimizeAllTables
Scripts e configurações práticas para aumentar a performance e estabilidade de bancos MySQL e MariaDB, utilizando uma procedure que otimiza todas as tabelas do banco e ajustes de parâmetros no my.ini.
📘 Criando a Procedure OptimizeAllTables()
Crie uma procedure que percorre todas as tabelas do banco atual e executa o comando OPTIMIZE TABLE automaticamente.
DELIMITER $$
DROP PROCEDURE IF EXISTS OptimizeAllTables$$
CREATE PROCEDURE OptimizeAllTables()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE tableName VARCHAR(255);
DECLARE cur CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_schema = DATABASE();
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- Desativa as verificações de chaves estrangeiras para evitar erros
SET FOREIGN_KEY_CHECKS = 0;
OPEN cur;
read_loop: LOOP
FETCH cur INTO tableName;
IF done THEN
LEAVE read_loop;
END IF;
SET @stmt = CONCAT('OPTIMIZE TABLE `', tableName, '`');
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
-- Reativa as verificações após a otimização
SET FOREIGN_KEY_CHECKS = 1;
END$$
DELIMITER ;
Essa procedure percorre todas as tabelas do banco corrente e executa OPTIMIZE TABLE em cada uma, liberando espaço e reorganizando índices.
🚀 Executando a Procedure
CALL OptimizeAllTables();
Execute o comando acima após longos períodos de inserções/deleções para recuperar desempenho e reduzir fragmentação.
💡 Dica: configure um agendamento (CRON ou Event Scheduler) para executar mensalmente a otimização automática.
🧠 Melhorando o Desempenho Geral — Configurações no my.ini
Abra o arquivo de configuração no caminho:
[Pasta de instalação]\mariadb\data\my.ini
[mariadb]
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=1
Essas configurações melhoram a velocidade de I/O e otimizam o uso de memória do InnoDB.
[mysqld]
query_cache_type=1
query_cache_size=64M
Ativa o cache de consultas, reduzindo tempo de resposta em selects repetitivos.
⚠️ Atenção: nas versões mais recentes do MySQL (8+), o query_cache foi descontinuado. Para essas versões, utilize Performance Schema e índices otimizados.
📈 Benefícios esperados
- Melhor uso da memória e cache;
- Redução de fragmentação em tabelas;
- Maior estabilidade em operações intensas;
- Consultas mais rápidas após a otimização;
- Gerenciamento automatizado de espaço físico.