it-swarm.asia

Apakah menjalankan pg_dump di live db menghasilkan cadangan yang konsisten?

Saya memiliki database 3GB yang terus-menerus dimodifikasi dan saya perlu membuat cadangan tanpa menghentikan server (Postgres 8.3).

Pg_dump saya berjalan selama 5 menit. Bagaimana jika data dimodifikasi selama proses? Apakah saya mendapatkan cadangan yang konsisten? Saya tidak ingin mencari tahu kapan bencana terjadi.

Dokumentasi Postgres http://www.postgresql.org/docs/8.3/static/app-pgdump.html tidak mengatakan apa-apa tentang ini.

38
Roman

Dari manual :

Itu membuat backup konsisten bahkan jika database sedang digunakan secara bersamaan.

Jadi ya, Anda bisa mempercayai cadangannya. Tentu saja, ini PostgreSQL, Anda dapat mempercayai data Anda dalam PostgreSQL.

56
Frank Heikens

pg_dump memulai transaksi, mirip dengan cara kerja kueri jangka panjang lainnya. Jaminan konsistensi berasal dari implementasi MVCC . Tempat sampah akan selalu konsisten dalam aturan tersebut.

Semua bagian fuzzy MVCC ada di sekitar hal-hal seperti apa urutan transaksi UPDATE menjadi terlihat oleh klien lain dan bagaimana kunci diperoleh. pg_dump sangat ketat tentang pemesanan dan mendapatkan kunci baca di seluruh basis data untuk membuangnya. Bagi kebanyakan orang, itulah yang mereka harapkan, dan mekanisme yang digunakan tidak pernah menimbulkan masalah. Risiko konkurensi utama adalah bahwa klien yang mencoba mengubah struktur basis data akan diblokir saat dump berjalan. Itu tidak mempengaruhi kualitas tempat sampah.

12
Greg Smith

Tumpukan dimulai dengan pengaturan TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Silakan baca manual pada Isolasi Transaksi dan misalnya diskusi Daftar Pengguna tentang ini .

Mengutip:

Cadangan hanya akan melihat transaksi yang dilakukan sebelum tingkat isolasi ditetapkan.

Pada dasarnya semuanya setelah pg_dump mengatur level isolasi transaksi adalah bukan bagian dari dump ini.

Operasi baca/tulis tidak terpengaruh (terkunci) selama waktu itu.

12
Dennis Nolte