{"id":1142,"date":"2022-03-11T14:40:46","date_gmt":"2022-03-11T17:40:46","guid":{"rendered":"https:\/\/gladiston.net.br\/?page_id=1142"},"modified":"2022-07-13T16:04:32","modified_gmt":"2022-07-13T19:04:32","slug":"usar-autocommit-em-meus-programas-isso-e-bom-ou-ruim","status":"publish","type":"page","link":"https:\/\/gladiston.net.br\/en\/banco-de-dados\/usar-autocommit-em-meus-programas-isso-e-bom-ou-ruim\/","title":{"rendered":"Using autocommit in my programs, is that good or bad?"},"content":{"rendered":"<p>A maioria das suites de conex\u00e3o ao banco de dados para Delphi ou Lazarus como FireDac, ZeosDBO, SQLdb,&#8230; ao conectar base de dados possui uma propriedade chamada <strong>autocommit<\/strong>, ela pode estar ligada(true) ou desligada(false). <\/p>\n\n\n\n<p>Para explicar como funciona, precisamos entender o que \u00e9 uma transa\u00e7\u00e3o, neste contexto, uma transa\u00e7\u00e3o \u00e9 um per\u00edodo que iniciamos uma s\u00e9rie de modifica\u00e7\u00f5es no banco de dados que deve ser encerrada com um commit -a confirma\u00e7\u00e3o de que tudo que foi feito desde o inicio da transa\u00e7\u00e3o deve ser mantido &#8211; ou o rollback &#8211; desfazer toda a transa\u00e7\u00e3o desde seu inicio. <\/p>\n\n\n\n<p>Ent\u00e3o o que o <strong>autocommit<\/strong> faz ao estar ligado \u00e9 tornar &#8216;iniciar uma transa\u00e7\u00e3o&#8217; opcional ao programador, por\u00e9m por baixo dos panos, a su\u00edte de acesso a dados criar\u00e1 uma transa\u00e7\u00e3o pro voc\u00ea antes de executar seu statement e o finalizar\u00e1 com commit. Isso d\u00e1 ao programador que a partir de agora n\u00e3o precisar\u00e1 mais se preocupar com iniciar e finalizar suas transa\u00e7\u00f5es.<\/p>\n\n\n\n<p>No v\u00eddeo abaixo eu demonstro que uma transfer\u00eancia de 10.000 registros com autocommit ligado e desligado tem diferen\u00e7as absurdas de tempo, porque? Porque com autocommit desligado, voc\u00ea inicia uma transa\u00e7\u00e3o uma \u00fanica vez e faz a transfer\u00eancia de 10.000 registros e depois commit. Por\u00e9m com o autocommit ligado, o que acontece de diferente \u00e9, inicia uma transa\u00e7\u00e3o, transfere um registro e ent\u00e3o commit, depois repete a mesma opera\u00e7\u00e3o com o segundo, terceiro,&#8230;. at\u00e9 o ultimo registros executando 10.000 transa\u00e7\u00f5es! Como resultado, o autocommit ligado torna as coisas muito, mas muito lentas quando as opera\u00e7\u00f5es s\u00e3o feitas em lote.<\/p>\n\n\n\n<p>Algo importante a se dizer \u00e9 que o autocommit ligado em ferramentas como Zeos ou FireDac tem uma valvula de escape, se voc\u00ea der um StartTransaction, a suite entende que para esta opera\u00e7\u00e3o o autocommit ser\u00e1 falso e voc\u00ea ter\u00e1 de terminar manualmente a transa\u00e7\u00e3o usando commit. Isso \u00e9 muito bom para o programador porque ele contorna poss\u00edveis problemas de n\u00e3o ter iniciado uma transa\u00e7\u00e3o, mas caso, inicie, ele ter\u00e1 m\u00e1xima performance por escolher onde dar o commit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Porque \u00e9 importante saber disso?<\/h2>\n\n\n\n<p>Porque \u00e9 importante conhecer a su\u00edte de acesso a banco de dados e suas propriedades como o autocommit? Porque situa\u00e7\u00f5es de lentid\u00e3o no acesso a base de dados, a culpa \u00e9 &#8216;o servidor t\u00e1 lento&#8217; ou &#8216;o banco de dados \u00e9 lento&#8217; quando na realidade \u00e9 o desconhecimento da ferramenta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Watch the video and draw your own conclusions:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Part 3: Database connection with Zeos, talking about autocommit - Lazarus\" width=\"580\" height=\"326\" src=\"https:\/\/www.youtube.com\/embed\/xHB7oFudD7I?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>","protected":false},"excerpt":{"rendered":"<p>A maioria das suites de conex\u00e3o ao banco de dados para Delphi ou Lazarus como FireDac, ZeosDBO, SQLdb,&#8230; 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 \u00e9 uma transa\u00e7\u00e3o, neste contexto, uma transa\u00e7\u00e3o \u00e9 um per\u00edodo que iniciamos uma [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":1109,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"footnotes":""},"class_list":["post-1142","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/comments?post=1142"}],"version-history":[{"count":2,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1142\/revisions"}],"predecessor-version":[{"id":1543,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1142\/revisions\/1543"}],"up":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1109"}],"wp:attachment":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/media?parent=1142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}