Saya tidak berpikir Anda perlu menyedot debu secara manual, kecuali jika Anda mulai melihat penurunan kinerja. Namun, saya akan sangat menyarankan untuk meninjau pengaturan vakum dan autovacuum Anda dan menyesuaikannya dengan kebutuhan Anda
Untuk melihat pengaturan Anda saat ini, jalankan kueri ini:
SELECT *
FROM pg_settings
WHERE name LIKE '%vacuum%'
Sebagian besar bidang sudah jelas, tetapi berikut ini adalah dokumentasi untuknya:
https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html
Saya akan mengatakan, bahwa tujuan Anda adalah mengkonfigurasi autovacuum untuk membersihkan sampah secara konsisten, tetapi jangan terus-menerus menjalankan autovacuum
Pengaturan yang paling penting adalah:
- autovacuum_vacuum_scale_factor - menentukan persentase tuple yang dapat mati sebelum pembersihan dipicu. Nilai standar = 0,2
- autovacuum_vacuum_threshold - jumlah minimum tuple mati sebelum pembersihan dipicu. Nilai standar = 50
Ambang batas membantu mencegah proses pembersihan yang terlalu sering dipicu untuk tabel kecil.
Pengaturan default berfungsi dengan baik, kecuali jika Anda memiliki tabel yang sangat besar. Sederhananya, jika Anda memiliki meja yang membutuhkan 100GB, Anda akan mengumpulkan 20GB sampah, sebelum autovacuum akan dipicu. Jadi, saya biasanya merekomendasikan untuk mengatur faktor skala rendah. Seberapa rendah Anda harus menentukan sendiri. Saya menggunakan 0,05 pada proyek saya saat ini
Ambang batas juga dapat ditingkatkan. Banyak aplikasi memiliki beberapa tabel, yang sering diperbarui dan 50 tupel tidak banyak. Meningkatkannya menjadi 1000 seharusnya tidak menimbulkan masalah, tapi tentu saja, Anda harus mempertimbangkan kasus Anda sendiri
Anda juga dapat menyempurnakan autovacuum dan memiliki pengaturan berbeda untuk beberapa tabel Anda
ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);
Jika Anda mengkonfigurasi scale_factor dan ambang batas, Anda akan baik-baik saja. Anda juga dapat meningkatkan autovacuum_vacuum_cost_limit
, yang secara default sama dengan vacuum_cost_limit
, yang diatur ke 200. Ini adalah fitur vakum yang sangat penting, yang tidak memungkinkannya memakan semua sumber daya dan memungkinkan aplikasi Anda untuk beroperasi dengan data bahkan selama proses menyedot debu , tetapi nilai standar terlalu rendah. Meningkatkannya menjadi 1000 seharusnya tidak menyebabkan penundaan yang signifikan, tetapi akan memungkinkan proses vakum selesai lebih cepat
Tentu saja, Anda juga dapat menjalankan vakum secara manual. Dalam kasus yang paling sederhana, Anda dapat memiliki pekerjaan cron sederhana, yang akan melakukan pembersihan penuh setiap malam, ketika DB Anda tidak sering diakses
Semoga itu bisa membantu!