Eu configurei o cron para chamar pg_dump diariamente usando a seguinte regra:
# xyz database backups:
00 01 * * * root umask 077 && pg_dump --user=xyz_system xyz | gzip > /var/xyz/backup/db/xyz/`date -u +\%Y\%m\%dT\%H\%M\%S`.gz
Basicamente, funciona. O banco de dados cresce relativamente rápido e exponencialmente (no entanto, o expoente não é muito grande). Atualmente, o despejo compactado em gzip leva cerca de 160 MB. Quando o banco de dados é despejado, o sistema começa a rastrear. A média de carga que eu vi usando o top
comando foi sobre 200, 200, 180
. Basicamente, o servidor dificilmente responde.
A primeira pergunta é como determinar onde está o gargalo. O desempenho ruim é causado por operações pesadas de E / S? É causado por problemas de bloqueio de tabela? Talvez seja um problema de memória? A saída do pg_dump
comando é canalizada para o gzip
comando. É sequencial, ou seja, o despejo inteiro é colocado na memória (problema de troca?) E, em seguida, compactado ou simultâneo (ou seja, o gzip compacta o que é obtido e espera por mais)? Pode ser causado por algum outro fator?
A segunda questão é como tornar a operação de dumping menos invasiva para as principais funções do sistema. Pelo que entendi, o despejo não pode demorar muito por causa da integridade do banco de dados. Existem bloqueios de gravação de tabela, etc. O que posso fazer para limitar os problemas (ou atrasá-lo, considerando o crescimento do banco de dados).
A terceira pergunta : já é hora de aprender sobre configurações de banco de dados mais avançadas? O sistema funciona bem, quando os backups do banco de dados não são executados, mas talvez o problema do db dumping seja o primeiro sintoma de problemas de entrada?
pg_dump
100% da CPU e era do gzip. A especificaçãopg_dump --compress=0
resolveu isso para mim no Ubuntu 16.04. Os backups foram super rápidos depois disso também. Cuidado com a compressão gzip em contêineres; pode não fazer o que você espera.