All Products
Search
Document Center

PolarDB:Cache ukuran tabel (RSC)

Last Updated:Jan 28, 2026

Topik ini menjelaskan fitur cache ukuran tabel dari PolarDB for PostgreSQL dan .

Informasi latar belakang

Saat sebuah database mengeksekusi pernyataan SQL, sistem tersebut melakukan kueri terhadap tabel sistem, tabel pengguna, dan indeksnya beberapa kali. Selama proses ini, PolarDB for PostgreSQL dan sering menggunakan antarmuka smgrnblocks pada lapisan manajemen penyimpanan (smgr) untuk mengambil jumlah blok dalam file tabel. Antarmuka smgrnblocks memperoleh panjang file melalui antarmuka lseek dari sistem file, lalu menghitung jumlah blok berdasarkan ukuran blok. Karena antarmuka smgrnblocks berada pada jalur kritis pemrosesan SQL, panggilan yang sering ke antarmuka sistem file dapat sangat memengaruhi performa database. Pada PolarDB for PostgreSQL dan yang menggunakan sistem file terdistribusi PolarFileSystem (PolarFS), latensi pemanggilan antarmuka lseek jauh lebih tinggi dibandingkan sistem file standalone, sehingga memperlambat waktu eksekusi pernyataan SQL.

Untuk mengurangi panggilan ke sistem file, PolarDB for PostgreSQL dan menerapkan cache pada lapisan manajemen penyimpanan untuk jumlah blok dalam file tabel. Cache ini disebut Relation Size Cache (RSC). RSC menyimpan jumlah blok suatu tabel di memori bersama. Saat jumlah blok dalam suatu tabel berubah, nilai cache di memori bersama diperbarui. Permintaan jumlah blok dalam file tabel akan menggunakan cache terlebih dahulu, sehingga mengurangi permintaan ke sistem file dan mempercepat eksekusi SQL.

Penerapan

Fitur ini didukung pada versi berikut dari PolarDB for PostgreSQL:

  • PostgreSQL 18 (versi mesin minor 2.0.18.0.1.0 atau lebih baru)

  • PostgreSQL 17 (versi mesin minor 2.0.17.2.1.0 atau lebih baru)

  • PostgreSQL 16 (versi mesin minor 2.0.16.3.1.1 atau lebih baru)

  • PostgreSQL 15 (versi mesin minor 2.0.15.7.1.1 atau lebih baru)

  • PostgreSQL 14 (versi mesin minor 2.0.14.12.23.1 atau lebih baru)

Catatan

Anda dapat melihat nomor versi mesin minor di Konsol atau menjalankan pernyataan SHOW polardb_version;. Jika persyaratan versi mesin minor belum terpenuhi, Anda harus upgrade versi mesin minor.

Pengenalan fitur

Permintaan RSC

RSC terdiri dari array satu dimensi dan Tabel hash di memori bersama:

  • Setiap entri cache dalam array menyimpan jumlah blok untuk suatu relasi, yang dapat berupa tabel atau indeks.

  • Tabel hash mencatat pemetaan antara pengidentifikasi unik lapisan penyimpanan relasi (RelFileNode) dan entri cache-nya dalam array.

Semua proses melakukan kueri terhadap RSC menggunakan dua level indeks berikut:

  • Indeks level 1: Menyimpan pointer dan generasi (nomor versi) dari entri cache RSC yang terakhir diakses. Jika tabel saat ini sama dengan tabel sebelumnya dan generasi entri cache tidak berubah, proses dapat langsung mengambil jumlah blok tabel dari pointer tersebut. Dalam skenario yang banyak membaca suatu tabel tertentu, indeks level 1 memiliki tingkat hit yang tinggi. Saat pemetaan dalam tabel hash RSC dimodifikasi, generasi entri cache RSC yang sesuai akan ditambah, sehingga meng-invalidate indeks level 1.

  • Indeks level 2: Jika terjadi cache miss pada level 1, proses melakukan kueri terhadap Tabel hash di memori bersama untuk menemukan entri cache RSC untuk tabel saat ini. Proses tersebut mengambil jumlah blok dan memperbarui indeks level 1.

Jika kedua level indeks gagal menemukan tabel dan jumlah bloknya dalam RSC, cache eviction dipicu. Algoritma Segmented Least Recently Used (SLRU) memilih entri cache RSC yang jarang digunakan untuk dihapus. Kemudian, antarmuka lseek sistem file dipanggil. Jumlah blok hasilnya kemudian digunakan untuk memperbarui entri cache RSC yang telah dikosongkan, dan kedua level indeks juga diperbarui.

Pembaruan RSC pada node primary dan standby

