pg_restore demorando muito mais que pg_dump

9

Estou salvando e restaurando regularmente um pequeno banco de dados PostgreSQL, usado para testes. Seus dados são atualizados regularmente como resultado de testes; em seguida, um novo dump deve ser feito e os dumps são usados ​​regularmente para recriar o banco de dados em um estado bem definido.

Observei que o dump (usando pg_dump -Fc database) leva apenas alguns segundos, mas o restore ( pg_restore -d database) leva cerca de um minuto. Isso parece estranho. Eu esperava que os dois demorassem quase o mesmo tempo (assumindo que as duas tarefas sejam vinculadas à E / S).

Há algum problema com a restauração? Talvez eu pudesse torná-lo mais rápido? Ou é normal que a restauração demore muito mais do que o dump? (E se sim, então por quê?)

O arquivo de despejo geralmente tem cerca de 3-4 MiB; o DBMS é o PostgreSQL V8.4, rodando em um Pentium4 3GHz com 1GiB de RAM no Ubuntu Linux.

sleske
fonte

Respostas:

9

O conteúdo de um índice não faz parte do backup, apenas a definição do índice. E isso levará apenas alguns bytes. Quando o índice é criado durante a restauração e todos os dados são indexados, ele será muito maior. Isso levará tempo, mas depende da sua situação quanto tempo.

O pg_restore possui uma opção para restauração simultânea (a partir da versão 8.4), use--jobs=number-of-jobs

Frank Heikens
fonte
Interessante, obrigado. Existe uma maneira de despejar o índice também, para acelerar a restauração (ao custo de um arquivo de despejo maior)?
sleske
Não, o conteúdo do índice não pode fazer parte do backup. Para um banco de dados muito pequeno como o seu (3-4 MiB), não deve ser um problema.
precisa
Informações adicionais: pg_dump não tem acesso ao conteúdo de um índice. O pg_dump usa instruções SELECT para obter todo o conteúdo das tabelas e o conteúdo das tabelas do sistema para criar o backup. É "apenas" um invólucro em torno de algumas instruções SELECT e algumas funções para gravar os resultados no disco.
precisa
@ Frank: Obrigado. Não sabia sobre a implementação do pg_dump. No nosso caso, acelerar a restauração seria útil, porque ele precisa ser executado repetidamente como parte de testes automatizados, diminuindo de 1 minuto para dizer que 10s ajudaria. Mas, aparentemente, isso não é viável. Vou ter de encontrar uma solução diferente ...
sleske
2
@sleske você pode tentar com a abordagem de backup do sistema de arquivos . Isso deve preservar índices e, além disso, provavelmente correr um pouco mais rápido, tanto para backup e restauração
Stefano
4

Para uma restauração, o banco de dados precisa fazer muito trabalho adicional:

Algumas coisas vêm à mente imediatamente:

  • Escrever é mais lento que ler
  • A análise da entrada leva tempo
  • Atualizando índices e outras estruturas internas
  • Manutenção da integridade referencial

Não tenho certeza se isso equivale a essa diferença de tempo.

Sven
fonte