Dalam beberapa kesempatan, dan setelah membuat besar-besaran update
, insert
atau delete
dari sebuah meja, saya telah memulai VACUUM FULL ANALYZE
untuk memastikan DB tidak terlalu membengkak. Melakukannya dalam basis data produksi telah membuat saya menemukan bahwa ini bukan ide yang baik, karena saya bisa memblokir tabel untuk jangka waktu yang lama. Jadi, saya membatalkan prosesnya, mungkin mencoba VACUUM
(tidak penuh) atau membiarkannya AUTOVACUUM
nanti, apa pun yang dapat dilakukannya.
Pertanyaannya adalah: jika saya menghentikan "mid-way" VACUUM atau AUTOVACUUM, apakah semua pemrosesan sudah selesai hilang?
Sebagai contoh, jika VACUUM
sudah menemukan 1 M baris mati dan saya menghentikannya, apakah semua informasi ini hilang? Apakah VACUUM bekerja secara transaksional sepenuhnya ("semua atau tidak sama sekali", seperti sejumlah proses PostgreSQL yang sangat baik)?
Jika VACUUM dapat terputus dengan aman tanpa semua pekerjaan hilang, apakah ada cara untuk membuat vacuum
pekerjaan secara bertahap? [Berfungsi untuk 100 ms, berhenti, tunggu 10 ms untuk memungkinkan untuk tidak memblokir seluruh dunia ... dan seterusnya]. Saya tahu Anda dapat melakukan sebagian dari ini dengan menyetel parameter autovacuum, tapi saya berpikir untuk mengendalikan ini secara terprogram, untuk dapat melakukannya pada waktu tertentu / dalam kondisi tertentu.
CATATAN: Hentikan / batalkan / matikan sarana proses dalam konteks ini:
- Jika menggunakan pgAdmin, tekan tombol "Cancel Query".
- Jika berfungsi secara pemrograman, panggil pg_cancel_backend ().
Saya berasumsi bahwa keduanya setara. Saya belum pernah menggunakan perintah kill level / shell-system.