Testei rápido e sujo --no-autocommit
vs. sem esta opção no MacBook (instalado com o Homebrew mais recente MariaDB). Eu restaurei para um MariaDB vazio um arquivo *.sql de 4,6 GB. O despejo feito sem --no-autocommit
levou 5m42.072s para restaurar e com --no-autocommit
ele demorou 1 minuto a mais.
Outras opções usadas para despejo são--max_allowed_packet=1G --flush-logs --single-transaction --all-databases
set autocommit=0;
INSERT INTO ...
UNLOCK TABLES;
commit;
Quando usar --no-autocommit
? Em que caso de uso esta opção faz sentido?
Com
autocommit=1
, cada umINSERT
será confirmado antes de passar para o próximo. Há menos sobrecarga. Mas, se o servidor travar, a tabela será parcialmente construída porque algumasINSERTs
serão confirmadas; alguns não.Com
ele colocará todas as informações em um log de redo para a tabela inteira. Para tabelas grandes, isso é mais sobrecarga. Mesmo para tabelas pequenas (apenas uma
INSERT
), pode ser um pouco mais lento devido às duas instruções extras.