Topik ini menjelaskan cara menghapus tablespaces dari instance ApsaraDB RDS for PostgreSQL menggunakan ekstensi pg_repack. Jika Anda melakukan banyak operasi seperti UPDATE pada tabel, pembengkakan tabel dapat terjadi. Dalam situasi ini, Anda dapat menggunakan ekstensi ini untuk mengurangi pembengkakan tabel tanpa memerlukan kunci eksklusif pada tabel yang bengkak. Ekstensi ini lebih ringan dibandingkan pernyataan CLUSTER dan VACUUM FULL.
Prasyarat
Instance RDS harus menjalankan PostgreSQL 10.0 atau versi yang lebih baru.
Instance RDS harus menjalankan versi mesin minor 20240229 atau yang lebih baru. Jika instance RDS Anda menjalankan PostgreSQL 17, versi mesin minor harus 20241030 atau yang lebih baru. Untuk informasi lebih lanjut tentang pembaruan versi mesin minor, lihat Perbarui Versi Mesin Minor.
CatatanJika instance RDS menjalankan versi mesin minor lebih awal dari 20240229, pesan kesalahan
ERROR: must be superuser to use xxx functionakan muncul saat Anda menggunakan ekstensi ini.
Catatan penggunaan
Ekstensi pg_repack memerlukan penyimpanan tambahan. Repack tabel penuh membutuhkan ruang penyimpanan setidaknya dua kali ukuran tabel yang ingin direpack.
Ekstensi pg_repack tidak dapat menghapus pembengkakan dari tabel sementara.
Ekstensi pg_repack tidak dapat menghapus pembengkakan dari indeks GiST.
Saat sebuah tabel sedang direpack oleh ekstensi pg_repack, Anda tidak dapat mengeksekusi pernyataan DDL pada tabel tersebut. Ekstensi pg_repack memegang kunci ACCESS SHARE pada tabel yang bengkak untuk melarang eksekusi pernyataan DDL.
Ekstensi pg_repack mengonsumsi sejumlah besar sumber daya disk I/O untuk membuat tabel dan indeks. Sebelum menggunakan ekstensi ini, evaluasi apakah operasi repack dapat mengganggu beban kerja Anda. Misalnya, jika instance RDS Anda menggunakan SSD yang ditingkatkan (ESSD) tingkat performa 1 (PL1) dan Anda ingin merepack tabel berukuran 100 GB, throughput IO instance RDS dapat mencapai throughput IO maksimum 250 MB/s.
Deskripsi fitur
Ekstensi pg_repack mendukung repack tabel penuh dan repack indeks.
Prosedur berikut menunjukkan cara ekstensi merepack seluruh tabel:
Membuat tabel log. Tabel log digunakan untuk mencatat perubahan yang dibuat pada tabel asli selama proses repack.
Membuat pemicu pada tabel asli. Pemicu digunakan untuk mencatat pernyataan INSERT, UPDATE, dan DELETE yang dieksekusi pada tabel asli dan menyisipkan catatan ke dalam tabel log selama proses repack.
Membuat tabel baru dengan baris dan kolom yang sama dengan tabel asli.
Membuat indeks di tabel baru.
Menerapkan perubahan data dalam tabel log ke tabel baru.
Mengganti tabel asli dan tabel baru dalam katalog sistem.
Menghapus tabel asli.
CatatanEkstensi pg_repack memegang kunci ACCESS EXCLUSIVE untuk melarang operasi pada tabel asli di Langkah a, b, f, dan g. Di langkah lainnya, ekstensi memegang kunci ACCESS SHARE. Kunci ini tidak melarang eksekusi pernyataan INSERT, UPDATE, dan DELETE pada tabel asli.
Prosedur berikut menunjukkan cara ekstensi merepack indeks pada tabel:
Membuat indeks secara bersamaan.
Mengganti indeks asli dan indeks baru dalam katalog sistem.
Menghapus indeks asli.
Aktifkan atau nonaktifkan ekstensi pg_repack
Anda harus menggunakan akun istimewa untuk mengeksekusi pernyataan dalam bagian ini.
Aktifkan ekstensi pg_repack.
CREATE EXTENSION pg_repack;Nonaktifkan ekstensi pg_repack.
DROP EXTENSION pg_repack;
Instal utilitas klien ekstensi pg_repack
Anda harus menginstal utilitas klien ekstensi pg_repack. Jika instance Elastic Compute Service (ECS) Anda menjalankan Alibaba Cloud Linux 3.2104 atau yang lebih baru, ikuti langkah-langkah berikut untuk menginstal utilitas klien:
Instal dependensi lingkungan.
sudo yum install postgresql* redhat-rpm-config libpq* openssl-devel readline-devel -yTambahkan variabel lingkungan.
export PATH=$PATH:/usr/lib64/pgsql/postgresql-12/binCatatanPath dan versi PostgreSQL dalam perintah di atas hanya untuk referensi. Gantilah dengan nilai aktual sesuai kebutuhan bisnis Anda.
Unduh utilitas klien, kompilasi utilitas klien, lalu instal utilitas klien.
wget https://github.com/reorg/pg_repack/archive/refs/tags/ver_1.4.6.tar.gz tar zxvf ver_1.4.6.tar.gz cd pg_repack-ver_1.4.6 make && make install
Contoh
-- Periksa tetapi jangan lakukan operasi repack: --dry-run
pg_repack --dry-run --no-superuser-check --echo --no-order -h Endpoint -p Port -d database1 -U user --table schema1.table1
Periksa dan lakukan operasi repack:
pg_repack --no-superuser-check --echo --no-order -h Endpoint -p Port -d database1 -U user --table schema1.table1FAQ
Apa yang harus saya lakukan jika pesan "ERROR: pg_repack gagal dengan kesalahan: Anda harus menjadi superuser untuk menggunakan pg_repack" dikembalikan?
Gunakan opsi -k atau --no-superuser-check untuk melewati pemeriksaan izin superuser. Dengan cara ini, Anda dapat mencegah jenis kesalahan izin ini.
Saat Anda merepack tabel penuh, Anda tidak dapat menggunakan metode ini untuk mendapatkan izin.
Referensi
Untuk informasi lebih lanjut tentang ekstensi pg_repack, lihat Reorganisasi Tabel dalam Basis Data PostgreSQL dengan Kunci Minimal.