Ho configurato cron per invocare pg_dump su base giornaliera usando la seguente regola:
# 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
Fondamentalmente funziona. Il database cresce relativamente velocemente ed esponenzialmente (tuttavia l'esponente non è molto grande). Attualmente la discarica gzip richiede circa 160 MB. Quando il database viene scaricato, il sistema inizia a eseguire la scansione. La media del carico che ho visto usando il top
comando era circa 200, 200, 180
. Fondamentalmente il server è poco reattivo.
La prima domanda è come determinare dove si trova il collo di bottiglia. Le scarse prestazioni sono causate da pesanti operazioni di I / O? È causato da problemi di blocco della tabella? Forse è un problema di memoria? L'output del pg_dump
comando viene reindirizzato al gzip
comando. È sequenziale, ovvero l'intero dump viene inserito nella memoria (problema di scambio?) E quindi compresso o simultaneo (ovvero gzip comprime ciò che ottiene e attende di più)? Potrebbe essere causato da qualche altro fattore?
La seconda domanda è come rendere l'operazione di dumping meno invadente per le principali funzioni del sistema. Per quanto ho capito, il dump non può richiedere troppo tempo a causa dell'integrità del database. Esistono blocchi di scrittura delle tabelle, ecc. Cosa posso fare per limitare i problemi (o ritardarli, considerando la crescita del database).
La terza domanda : è già tempo di conoscere configurazioni di database più avanzate? Il sistema funziona bene, quando i backup del database non vengono eseguiti, ma forse il problema del dumping db è un primo sintomo di problemi in arrivo?
pg_dump
CPU al 100% ed era di gzip. Specificarepg_dump --compress=0
risolto per me su Ubuntu 16.04. Anche i backup sono stati super veloci. Fai attenzione alla compressione gzip in contenitori; potrebbe non fare quello che ti aspetti.