[Delphi Tokyo] Compatibilidade do FireDAC com o Firebird Nbackup Direct I/O

RAD Studio Tokyo Blogging

Boa noite, pessoal!
Vários MVPs já estão divulgando as novas funcionalidades do RAD Studio 10.2, ou Tokyo, desde a semana passada. Neste artigo, pretendo apresentar uma nova funcionalidade do componente TFDFBNBackup do FireDAC para desenvolvedores que trabalham com o banco de dados Firebird. Artigo bem rápido!

 

Operações de I/O (Input/Output) normalmente são armazenadas em cache pelo sistema operacional para aprimorar o desempenho, uma vez que o acesso à memória é mais rápido que o acesso ao disco. Entretanto, em algumas situações, este cache pode não ser tão vantajoso ou viável. Por isso, existe um recurso, conhecido como Direct I/O, que ignora o armazenamento em cache, permitindo que aplicações gravem dados diretamente no disco.
Desde a versão 2.1.4 do Firebird, o utilitário nbackup disponibiliza um parâmetro para ligar ou desligar o Direct I/O, tornando-o opcional. Porém, no RAD Studio, o componente TFDFBNBackup sempre manteve essa opção habilitada (Direct I/O On), causando algumas inconveniências para desenvolvedores que realizam backups do banco de dados utilizando este componente. Essa questão foi até levantada em um dos tópicos da EDN (Embarcadero Developer Network):

https://forums.embarcadero.com/thread.jspa?threadID=211595

 

Como solução, no Delphi Tokyo, o componente TFDFBNBackup tornou este parâmetro opcional através de uma nova propriedade chamada Direct:

Propriedade Direct do TFDFBNBackup

Ao configurar a propriedade como ndOff, conforme mencionado no tópico da EDN, o backup do banco de dados ganha performance. Para tirar a prova, tomei um banco de dados pequeno como exemplo, de apenas 20MB, somente para comparação do parâmetro de tempo. Eis o resultado com cada valor:

  • Valor ndOn:  00.710 segundos
  • Valor ndOff:  00.296 segundos

Claro, neste teste, a diferença é mínima por conta do tamanho do arquivo. Em bancos de dados volumosos – com Gigabytes de tamanho – a redução de tempo será evidentemente maior.
Vale lembrar também que o método Backup do componente TFDFBNBackup pode ser invocado em um processamento paralelo, por exemplo, com o TTask:

TTask.Create(
  procedure()
  begin
    FDFBNBackup.Backup;
    ShowMessage('Backup concluído!');
  end).Start;

 

Por hoje é só, pessoal.
Volto em breve! Abraço!


 

Compartilhe!
Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Pin on PinterestEmail this to someone

4 comentários

  1. André, desculpe publicar neste arquivo mas não consegui encontrar onde poderia enviar uma mensagem.
    Até oito meses atrás usava o dbexpress para acessar o banco, mudei para o Delphi xe8 e passei a usar o FireDac. A performance de acesso ao banco caiu pela metade, ja revi selects, criei índices e não resolve.
    Você tem algum arquivo que fala sobre isto? Vale a pena mudar pra o Unidac?
    Desde já agradecida.

    1. Olá, Marlene, tudo bem?
      Essa lentidão teoricamente não deveria ocorrer. O FireDAC possui mecanismos de desempenho excelentes quando comparado às outras tecnologias de conexão.
      Vou entrar em contato para estudarmos este caso.
      Abraço!

  2. Eu estou usando Delphi XE 10 Seattle. Como faço para o bkp ficar menor? Eu fiz da minha base de 65megas e ficou como o mesmo tamanho.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Preencha o campo abaixo * Time limit is exhausted. Please reload CAPTCHA.