Apakah saya perlu REINDEX dan VACUUM tabel setelah menghapus banyak baris?

10

Saya menjalankan database PostgreSQL yang memiliki beberapa tabel yang menyimpan informasi logging. Informasi ini hanya untuk tujuan pelaporan dan akan dibuang ke file dan dihapus dari database jika lebih dari 30 hari.

Mungkin ada jutaan baris yang dihapus, dan kami telah menjalankan REINDEX setiap kali setelah penghapusan.

Apakah ini cukup, atau haruskah kita juga menjalankan VACUUM atau VACUUM ANALYZE? Atau mengindeks kembali tidak perlu dan kita harus bukan hanya menjalankan VACUUM atau VACUUM ANALYZE?

Kami menggunakan PostgreSQL 8.2.3, yang saya yakini tidak memungkinkan penyedotan otomatis.

cowgod
sumber
2
Anda mungkin ingin mempertimbangkan untuk mempartisi, lihat postgresql.org/docs/9.0/static/ddl-partitioning.html ; maka Anda bisa saja menjatuhkan partisi dan menghindari debu.
alex
3
Versi 8.2.3 memiliki auto_vacuum, lihat manual, tetapi Anda harus memperbarui secepatnya. Versi 8.2 saat ini adalah 8.2.17. Anda ada 14 tambalan di belakang, termasuk beberapa tambalan keamanan. Upgrade ke 8.4 atau bahkan 9.0 adalah ide yang lebih baik, auto_vacuum telah ditingkatkan.
Frank Heikens

Jawaban:

13

Anda harus melakukan VACUUM ANALYZE karena VACUUM akan memungkinkan ruang yang digunakan oleh data yang dihapus untuk digunakan kembali dan mencegah pembungkusan transaksi, dan ANALYZE akan memperbarui statistik perencana yang akan mengarah pada rencana kueri yang lebih baik untuk permintaan pelaporan Anda.

REINDEX tidak diperlukan secara teoritis, tetapi Anda mungkin menemukan bahwa itu menghasilkan kinerja yang lebih baik karena indeks berdekatan.

Halaman dokumentasi yang relevan untuk 8.2 ada di sini (indeks ulang rutin) dan di sini (penyedotan rutin) .

hmallett
sumber