He configurado cron para invocar pg_dump a diario utilizando la siguiente regla:
# 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
Básicamente funciona. La base de datos crece relativamente rápido y exponencialmente (sin embargo, el exponente no es muy grande). Actualmente, el volcado gzipped ocupa unos 160 MB. Cuando se descarga la base de datos, el sistema comienza a gatear. El promedio de carga que vi usando el top
comando era aproximadamente 200, 200, 180
. Básicamente, el servidor apenas responde.
La primera pregunta es cómo determinar dónde está el cuello de botella. ¿Es el bajo rendimiento causado por operaciones pesadas de E / S? ¿Es causado por problemas de bloqueo de la tabla? Tal vez es un problema de memoria? La salida del pg_dump
comando se canaliza al gzip
comando. ¿Es secuencial, es decir, todo el volcado se coloca en la memoria (¿problema de intercambio?) Y luego se comprime o concurre (es decir, gzip comprime lo que se obtiene y espera más)? ¿Puede ser causado por algún otro factor?
La segunda pregunta es cómo hacer que la operación de descarga sea menos intrusiva para las funciones principales del sistema. Por lo que yo entiendo, el volcado no puede tomar demasiado tiempo debido a la integridad de la base de datos. Hay bloqueos de escritura de tabla, etc. ¿Qué puedo hacer para limitar los problemas (o retrasarlo, considerando el crecimiento de la base de datos)?
La tercera pregunta : ¿ya es hora de aprender sobre configuraciones de bases de datos más avanzadas? El sistema funciona bien, cuando no se realizan copias de seguridad de la base de datos, pero ¿tal vez el problema de db dump es un primer síntoma de problemas entrantes?
pg_dump
100% de la CPU y era de gzip. Especificarpg_dump --compress=0
me lo resolvió en Ubuntu 16.04. Las copias de seguridad fueron súper rápidas después de eso también. Cuidado con la compresión gzip en contenedores; Es posible que no haga lo que espera.