Saya telah mengkonfigurasi cron untuk memanggil pg_dump setiap hari menggunakan aturan berikut:
# 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
Pada dasarnya, ini berhasil. Basis data tumbuh relatif cepat dan eksponensial (namun eksponennya tidak terlalu besar). Saat ini dump gzipped membutuhkan sekitar 160MB. Ketika database dibuang, sistem mulai merangkak. Rata-rata beban yang saya lihat menggunakan top
perintah adalah tentang 200, 200, 180
. Pada dasarnya server tidak responsif.
Pertanyaan pertama adalah bagaimana menentukan di mana bottleneck berada. Apakah kinerja yang buruk disebabkan oleh operasi I / O yang berat? Apakah ini disebabkan oleh masalah penguncian tabel? Mungkin itu masalah memori? Output dari pg_dump
perintah disalurkan ke gzip
perintah. Apakah berurutan, yaitu seluruh dump ditempatkan di memori (masalah swapping?) Dan kemudian dikompresi atau bersamaan (yaitu gzip memampatkan apa yang didapat dan menunggu lebih banyak)? Mungkinkah itu disebabkan oleh beberapa faktor lain?
Pertanyaan kedua adalah bagaimana membuat operasi dumping kurang mengganggu fungsi-fungsi utama sistem. Sejauh yang saya mengerti hal-hal, dump tidak dapat mengambil terlalu banyak waktu karena integritas database. Ada kunci menulis tabel, dll. Apa yang bisa saya buat untuk membatasi masalah (atau menunda, mempertimbangkan pertumbuhan basis data).
Pertanyaan ketiga : Apakah sudah waktunya untuk mempelajari tentang konfigurasi basis data yang lebih maju? Sistem berfungsi dengan baik, ketika backup database tidak dilakukan, tapi mungkin masalah dumping db adalah gejala pertama dari masalah yang masuk?
pg_dump
100% CPU dan itu dari gzip. Menentukanpg_dump --compress=0
diselesaikan untuk saya di Ubuntu 16.04. Backup juga sangat cepat setelah itu. Watch out for kompresi gzip dalam wadah; mungkin tidak melakukan apa yang Anda harapkan.