Melhorar performance ao copiar registros de tabelas no Firebird, utilizando External File

01/09/2020

0

Estou realizando a cópia de registros de tabelas de um banco Firebird, utilizando "external file", para outro banco vazio.

O problema acontece quando se trata de uma uma tabela muito grande (com milhões de tuplas),
o processo se torna muito lento a ponto de ficar por várias horas executando.

Processo:

1° Crio a tabela externa;

2° Faço o "insert" da seleção dos registros da tabela que quero copiar;

3° Faço o "insert" da seleção dos registros do "external file" para a tabela no banco vazio.

Obs: A parte de importar os registros do "external file" para a tabela no banco vazio é a parte que mais demora.

Já tentei algumas coisas, como alterar algumas das propriedades em "Fetch Options" do componente TFDQuery:

FDQuery.FetchOptions.Mode := fmOnDemand;
FDQuery.FetchOptions.CursorKind := ckDefault;
FDQuery.FetchOptions.Unidirectional := true;
FDQuery.FetchOptions.RowsetSize := 1000;
FDQuery.FetchOptions.AutoClose := true;


Quando altero o "Mode" para "fmAll", e se a tabela a ser copiada tiver muitos registros, dá "Out of memory".

Tentei também "overclockar" o próprio Firebird, aumentando a qtd de núcleos utilizados da cpu, memória e cache. Segue as configurações:

DefaultDbCachePages = 16384
FileSystemCacheThreshold = 268435456
FileSystemCacheSize = 80
CpuAffinityMask = 15

Mas não obtive sucesso em nenhum dos casos.

Minha perguta é, as "Fetch Options" podem realmente me ajudar a obter um melhor desempenho?
Se sim, qual seria a melhor configuração para setar?
Existe alguma outra forma para obter melhor desempenho, utilizando "external file"?
Aluisio Neto

Aluisio Neto

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar