Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menghapus bloat dengan pg_repack
Anda dapat menggunakan pg_repack
ekstensi untuk menghapus tabel dan indeks kembung dengan penguncian basis data minimal. Anda dapat membuat ekstensi ini di instance database dan menjalankan pg_repack
klien (di mana versi klien cocok dengan versi ekstensi) dari Amazon Elastic Compute Cloud (Amazon EC2) atau dari komputer yang dapat terhubung ke database Anda.
Tidak sepertiVACUUM FULL
, pg_repack
tidak memerlukan downtime atau jendela pemeliharaan, dan tidak akan memblokir sesi lainnya.
pg_repack
sangat membantu dalam situasi di manaVACUUM FULL
,CLUSTER
, atau REINDEX
mungkin tidak bekerja. Ini menciptakan tabel baru yang berisi data tabel kembung, melacak perubahan dari tabel asli, dan kemudian mengganti tabel asli dengan yang baru. Itu tidak mengunci tabel asli untuk operasi baca atau tulis saat sedang membangun tabel baru.
Anda dapat menggunakan pg_repack
untuk tabel lengkap atau untuk indeks. Untuk melihat daftar tugas, lihat dokumentasi pg_repack
Pembatasan:
-
Untuk menjalankan
pg_repack
, tabel Anda harus memiliki kunci utama atau indeks unik. -
pg_repack
tidak akan bekerja dengan tabel sementara. -
pg_repack
tidak akan berfungsi pada tabel yang memiliki indeks global. -
Ketika
pg_repack
sedang berlangsung, Anda tidak dapat melakukan operasi DDL pada tabel.
Tabel berikut menjelaskan perbedaan antara pg_repack
danVACUUM FULL
.
|
|
Perintah bawaan |
Ekstensi yang Anda jalankan dari Amazon EC2 atau komputer lokal Anda |
Membutuhkan |
Membutuhkan |
Bekerja dengan semua tabel |
Bekerja pada tabel yang hanya memiliki kunci primer dan unik |
Membutuhkan dua kali lipat penyimpanan yang dikonsumsi oleh tabel dan indeks |
Membutuhkan dua kali lipat penyimpanan yang dikonsumsi oleh tabel dan indeks |
Untuk berjalan pg_repack
di atas meja, gunakan perintah:
pg_repack -h <host> -d <dbname> --table <tablename> -k
Untuk pg_repack
menjalankan indeks, gunakan perintah:
pg_repack -h <host> -d <dbname> --index <index name>
Untuk informasi selengkapnya, lihat posting AWS blog Hapus kembung dari Amazon Aurora dan RDS untuk PostgreSQL
Peringatan
error-on-invalid-index
Kesalahan pg_repack
biasanya berarti bahwa satu atau lebih indeks di atas meja rusak atau tidak valid. pg_repack
tidak dapat beroperasi dengan aman pada tabel yang memiliki indeks tidak valid, karena bergantung pada indeks untuk konsistensi data selama proses pengemasan ulang.
Kesalahan ini terjadi ketika:
Indeks ditandai sebagai tidak valid (misalnya, karena
CREATE INDEX CONCURRENTLY
pernyataan gagal).Indeks rusak (mungkin karena masalah perangkat keras atau shutdown mendadak).
Gunakan kueri berikut untuk mengidentifikasi indeks yang tidak valid dan menjatuhkannya terlebih dahulu jika Anda menemukannya.
SELECT indexrelid::regclass, indisvalid FROM pg_index WHERE indrelid = 'orders'::regclass AND NOT indisvalid; Drop the invalid index: DROP INDEX index_name;