全部产品
Search
文档中心

ApsaraDB RDS:Gunakan fitur TPC

更新时间:Jun 25, 2025

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

  1. 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');
    Penting

    Jangan modifikasi nama, jalur, dan algoritma kompresi tablespace yang dibuat pada langkah ini.

  2. 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.

    1. 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, dan pg_total_relation_size untuk melihat ukuran data secara real-time.

    Catatan

    Anda 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>';
    Catatan

    Pada pernyataan sebelumnya, fungsi pg_relation_size('<tablename>') dipanggil untuk memeriksa penggunaan disk tabel dalam byte dari direktori sistem pg_class dan 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. relpages menentukan jumlah total halaman dalam tabel. 8192 adalah 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=64
Catatan

Anda 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=4

Hasil pengujian

Metode pengujian

Apakah TPC diaktifkan

TPS

Bandwidth I/O (MB/s)

Pemanfaatan CPU

otlp_read_only

Tidak

720

  • Bandwidth baca: 112

7,5%

Ya

795

  • Bandwidth baca: 56

10,6%

otlp_write_only

Tidak

1.497

  • Bandwidth baca: 60

  • Bandwidth tulis: 180

6,8%

Ya

1.000

  • Bandwidth baca: 30

  • Bandwidth tulis: 90

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.