Usar autocommit em meus programas, isso é bom ou ruim?

A maioria das suites de conexão ao banco de dados para Delphi ou Lazarus como FireDac, ZeosDBO, SQLdb,… ao conectar base de dados possui uma propriedade chamada autocommit, ela pode estar ligada(true) ou desligada(false).

Para explicar como funciona, precisamos entender o que é uma transação, neste contexto, uma transação é um período que iniciamos uma série de modificações no banco de dados que deve ser encerrada com um commit -a confirmação de que tudo que foi feito desde o inicio da transação deve ser mantido – ou o rollback – desfazer toda a transação desde seu inicio.

Então o que o autocommit faz ao estar ligado é tornar ‘iniciar uma transação’ opcional ao programador, porém por baixo dos panos, a suíte de acesso a dados criará uma transação pro você antes de executar seu statement e o finalizará com commit. Isso dá ao programador que a partir de agora não precisará mais se preocupar com iniciar e finalizar suas transações.

No vídeo abaixo eu demonstro que uma transferência de 10.000 registros com autocommit ligado e desligado tem diferenças absurdas de tempo, porque? Porque com autocommit desligado, você inicia uma transação uma única vez e faz a transferência de 10.000 registros e depois commit. Porém com o autocommit ligado, o que acontece de diferente é, inicia uma transação, transfere um registro e então commit, depois repete a mesma operação com o segundo, terceiro,…. até o ultimo registros executando 10.000 transações! Como resultado, o autocommit ligado torna as coisas muito, mas muito lentas quando as operações são feitas em lote.

Algo importante a se dizer é que o autocommit ligado em ferramentas como Zeos ou FireDac tem uma valvula de escape, se você der um StartTransaction, a suite entende que para esta operação o autocommit será falso e você terá de terminar manualmente a transação usando commit. Isso é muito bom para o programador porque ele contorna possíveis problemas de não ter iniciado uma transação, mas caso, inicie, ele terá máxima performance por escolher onde dar o commit.

Porque é importante saber disso?

Porque é importante conhecer a suíte de acesso a banco de dados e suas propriedades como o autocommit? Porque situações de lentidão no acesso a base de dados, a culpa é ‘o servidor tá lento’ ou ‘o banco de dados é lento’ quando na realidade é o desconhecimento da ferramenta.

Conclusão

Veja o vídeo e tire suas próprias conclusões: