Untuk mengurangi penggunaan penyimpanan dan meningkatkan kinerja baca instance ApsaraDB RDS for PostgreSQL tanpa mengubah tipe instance, Anda dapat menggunakan fitur kompresi halaman transparan (TPC). Fitur ini mengompres dan mendekompres data halaman di buffer pool secara real-time, sehingga mengurangi biaya penyimpanan dan meningkatkan Throughput I/O. Namun, fitur ini menurunkan kinerja CPU.
Prasyarat
Instance RDS Anda harus memenuhi persyaratan berikut:
Instance RDS menjalankan PostgreSQL 14 atau yang lebih baru.
Instance RDS menjalankan versi mesin minor 20240530 atau yang lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui versi mesin minor, lihat Perbarui versi mesin minor.
Deskripsi fitur
Fitur TPC mengompres dan mendekompres data halaman di buffer pool secara real-time. Data dikompres saat ditulis ke disk dan didekompres saat dibaca dari disk. Proses kompresi dan dekompresi tidak terlihat oleh pengguna.
Fitur TPC dirancang untuk mengurangi penggunaan penyimpanan dan meningkatkan kinerja baca instance RDS Anda. Fitur ini mengurangi disk I/O dan penggunaan penyimpanan, meningkatkan efisiensi cache, serta mempercepat transmisi data melalui kompresi data.
Skenario
Pemanfaatan CPU kurang dari 50%. IOPS atau Throughput I/O sering kali mencapai titik hambatan.
Manfaat
Biaya penyimpanan berkurang sekitar 50% rata-rata.
Penggunaan I/O berkurang sekitar 50% rata-rata.
Dalam skenario baca, transaksi per detik (TPS) meningkat. Dalam beberapa skenario baca di mana Throughput I/O mencapai batas atas, TPS meningkat hingga 100%.
Dampak
Fitur ini meningkatkan pemanfaatan CPU instance RDS Anda. Pemanfaatan CPU untuk kompresi data meningkat sekitar 260%, sedangkan untuk dekompresi data meningkat sekitar 40%.
Dalam skenario tulis, TPS menurun.
Fitur TPC berkinerja buruk pada data TOAST.
Prosedur
Buat tablespace untuk kompresi agar dapat menggunakan fitur TPC karena fitur ini bergantung pada tablespaces.
CREATE TABLESPACE rds_compress LOCATION '/data/postgresql/rds_compress' WITH(COMPRESSION='zstd');PentingJangan modifikasi nama, jalur, dan algoritma kompresi tablespace yang dibuat pada langkah ini.
Buat tabel atau indeks untuk kompresi.
Saat membuat atau memodifikasi tabel dan indeks, tentukan tablespace untuk kompresi agar dapat menggunakan fitur TPC.
Kompresi tabel
-- Saat membuat tabel, tentukan tablespace untuk kompresi agar dapat menggunakan fitur TPC. CREATE TABLE <tablename> ... TABLESPACE rds_compress; -- Saat memodifikasi tabel, ubah tablespace tabel menjadi tablespace untuk kompresi. ALTER TABLE <tablename> SET TABLESPACE rds_compress;Kompresi indeks
-- Saat membuat indeks, tentukan tablespace untuk kompresi agar dapat menggunakan fitur TPC. CREATE INDEX <indexname> ... TABLESPACE rds_compress; -- Saat memodifikasi indeks, ubah tablespace indeks menjadi tablespace untuk kompresi. ALTER INDEX <indexname> SET TABLESPACE rds_compress;
Ubah tablespace default menjadi tablespace untuk kompresi. Dengan cara ini, fitur TPC digunakan secara default untuk tabel dan indeks baru.
-- Setel tablespace default menjadi tablespace untuk kompresi. SET default_tablespace TO 'rds_compress'; -- Saat membuat tabel atau indeks, Anda tidak perlu menentukan tablespace. Secara default, fitur TPC digunakan. CREATE TABLE <tablename> ...; CREATE INDEX <indexname> ...;
Pertanyaan terkait
Periksa apakah tabel atau indeks dibuat di tablespace untuk kompresi.
Di baris perintah psql, masukkan
\d+ <Nama tabel>untuk memeriksa detail tabel.Jika tabel dan indeks dibuat di tablespace untuk kompresi, Anda dapat menggunakan fitur TPC. Output berikut menunjukkan skema tabel sysbench.
Table "public.sbtest1" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+----------------+-----------+----------+-------------------------------------+----------+-------------+--------------+------------- id | integer | | not null | nextval('sbtest1_id_seq'::regclass) | plain | | | k | integer | | not null | 0 | plain | | | c | character(120) | | not null | ''::bpchar | extended | | | pad | character(60) | | not null | ''::bpchar | extended | | | Indexes: "sbtest1_pkey" PRIMARY KEY, btree (id), tablespace "rds_compress" "k_1" btree (k), tablespace "rds_compress" Tablespace: "rds_compress" Access method: heap
Periksa apakah data telah dikompres.
Anda dapat menggunakan fungsi seperti
pg_database_size,pg_tablespace_size,pg_relation_size,pg_table_size,pg_index_size, danpg_total_relation_sizeuntuk melihat ukuran data secara real-time.CatatanAnda dapat menggunakan sysbench untuk memasukkan jumlah data uji yang sama ke dalam tabel terkompresi dan tabel non-terkompresi secara terpisah untuk memeriksa penggunaan disk tabel. Penggunaan disk tabel terkompresi sekitar 50% dari penggunaan disk tabel non-terkompresi.
Hitung rasio kompresi tabel.
SELECT pg_relation_size('<tablename>')::float / (relpages * 8192) from pg_class WHERE relname = '<tablename>';CatatanPada pernyataan sebelumnya, fungsi
pg_relation_size('<tablename>')dipanggil untuk memeriksa penggunaan disk tabel dalam byte dari direktori sistempg_classdan mengonversi nilai yang diperoleh menjadi bilangan floating-point. Kemudian, bilangan floating-point tersebut dibagi dengan nilai(relpages × 8192)untuk mendapatkan ukuran rata-rata setiap halaman dalam byte.relpagesmenentukan jumlah total halaman dalam tabel.8192adalah ukuran halaman default di PostgreSQL, yaitu 8 KB dalam banyak kasus. Hasil kueri menunjukkan rasio kompresi rata-rata untuk tabel. Nilai kecil menunjukkan rasio kompresi tinggi.
Nonaktifkan fitur TPC untuk tabel atau indeks
Jika Anda tidak lagi menggunakan fitur TPC untuk tabel atau indeks, jalankan pernyataan berikut untuk menonaktifkan fitur TPC untuk tabel atau indeks.
ALTER TABLE <tablename> SET TABLESPACE pg_default;
ALTER INDEX <indexname> SET TABLESPACE pg_default;Pengujian kinerja
Dalam pengujian ini, sysbench digunakan untuk mengevaluasi kinerja sebelum dan sesudah Anda mengaktifkan fitur TPC untuk instance RDS Anda.
Tabel berikut menggambarkan konfigurasi instance RDS yang diuji.
Spesifikasi | Kapasitas penyimpanan | Buffer pool |
8 core, 32 GB | PL1 Enterprise SSD (ESSD) dengan Bandwidth I/O maksimum 350 MB/s | Nilai default: 8 GB |
Uji 1 dalam kondisi ekstrem (sumber daya CPU atau I/O habis)
Pengujian dilakukan pada dataset 8 GB, 80 GB, dan 640 GB. Kode berikut menggambarkan konfigurasi parameter utama untuk sysbench.
--tables=100 --table-size=<400000, 4000000, or 32000000> --report-interval=1 --time=100 --threads=64Anda harus mengonfigurasi parameter --table-size berdasarkan ukuran dataset. Setel parameter ke 400000 untuk dataset 8 GB, 4000000 untuk dataset 80 GB, dan 32000000 untuk dataset 640 GB.
Hasil pengujian
otlp_read_only
Ukuran dataset
Apakah TPC diaktifkan
TPS
Bandwidth I/O (MB/s)
Pemanfaatan CPU
8 GB
Tidak
6.878
Bandwidth baca: 0
100%
Ya
6.914
Bandwidth baca: 0
100%
80 GB
Tidak
5.939
Bandwidth baca: 280
100%
Ya
5.945
Bandwidth baca: 15
100%
640 GB
Tidak
2.222
Bandwidth baca: 350
44%
Ya
4.508
Bandwidth baca: 320
100%
otlp_write_only
Ukuran dataset
Apakah TPC diaktifkan
TPS
Bandwidth I/O (MB/s)
Pemanfaatan CPU
8 GB
Tidak
22.151
Bandwidth baca: 0
Bandwidth tulis: 100
100%
Ya
22.314
Bandwidth baca: 0
Bandwidth tulis: 50
100%
80 GB
Tidak
7.044
Bandwidth baca: 80
Bandwidth tulis: 270
30%
Ya
5.493
Bandwidth baca: 10
Bandwidth tulis: 180
100%
640 GB
Tidak
2.375
Bandwidth baca: 80
Bandwidth tulis: 270
20%
Ya
1.245
Bandwidth baca: 25
Bandwidth tulis: 210
100%
Uji 2 dalam kondisi non-ekstrem (sumber daya CPU dan I/O tidak habis)
Dalam pengujian ini, sysbench digunakan untuk menguji dataset 640 GB. Kode berikut menggambarkan konfigurasi parameter utama untuk sysbench.
--tables=100 --table-size=32000000 --report-interval=1 --time=100 --threads=4Hasil pengujian
Metode pengujian | Apakah TPC diaktifkan | TPS | Bandwidth I/O (MB/s) | Pemanfaatan CPU |
otlp_read_only | Tidak | 720 |
| 7,5% |
Ya | 795 |
| 10,6% | |
otlp_write_only | Tidak | 1.497 |
| 6,8% |
Ya | 1.000 |
| 25% |
Kesimpulan
Setelah Anda mengaktifkan fitur TPC, perhatikan poin-poin berikut:
Kinerja baca meningkat. Jika Anda menggunakan dataset besar, kinerja baca meningkat secara signifikan.
Kinerja tulis menurun. Jika Anda menggunakan dataset besar, kinerja tulis menurun secara signifikan.
Instance RDS mengonsumsi lebih banyak sumber daya CPU dan mengurangi konsumsi I/O.
Fitur TPC cocok untuk skenario di mana sejumlah besar permintaan baca dan sedikit permintaan tulis perlu diproses. Setelah Anda mengaktifkan fitur TPC untuk instance RDS Anda, kinerja meningkat secara signifikan terutama ketika sumber daya CPU cukup dan penggunaan sumber daya I/O tinggi.
FAQ
Setelah saya mengaktifkan fitur TPC untuk instance RDS saya, apakah pg_dump dan pg_basebackup berjalan seperti yang diharapkan?
Ya, pg_dump dan pg_basebackup berjalan seperti yang diharapkan. Jika Anda ingin memulihkan data cadangan yang dihasilkan dengan menggunakan pg_basebackup ke instance RDS lain, Anda harus mengaktifkan fitur TPC untuk instance RDS tujuan.