Setelah Anda mengaktifkan fitur RSC, antarmuka lapisan manajemen penyimpanan yang mengubah ukuran file tabel juga harus memperbarui entri cache RSC yang sesuai di memori bersama. Hal ini memastikan bahwa jumlah blok yang dicache sesuai dengan jumlah blok aktual di sistem file.

  • Antarmuka untuk memperluas file tabel memperbarui jumlah blok file tabel yang diperluas dalam RSC.

  • Antarmuka untuk memotong (truncate) file tabel memperbarui jumlah blok file tabel yang dipotong dalam RSC.

Node standby menggunakan replikasi fisik untuk menyinkronkan dengan node primary. Selama pemutaran ulang Write-Ahead Log (WAL), mereka memanggil antarmuka lapisan manajemen penyimpanan yang sama untuk memodifikasi panjang file tabel. Oleh karena itu, RSC diperbarui dengan cara yang sama seperti pada node primary.

Pembaruan RSC pada node replika

Node replica berbagi penyimpanan fisik dengan node primary dan menggunakan mekanisme LogIndex untuk menyinkronkan. Node replica tidak melakukan penulisan ke penyimpanan. Oleh karena itu, node tersebut tidak dapat memperbarui nilai cache RSC di memori melalui antarmuka lapisan manajemen penyimpanan.

Node replica mengurai nomor blok data yang direferensikan dalam catatan WAL dan membandingkannya dengan jumlah blok saat ini dalam RSC. Proses ini menentukan apakah panjang file dalam penyimpanan bersama telah berubah. Jika nomor blok dari catatan WAL lebih besar daripada jumlah blok yang dicache saat ini, nilai cache RSC diperbarui menjadi jumlah blok baru. Jika catatan WAL yang menunjukkan pemotongan file diurai, jumlah blok yang dicache dalam RSC dibuang, dan cache tersebut kemudian diisi ulang pada panggilan sistem file berikutnya.

Panduan penggunaan

Parameter GUC

Parameter Grand Unified Configuration (GUC) berikut tersedia untuk RSC:

Parameter

Deskripsi

polar_enable_rel_size_cache

Menentukan apakah akan mengaktifkan fitur RSC. Nilai valid:

  • on (default): Mengaktifkan fitur RSC.

  • off: Menonaktifkan fitur RSC.

polar_enable_replica_rel_size_cache

Menentukan apakah fitur RSC diaktifkan pada node replica. Nilai yang valid:

  • on (default): Mengaktifkan fitur RSC pada node replica.

  • off: Menonaktifkan fitur RSC pada node replica.

polar_enable_standby_rel_size_cache

Menentukan apakah fitur RSC diaktifkan pada node standby. Nilai yang valid:

  • on (default): Mengaktifkan fitur RSC pada node standby.

  • off: Menonaktifkan fitur RSC pada node standby.

Uji kinerja

  • Saat RSC dinonaktifkan, latensi untuk meminta jumlah blok tabel berukuran 32 GB adalah sekitar 55 µs:

    SHOW polar_enable_rel_size_cache;
     polar_enable_rel_size_cache
    -----------------------------
     off
    (1 row)
    
    SELECT polar_smgrperf_nblocks(32, true, false);
    NOTICE:  testing logical file length with 32 GB
    INFO:  iops=18341.1/s, lat=54.52us
    INFO:  iops=17504.0/s, lat=57.13us
    INFO:  iops=17960.8/s, lat=55.68us
    INFO:  iops=17973.0/s, lat=55.64us
    INFO:  iops=17603.5/s, lat=56.81us
    INFO:  iops=17403.8/s, lat=57.46us
    INFO:  iops=17506.2/s, lat=57.12us
    INFO:  iops=18061.7/s, lat=55.37us
  • Saat RSC diaktifkan, latensi untuk meminta jumlah blok tabel berukuran 32 GB adalah sekitar 0,07 µs:

    SHOW polar_enable_rel_size_cache;
     polar_enable_rel_size_cache
    -----------------------------
     on
    (1 row)
    
    SELECT polar_smgrperf_nblocks(32, true, false);
    NOTICE:  testing logical file length with 32 GB
    INFO:  iops=14155515.6/s, lat=0.07us
    INFO:  iops=13897273.6/s, lat=0.07us
    INFO:  iops=13869926.3/s, lat=0.07us
    INFO:  iops=13779602.7/s, lat=0.07us
    INFO:  iops=14159120.5/s, lat=0.07us
    INFO:  iops=14147065.6/s, lat=0.07us
    INFO:  iops=14124141.9/s, lat=0.07us
    INFO:  iops=14162773.3/s, lat=0.07us