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

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 recurso de nbackup do 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 em função da natureza do cache ou da ascensão de discos mais modernos, como SSD. 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 Embarcadero Community.

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, o backup do banco de dados ganha performance. Para tirar a prova, preparei 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:

 

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


André Celestino