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:
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"?
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)